Object* CompiledCode::default_executor(STATE, CallFrame* call_frame, Executable* exec, Module* mod, Arguments& args) { LockableScopedLock lg(state, &state->shared(), __FILE__, __LINE__); CompiledCode* code = as<CompiledCode>(exec); if(code->execute == default_executor) { const char* reason = 0; int ip = -1; OnStack<5> os(state, code, exec, mod, args.recv_location(), args.block_location()); VariableRootBuffer vrb(state->vm()->current_root_buffers(), &args.arguments_location(), args.total()); GCTokenImpl gct; if(!code->internalize(state, gct, call_frame, &reason, &ip)) { Exception::bytecode_error(state, call_frame, code, ip, reason); return 0; } } lg.unlock(); return code->execute(state, call_frame, exec, mod, args); }
Object* CompiledCode::default_executor(STATE, Executable* exec, Module* mod, Arguments& args) { CompiledCode* code = as<CompiledCode>(exec); if(code->execute == default_executor) { if(!code->internalize(state)) return 0; } return code->execute(state, exec, mod, args); }