Ported closure init runtime functions to new calling convention
authorSimon Hausmann <simon.hausmann@digia.com>
Thu, 14 Feb 2013 15:18:01 +0000 (16:18 +0100)
committerLars Knoll <lars.knoll@digia.com>
Thu, 14 Feb 2013 19:30:43 +0000 (20:30 +0100)
Change-Id: Icb5765069b296977480d896aacfbd09d64dbdad6
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/v4/llvm_runtime.cpp
src/v4/moth/qv4vme_moth.cpp
src/v4/qmljs_runtime.cpp
src/v4/qmljs_runtime.h
src/v4/qv4isel_masm.cpp

index 9b1bc11..85cb816 100644 (file)
@@ -95,7 +95,7 @@ void __qmljs_llvm_init_closure(ExecutionContext *ctx, Value *result,
                                                hasNestedFunctions,
                                                formals, formalCount,
                                                locals, localCount);
-    *result = __qmljs_init_closure(clos, ctx);
+    __qmljs_init_closure(ctx, result, clos);
 }
 
 bool __qmljs_llvm_to_boolean(ExecutionContext *ctx, const Value *value)
index 9c3901e..3850955 100644 (file)
@@ -172,7 +172,7 @@ VM::Value VME::operator()(QQmlJS::VM::ExecutionContext *context, const uchar *co
     MOTH_END_INSTR(LoadValue)
 
     MOTH_BEGIN_INSTR(LoadClosure)
-        VALUE(instr.result) = __qmljs_init_closure(instr.value, context);
+        __qmljs_init_closure(context, VALUEPTR(instr.result), instr.value);
     MOTH_END_INSTR(LoadClosure)
 
     MOTH_BEGIN_INSTR(LoadName)
index ad871d6..f41208b 100644 (file)
@@ -114,10 +114,10 @@ QString numberToString(double num, int radix = 10)
 
 extern "C" {
 
-Value __qmljs_init_closure(VM::Function *clos, ExecutionContext *ctx)
+void __qmljs_init_closure(ExecutionContext *ctx, Value *result, VM::Function *clos)
 {
     assert(clos);
-    return Value::fromObject(ctx->engine->newScriptFunction(ctx, clos));
+    *result = Value::fromObject(ctx->engine->newScriptFunction(ctx, clos));
 }
 
 Function *__qmljs_register_function(ExecutionContext *ctx, String *name,
index 98bc2e6..39699d9 100644 (file)
@@ -127,7 +127,7 @@ void __qmljs_builtin_define_array_property(Value object, int index, Value val, E
 void __qmljs_builtin_define_getter_setter(Value object, String *name, Value getter, Value setter, ExecutionContext *ctx);
 
 // constructors
-Value __qmljs_init_closure(VM::Function *clos, ExecutionContext *ctx);
+void __qmljs_init_closure(ExecutionContext *ctx, Value *result, VM::Function *clos);
 VM::Function *__qmljs_register_function(ExecutionContext *ctx, String *name,
                                         bool hasDirectEval,
                                         bool usesArgumentsObject, bool isStrict,
index 19d237f..591de83 100644 (file)
@@ -690,7 +690,7 @@ void InstructionSelection::initClosure(IR::Closure *closure, IR::Temp *target)
 {
     VM::Function *vmFunc = vmFunction(closure->value);
     assert(vmFunc);
-    generateFunctionCall(target, __qmljs_init_closure, Assembler::TrustedImmPtr(vmFunc), Assembler::ContextRegister);
+    generateFunctionCall(Assembler::Void, __qmljs_init_closure, Assembler::ContextRegister, Assembler::PointerToValue(target), Assembler::TrustedImmPtr(vmFunc));
 }
 
 void InstructionSelection::getProperty(IR::Temp *base, const QString &name, IR::Temp *target)