Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
  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);
  }
Ejemplo n.º 3
0
  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);
  }
Ejemplo n.º 4
0
  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);
  }
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
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;
}