diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-07-01 12:00:57 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-07-03 08:09:17 +0000 |
commit | d31541fd9d7d52ef3eae29e7e5d36733d7f55375 (patch) | |
tree | c5d17bea0119c9f0eb26e97eb523b281e9900783 /src/qml/jit | |
parent | 6e79a00cad2f5dd09bdf40e594a65af58b370d9d (diff) |
Add support for super properties
Those are mostly working now, but when calling super properties
the this object is not setup correctly.
Change-Id: Ib42129ae6e729eeca00275f707f480371b7e42a5
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jit')
-rw-r--r-- | src/qml/jit/qv4baselinejit.cpp | 24 | ||||
-rw-r--r-- | src/qml/jit/qv4baselinejit_p.h | 2 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/qml/jit/qv4baselinejit.cpp b/src/qml/jit/qv4baselinejit.cpp index 1df7223936..9132b194a5 100644 --- a/src/qml/jit/qv4baselinejit.cpp +++ b/src/qml/jit/qv4baselinejit.cpp @@ -304,6 +304,30 @@ void BaselineJIT::generate_SetLookup(int index, int base) as->checkException(); } +void BaselineJIT::generate_LoadSuperProperty(int property) +{ + STORE_IP(); + STORE_ACC(); + as->prepareCallWithArgCount(2); + as->passRegAsArg(property, 1); + as->passEngineAsArg(0); + JIT_GENERATE_RUNTIME_CALL(Runtime::method_loadSuperProperty, Assembler::ResultInAccumulator); + as->checkException(); +} + +void BaselineJIT::generate_StoreSuperProperty(int property) +{ + STORE_IP(); + STORE_ACC(); + as->prepareCallWithArgCount(3); + as->passAccumulatorAsArg(2); + as->passRegAsArg(property, 1); + as->passFunctionAsArg(0); + JIT_GENERATE_RUNTIME_CALL(Runtime::method_storeSuperProperty, Assembler::IgnoreResult); + as->checkException(); +} + + void BaselineJIT::generate_StoreScopeObjectProperty(int base, int propertyIndex) { STORE_ACC(); diff --git a/src/qml/jit/qv4baselinejit_p.h b/src/qml/jit/qv4baselinejit_p.h index d953d86a06..d96fd6ea6a 100644 --- a/src/qml/jit/qv4baselinejit_p.h +++ b/src/qml/jit/qv4baselinejit_p.h @@ -104,6 +104,8 @@ public: void generate_GetLookup(int index) override; void generate_StoreProperty(int name, int base) override; void generate_SetLookup(int index, int base) override; + void generate_LoadSuperProperty(int property) override; + void generate_StoreSuperProperty(int property) override; void generate_StoreScopeObjectProperty(int base, int propertyIndex) override; void generate_StoreContextObjectProperty(int base, |