CallUnit* CallUnit::create_constant_value(STATE, Object* self, Object* val) { CallUnit* pe = state->new_object<CallUnit>(as<Class>(self)); pe->kind_ = CallUnit::eConstantValue; pe->value(state, val); pe->execute = constant_value_executor; return pe; }
Object* CallUnitAdapter::adapter_executor(STATE, CallFrame* call_frame, Executable* exec, Module* mod, Arguments& args) { CallUnitAdapter* adapter = as<CallUnitAdapter>(exec); CallUnit* unit = adapter->unit_; return unit->execute(state, call_frame, unit, exec, mod, args); }
Object* CallUnitAdapter::adapter_executor(STATE, CallFrame* call_frame, Dispatch& msg, Arguments& args) { CallUnitAdapter* adapter = as<CallUnitAdapter>(msg.method); CallUnit* unit = adapter->unit_; return unit->execute(state, call_frame, unit, msg, args); }
Object* CallCustomCache::check_cache(STATE, CallSite* call_site, CallFrame* call_frame, Arguments& args) { CallCustomCache* cache = static_cast<CallCustomCache*>(call_site); CallUnit* cu = cache->call_unit_; return cu->execute(state, call_frame, cu, cu->executable(), cu->module(), args); }
CallUnit* CallUnit::create_kind_of(STATE, Object* self, Module* mod, Fixnum* which) { CallUnit* pe = state->new_object<CallUnit>(as<Class>(self)); pe->kind_ = CallUnit::eKindOf; pe->value(state, mod); pe->which_ = which->to_native(); pe->execute = kind_of_executor; return pe; }
CallUnit* CallUnit::create_for_method(STATE, Object* self, Module* mod, Executable* exec, Symbol* name) { CallUnit* pe = state->new_object<CallUnit>(as<Class>(self)); pe->kind_ = CallUnit::eForMethod; pe->module(state, mod); pe->executable(state, exec); pe->name(state, name); pe->execute = method_executor; return pe; }
CallUnit* CallUnit::create_test(STATE, Object* self, CallUnit* cond, CallUnit* c_then, CallUnit* c_else) { CallUnit* pe = state->new_object<CallUnit>(as<Class>(self)); pe->kind_ = CallUnit::eTest; pe->test_condition(state, cond); pe->test_then(state, c_then); pe->test_else(state, c_else); pe->execute = test_executor; return pe; }