object->objectValue->put(name, value, /*flag*/ 0);
}
+void __qmljs_set_property_closure(Context *ctx, Value *object, String *name, IR::Function *function)
+{
+ Value value;
+ __qmljs_init_object(ctx, &value, new VM::ScriptFunction(function));
+ object->objectValue->put(name, value, /*flag*/ 0);
+}
+
void __qmljs_set_activation_property(Context *ctx, String *name, Value *value)
{
__qmljs_set_property(ctx, &ctx->activation, name, value);
__qmljs_set_property_string(ctx, &ctx->activation, name, value);
}
+void __qmljs_set_activation_property_closure(Context *ctx, String *name, IR::Function *value)
+{
+ __qmljs_set_property_closure(ctx, &ctx->activation, name, value);
+}
+
void __qmljs_get_property(Context *ctx, Value *result, Value *object, String *name)
{
if (object->type == OBJECT_TYPE) {
#include <math.h>
namespace QQmlJS {
+
+namespace IR {
+struct Function;
+}
+
namespace VM {
enum ValueType {
void __qmljs_set_property_boolean(Context *ctx, Value *object, String *name, bool value);
void __qmljs_set_property_number(Context *ctx, Value *object, String *name, double value);
void __qmljs_set_property_string(Context *ctx, Value *object, String *name, String *value);
+void __qmljs_set_property_closure(Context *ctx, Value *object, String *name, IR::Function *function);
void __qmljs_set_activation_property(Context *ctx, String *name, Value *value);
void __qmljs_set_activation_property_boolean(Context *ctx, String *name, bool value);
void __qmljs_set_activation_property_number(Context *ctx, String *name, double value);
void __qmljs_set_activation_property_string(Context *ctx, String *name, String *value);
+void __qmljs_set_activation_property_closure(Context *ctx, String *name, IR::Function *function);
void __qmljs_get_property(Context *ctx, Value *result, Value *object, String *name);
void __qmljs_get_activation_property(Context *ctx, Value *result, String *name);
void __qmljs_copy_activation_property(Context *ctx, String *name, String *other);
amd64_mov_reg_imm(_codePtr, AMD64_RDX, identifier(*other->id));
amd64_call_code(_codePtr, __qmljs_copy_activation_property);
return;
+ } else if (IR::Closure *clos = s->source->asClosure()) {
+ amd64_mov_reg_reg(_codePtr, AMD64_RDI, AMD64_R14, 8);
+ amd64_mov_reg_imm(_codePtr, AMD64_RSI, propertyName);
+ amd64_mov_reg_imm(_codePtr, AMD64_RDX, clos->value);
+ amd64_call_code(_codePtr, __qmljs_set_activation_property_closure);
+ return;
}
} else if (IR::Temp *t = s->target->asTemp()) {
if (IR::Name *n = s->source->asName()) {
amd64_mov_reg_imm(_codePtr, AMD64_RCX, VM::String::get(0, *str->value));
amd64_call_code(_codePtr, __qmljs_set_property_string);
return;
+ } else if (IR::Closure *clos = s->source->asClosure()) {
+ amd64_mov_reg_reg(_codePtr, AMD64_RDI, AMD64_R14, 8);
+ loadTempAddress(AMD64_RSI, base);
+ amd64_mov_reg_imm(_codePtr, AMD64_RDX, identifier(*m->name));
+ amd64_mov_reg_imm(_codePtr, AMD64_RCX, clos->value);
+ amd64_call_code(_codePtr, __qmljs_set_property_closure);
+ return;
}
}
}
--- /dev/null
+
+function foo(a,b) { print(a, b) }
+var foo2 = foo
+var foo3 = function(a,b) { print(a, b); }
+foo(1,2)
+foo2(1,2)
+foo3(1, 2)