.
This commit is contained in:
40
test/tests.c
40
test/tests.c
@@ -423,15 +423,45 @@ static void run_assembly_test_template(lua_State* L)
|
|||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
|
|
||||||
// format code
|
// format code
|
||||||
lua_dostring(L, "string.format");
|
luaL_dostring(L, "return string.format");
|
||||||
|
assert(lua_isfunction(L, -1));
|
||||||
lua_pushstring(L, template);
|
lua_pushstring(L, template);
|
||||||
|
|
||||||
|
lua_getfield(L, -3, "parameters");
|
||||||
|
assert(!lua_isnil(L, -1));
|
||||||
|
int n_params = (int) luaL_len(L, -1);
|
||||||
|
for (long j = 0; j < n_params; ++j)
|
||||||
|
lua_geti(L, -(j + 1), j + 1);
|
||||||
|
lua_remove(L, -(n_params + 1));
|
||||||
|
|
||||||
|
lua_call(L, n_params + 1, 1);
|
||||||
|
const char* formatted_code = strdup(lua_tostring(L, -1));
|
||||||
|
lua_pop(L, 1);
|
||||||
|
|
||||||
|
// run code
|
||||||
|
TycheVM* T = tyc_new();
|
||||||
|
uint8_t* bytecode; size_t bytecode_sz;
|
||||||
|
assert(code_assemble(formatted_code, &bytecode, &bytecode_sz) == T_OK);
|
||||||
|
assert(tyc_load_bytecode(T, bytecode, bytecode_sz) == T_OK);
|
||||||
|
assert(tyc_call(T, 0) == T_OK);
|
||||||
|
|
||||||
|
// check stack top
|
||||||
|
lua_getfield(L, -1, "expected_stack_top");
|
||||||
|
if (lua_isinteger(L, -1)) {
|
||||||
|
TYC_TYPE type; assert(tyc_type(T, -1, &type) == T_OK); assert(type == TT_INTEGER);
|
||||||
|
int32_t v; assert(tyc_tointeger(T, -1, &v) == T_OK); assert(v == lua_tointeger(L, -1));
|
||||||
|
} else if (!lua_isnil(L, -1)) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
lua_pop(L, 1);
|
||||||
|
|
||||||
|
// cleanup
|
||||||
|
free(bytecode);
|
||||||
|
tyc_destroy(T);
|
||||||
|
free(formatted_code);
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t* bytecode; size_t bytecode_sz;
|
lua_pop(L, 2);
|
||||||
// assert(code_assemble(lua_tostring(L, -1), &bytecode, &bytecode_sz) == T_OK);
|
|
||||||
|
|
||||||
lua_pop(L, 1);
|
|
||||||
free(template);
|
free(template);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user