aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jit
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-05-12 22:54:27 +0200
committerLars Knoll <lars.knoll@qt.io>2018-05-13 12:55:32 +0000
commitfbca1b7942fc58d5573c6ec95295c2d4472b80ff (patch)
tree25bc99ba2cc4b4c2742c3b799707415862b840dc /src/qml/jit
parent9e379e8fb72305aff1fb6758c23198c8b30829ac (diff)
Fix array destructuring
Array destructuring should use iterator objects, not integer indexes. Change-Id: I769bb1d63246da6bc45233f7a6e9a8e5ddc53a4d Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jit')
-rw-r--r--src/qml/jit/qv4jit.cpp5
-rw-r--r--src/qml/jit/qv4jit_p.h2
2 files changed, 4 insertions, 3 deletions
diff --git a/src/qml/jit/qv4jit.cpp b/src/qml/jit/qv4jit.cpp
index 77024176ae..e0a5a0590c 100644
--- a/src/qml/jit/qv4jit.cpp
+++ b/src/qml/jit/qv4jit.cpp
@@ -714,10 +714,11 @@ void BaselineJIT::generate_GetIterator(int iterator)
as->checkException();
}
-void BaselineJIT::generate_IteratorNext()
+void BaselineJIT::generate_IteratorNext(int returnUndefinedWhenDone)
{
as->saveAccumulatorInFrame();
- as->prepareCallWithArgCount(2);
+ as->prepareCallWithArgCount(3);
+ as->passInt32AsArg(returnUndefinedWhenDone, 2);
as->passAccumulatorAsArg(1);
as->passEngineAsArg(0);
JIT_GENERATE_RUNTIME_CALL(Runtime::method_iteratorNext, Assembler::ResultInAccumulator);
diff --git a/src/qml/jit/qv4jit_p.h b/src/qml/jit/qv4jit_p.h
index d395ea908c..942b96071f 100644
--- a/src/qml/jit/qv4jit_p.h
+++ b/src/qml/jit/qv4jit_p.h
@@ -186,7 +186,7 @@ public:
void generate_PopScriptContext() override;
void generate_PopContext(int reg) override;
void generate_GetIterator(int iterator) override;
- void generate_IteratorNext() override;
+ void generate_IteratorNext(int returnUndefinedWhenDone) override;
void generate_DeleteMember(int member, int base) override;
void generate_DeleteSubscript(int base, int index) override;
void generate_DeleteName(int name) override;