s_info := cast(^Type_Info_Struct) param_info;
if s_info.members.count == 1 {
return type_encoding(s_info.members[0].type);
- return;
}
assert(false, "Passing structures between wasm and c is not yet supported.");
# FLAGS="-g3 -O2 -DOVM_DEBUG=1"
# FLAGS="-g3 -DOVM_VERBOSE=1"
-FLAGS="-Ofast"
+FLAGS="-Ofast -fno-stack-protector"
LIBS="-pthread"
TARGET="../shared/lib/linux_$(uname -m)/lib/libovmwasm.so"
C_FILES="src/wasm.c src/vm/*.c src/wasm/*.c src/debug/*.c"
i32 extra_params = bh_arr_length(state->params) - func->param_count; \
ovm_assert(extra_params >= 0); \
ovm__func_setup_stack_frame(state, func, instr->r); \
+ bh_arr_fastdeleten(state->params, func->param_count); \
if (func->kind == OVM_FUNC_INTERNAL) { \
- fori (i, 0, func->param_count) { \
- VAL(i) = state->params[i + extra_params]; \
- } \
- bh_arr_fastdeleten(state->params, func->param_count); \
-\
+ memcpy(&VAL(0), &state->params[extra_params], func->param_count * sizeof(ovm_value_t)); \
state->pc = func->start_instr; \
} else { \
ovm_value_t result = {0}; \
ovm_external_func_t external_func = state->external_funcs[func->external_func_idx]; \
external_func.native_func(external_func.userdata, &state->params[extra_params], &result); \
- bh_arr_fastdeleten(state->params, func->param_count); \
\
ovm__func_teardown_stack_frame(state); \
\