addInstruction(call);
}
-void InstructionSelection::constructActivationProperty(IR::New *call, IR::Temp *result)
+void InstructionSelection::constructActivationProperty(IR::Name *func,
+ IR::ExprList *args,
+ IR::Temp *result)
{
Instruction::CreateActivationProperty create;
- create.name = engine()->newString(*call->base->asName()->id);
- prepareCallArgs(call->args, create.argc, create.args);
+ create.name = engine()->newString(*func->id);
+ prepareCallArgs(args, create.argc, create.args);
create.targetTempIndex = result->index;
addInstruction(create);
}
virtual void callBuiltinDefineProperty(IR::Temp *object, const QString &name, IR::Temp *value);
virtual void callValue(IR::Call *c, IR::Temp *result);
virtual void callProperty(IR::Call *c, IR::Temp *result);
- virtual void constructActivationProperty(IR::New *call, IR::Temp *result);
+ virtual void constructActivationProperty(IR::Name *func, IR::ExprList *args, IR::Temp *result);
virtual void constructProperty(IR::New *call, IR::Temp *result);
virtual void constructValue(IR::New *call, IR::Temp *result);
virtual void loadThisObject(IR::Temp *temp);
Q_UNREACHABLE();
}
-void InstructionSelection::constructActivationProperty(IR::New *call, IR::Temp *result)
+void InstructionSelection::constructActivationProperty(IR::Name *func,
+ IR::ExprList *args,
+ IR::Temp *result)
{
// TODO
assert(!"TODO!");
virtual void callBuiltinDefineProperty(IR::Temp *object, const QString &name, IR::Temp *value);
virtual void callValue(IR::Call *c, IR::Temp *temp);
virtual void callProperty(IR::Call *c, IR::Temp *temp);
- virtual void constructActivationProperty(IR::New *call, IR::Temp *result);
+ virtual void constructActivationProperty(IR::Name *func, IR::ExprList *args, IR::Temp *result);
virtual void constructProperty(IR::New *call, IR::Temp *result);
virtual void constructValue(IR::New *call, IR::Temp *result);
virtual void loadThisObject(IR::Temp *temp);
return engine()->identifier(s);
}
-void InstructionSelection::constructActivationProperty(IR::New *call, IR::Temp *result)
+void InstructionSelection::constructActivationProperty(IR::Name *func, IR::ExprList *args, IR::Temp *result)
{
- IR::Name *baseName = call->base->asName();
- assert(baseName != 0);
+ assert(func != 0);
- callRuntimeMethod(result, __qmljs_construct_activation_property, call->base, call->args);
+ callRuntimeMethod(result, __qmljs_construct_activation_property, func, args);
}
void InstructionSelection::constructProperty(IR::New *call, IR::Temp *result)
}
VM::String *identifier(const QString &s);
- virtual void constructActivationProperty(IR::New *call, IR::Temp *result);
+ virtual void constructActivationProperty(IR::Name *func, IR::ExprList *args, IR::Temp *result);
virtual void constructProperty(IR::New *ctor, IR::Temp *result);
virtual void constructValue(IR::New *call, IR::Temp *result);
initClosure(clos, t);
return;
} else if (IR::New *ctor = s->source->asNew()) {
- if (ctor->base->asName()) {
- constructActivationProperty(ctor, t);
+ if (Name *func = ctor->base->asName()) {
+ constructActivationProperty(func, ctor->args, t);
return;
} else if (ctor->base->asMember()) {
constructProperty(ctor, t);
virtual void callBuiltinDefineProperty(IR::Temp *object, const QString &name, IR::Temp *value) = 0;
virtual void callValue(IR::Call *c, IR::Temp *temp) = 0;
virtual void callProperty(IR::Call *c, IR::Temp *temp) = 0;
- virtual void constructActivationProperty(IR::New *call, IR::Temp *result) = 0;
+ virtual void constructActivationProperty(IR::Name *func, IR::ExprList *args, IR::Temp *result) = 0;
virtual void constructProperty(IR::New *ctor, IR::Temp *result) = 0;
virtual void constructValue(IR::New *call, IR::Temp *result) = 0;
virtual void loadThisObject(IR::Temp *temp) = 0;