numberCtor = Value::fromObject(new NumberCtor(rootContext));
booleanCtor = Value::fromObject(new BooleanCtor(rootContext));
arrayCtor = Value::fromObject(new ArrayCtor(rootContext));
- functionCtor = Value::fromObject(new FunctionCtor(rootContext));
+ functionCtor = Value::fromObject(new FunctionCtor(rootContext, factory));
dateCtor = Value::fromObject(new DateCtor(rootContext));
regExpCtor = Value::fromObject(new RegExpCtor(rootContext));
errorCtor = Value::fromObject(new ErrorCtor(rootContext));
return object;
}
-FunctionObject *ExecutionEngine::newFunctionCtor(ExecutionContext *ctx)
-{
- return new FunctionCtor(ctx);
-}
-
Object *ExecutionEngine::newArrayObject()
{
ArrayObject *object = new ArrayObject();
FunctionObject *newBooleanCtor(ExecutionContext *ctx);
Object *newFunctionObject(ExecutionContext *ctx);
- FunctionObject *newFunctionCtor(ExecutionContext *ctx);
Object *newArrayObject();
Object *newArrayObject(const Array &value);
//
// Function object
//
-FunctionCtor::FunctionCtor(ExecutionContext *scope)
+FunctionCtor::FunctionCtor(ExecutionContext *scope, EValISelFactory *factory)
: FunctionObject(scope)
+ , _factory(factory)
{
}
Codegen cg;
IR::Function *irf = cg(fe, &module);
- // FIXME: this mixes MASM and MOTH
- MASM::InstructionSelection isel(ctx->engine);
- isel(irf);
+ EvalInstructionSelection *isel = _factory->create(ctx->engine);
+ isel->run(irf);
+ delete isel;
ctx->thisObject = Value::fromObject(new ScriptFunction(ctx->engine->rootContext, irf));
return ctx->thisObject;
struct FunctionCtor: FunctionObject
{
- FunctionCtor(ExecutionContext *scope);
+ FunctionCtor(ExecutionContext *scope, EValISelFactory *factory);
virtual Value construct(ExecutionContext *ctx);
virtual Value call(ExecutionContext *ctx);
+
+private:
+ EValISelFactory *_factory;
};
struct FunctionPrototype: FunctionObject