diff options
author | Lars Knoll <lars.knoll@qt.io> | 2017-06-27 16:06:29 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2017-06-29 08:33:17 +0000 |
commit | dfe826d7f86db99bd6ecf681ec73c2e8c8b25a15 (patch) | |
tree | e3a98ece0c3e5599a44bbfd817abe2932d4b9355 /src/qml/compiler/qv4isel_moth.cpp | |
parent | 987734ff5872c397651630a616a002947fec3810 (diff) |
Switch over to new JS call setup
Differences:
- push parameters on the stack, including space for CallData members
- call instructions calculate the argument start
- use temp space above the calldata to evaluate arguments
- fewer temporaries are needed when a call is done while generating the
arguments of another call
- when calling the function, the js stack space above the callData is
not used, allowing for optimizations in the future
- Array and ObjectLiteral use the same mechanism
Change-Id: Id100fa06f12cc9d941b0f90b0b81b8270a8e4f5d
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/compiler/qv4isel_moth.cpp')
-rw-r--r-- | src/qml/compiler/qv4isel_moth.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/qml/compiler/qv4isel_moth.cpp b/src/qml/compiler/qv4isel_moth.cpp index 89140a1a5e..8f11253cca 100644 --- a/src/qml/compiler/qv4isel_moth.cpp +++ b/src/qml/compiler/qv4isel_moth.cpp @@ -314,7 +314,7 @@ void InstructionSelection::callValue(IR::Expr *value, IR::ExprList *args, IR::Ex { Instruction::CallValue call; prepareCallArgs(args, call.argc); - call.callData = callDataStart(); +// call.callData = callDataStart(); call.dest = getParam(value); call.result = getResultParam(result); addInstruction(call); @@ -360,7 +360,7 @@ void InstructionSelection::callProperty(IR::Expr *base, const QString &name, IR: call.base = getParam(base); call.name = registerString(name); prepareCallArgs(args, call.argc); - call.callData = callDataStart(); +// call.callData = callDataStart(); call.result = getResultParam(result); addInstruction(call); } @@ -374,7 +374,7 @@ void InstructionSelection::callSubscript(IR::Expr *base, IR::Expr *index, IR::Ex call.base = getParam(base); call.index = getParam(index); prepareCallArgs(args, call.argc); - call.callData = callDataStart(); +// call.callData = callDataStart(); call.result = getResultParam(result); addInstruction(call); } @@ -434,7 +434,7 @@ void InstructionSelection::constructValue(IR::Expr *value, IR::ExprList *args, I { Instruction::CreateValue create; create.func = getParam(value); - prepareCallArgs(args, create.argc); +// prepareCallArgs(args, create.argc); create.callData = callDataStart(); create.result = getResultParam(target); addInstruction(create); @@ -1028,7 +1028,7 @@ void InstructionSelection::callBuiltinInvalid(IR::Name *func, IR::ExprList *args Instruction::CallGlobalLookup call; call.index = registerGlobalGetterLookup(*func->id); prepareCallArgs(args, call.argc); - call.callData = callDataStart(); +// call.callData = callDataStart(); call.result = getResultParam(result); addInstruction(call); return; @@ -1036,7 +1036,7 @@ void InstructionSelection::callBuiltinInvalid(IR::Name *func, IR::ExprList *args Instruction::CallActivationProperty call; call.name = registerString(*func->id); prepareCallArgs(args, call.argc); - call.callData = callDataStart(); +// call.callData = callDataStart(); call.result = getResultParam(result); addInstruction(call); } |