void execute_instr(instr_s * instr){ switch(instr->opcode){ case assign_v: execute_assign(instr); break; case call_v: execute_call(instr); break; case funcenter_v: execute_funcenter(instr); break; case funcexit_v: execute_funcexit(instr); break; case pusharg_v: execute_pusharg(instr); break; case add_v: execute_arithmetic(instr); break; case sub_v: execute_arithmetic(instr); break; case mul_v: execute_arithmetic(instr); break; case div_v: execute_arithmetic(instr); break; case mod_v: execute_arithmetic(instr); break; case jump_v: execute_jump(instr); break; case jeq_v: execute_jeq(instr); break; case jne_v:execute_jeq(instr); break; case jgt_v:execute_cmp(instr); break; case jge_v:execute_cmp(instr); break; case jlt_v:execute_cmp(instr); break; case jle_v:execute_cmp(instr); break; case newtable_v: execute_newtable(instr); break; case tablegetelem_v: execute_tablegetelem(instr); break; case tablesetelem_v: execute_tablesetelem(instr); break; default: return; } }
void avm_calllibfunc(char *id){ library_func_t f = avm_getlibraryfunc(id); if(!f){ avm_error("unsupported lib func"); executionFinished = 1; }else{ topsp = top; totalActuals = 0; (*f)(); if(!executionFinished) execute_funcexit(NULL); } return; }
void avm_calllibfunc(char* funcName){ library_func_t f = avm_getlibraryfunc(funcName); if(!f) { avm_error("unsupported lib func '%s' called!\n", funcName); executionFinished = 1; } else { topsp = top; totalActuals = 0; (*f)(); if(!executionFinished) { execute_funcexit((instruction*) 0); } } }