diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-05-31 14:22:35 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-06-04 13:02:32 +0000 |
commit | bdb8cf49daf4a1c7dfb9bd9caf14e19e3aa66293 (patch) | |
tree | c9f2c88f41bc4f5dd7011325438436694f5449fb /src/qml/jit | |
parent | 502678a183e68a837a5b2ddee2978a3be5e9e008 (diff) |
Fix creation of object literals
Our method to create object literals wasn't compliant with the
ES7 spec, as we would in some cases re-order the properties.
This violated the spec which required properties to be created
in order, so that for-of would also iterate over them in creation
order.
As a nice side effect, this simplifies the code and gets a couple
of test cases using computed property names to pass.
Task-number: QTBUG-62512
Change-Id: I6dfe004357c5d46a0890027f4fd9e2d1e1a2a17a
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jit')
-rw-r--r-- | src/qml/jit/qv4baselinejit.cpp | 12 | ||||
-rw-r--r-- | src/qml/jit/qv4baselinejit_p.h | 4 |
2 files changed, 6 insertions, 10 deletions
diff --git a/src/qml/jit/qv4baselinejit.cpp b/src/qml/jit/qv4baselinejit.cpp index cd07ac4d58..d8f0976774 100644 --- a/src/qml/jit/qv4baselinejit.cpp +++ b/src/qml/jit/qv4baselinejit.cpp @@ -804,14 +804,12 @@ void BaselineJIT::generate_DefineArray(int argc, int args) JIT_GENERATE_RUNTIME_CALL(Runtime::method_arrayLiteral, Assembler::ResultInAccumulator); } -void BaselineJIT::generate_DefineObjectLiteral(int internalClassId, int arrayValueCount, - int arrayGetterSetterCountAndFlags, int args) +void BaselineJIT::generate_DefineObjectLiteral(int internalClassId, int argc, int args) { - as->prepareCallWithArgCount(5); - as->passInt32AsArg(arrayGetterSetterCountAndFlags, 4); - as->passInt32AsArg(arrayValueCount, 3); - as->passInt32AsArg(internalClassId, 2); - as->passRegAsArg(args, 1); + as->prepareCallWithArgCount(4); + as->passRegAsArg(args, 3); + as->passInt32AsArg(argc, 2); + as->passInt32AsArg(internalClassId, 1); as->passEngineAsArg(0); JIT_GENERATE_RUNTIME_CALL(Runtime::method_objectLiteral, Assembler::ResultInAccumulator); } diff --git a/src/qml/jit/qv4baselinejit_p.h b/src/qml/jit/qv4baselinejit_p.h index 12a3f27e1b..c83b985bd6 100644 --- a/src/qml/jit/qv4baselinejit_p.h +++ b/src/qml/jit/qv4baselinejit_p.h @@ -151,9 +151,7 @@ public: void generate_TypeofValue() override; void generate_DeclareVar(int varName, int isDeletable) override; void generate_DefineArray(int argc, int args) override; - void generate_DefineObjectLiteral(int internalClassId, int arrayValueCount, - int arrayGetterSetterCountAndFlags, - int args) override; + void generate_DefineObjectLiteral(int internalClassId, int argc, int args) override; void generate_CreateMappedArgumentsObject() override; void generate_CreateUnmappedArgumentsObject() override; void generate_CreateRestParameter(int argIndex) override; |