diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-08-30 22:30:50 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-08-31 06:08:51 +0000 |
commit | 1102cefcd75b250d4b42673b8a606d167cb15048 (patch) | |
tree | 34887646d0cb29ba87eac5d563776676bc8f249f /src/qml/jit | |
parent | ac3a9fd8f352b1d717334d16111d22d6c155e4e2 (diff) |
Fix thisObject when calling super properties
Change-Id: Ia520d43ea2c29c16cfc8ffc86a32187a78848502
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jit')
-rw-r--r-- | src/qml/jit/qv4baselinejit.cpp | 13 | ||||
-rw-r--r-- | src/qml/jit/qv4baselinejit_p.h | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/qml/jit/qv4baselinejit.cpp b/src/qml/jit/qv4baselinejit.cpp index 36375461f9..9e9c586982 100644 --- a/src/qml/jit/qv4baselinejit.cpp +++ b/src/qml/jit/qv4baselinejit.cpp @@ -418,6 +418,19 @@ void BaselineJIT::generate_CallValue(int name, int argc, int argv) as->checkException(); } +void BaselineJIT::generate_CallWithReceiver(int name, int thisObject, int argc, int argv) +{ + STORE_IP(); + as->prepareCallWithArgCount(5); + as->passInt32AsArg(argc, 4); + as->passJSSlotAsArg(argv, 3); + as->passJSSlotAsArg(thisObject, 2); + as->passJSSlotAsArg(name, 1); + as->passEngineAsArg(0); + BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_callWithReceiver, CallResultDestination::InAccumulator); + as->checkException(); +} + void BaselineJIT::generate_CallProperty(int name, int base, int argc, int argv) { STORE_IP(); diff --git a/src/qml/jit/qv4baselinejit_p.h b/src/qml/jit/qv4baselinejit_p.h index a3cb850fc1..972e9d07b7 100644 --- a/src/qml/jit/qv4baselinejit_p.h +++ b/src/qml/jit/qv4baselinejit_p.h @@ -120,6 +120,7 @@ public: void generate_Resume(int) override; void generate_CallValue(int name, int argc, int argv) override; + void generate_CallWithReceiver(int name, int thisObject, int argc, int argv) override; void generate_CallProperty(int name, int base, int argc, int argv) override; void generate_CallPropertyLookup(int lookupIndex, int base, int argc, int argv) override; void generate_CallElement(int base, int index, int argc, int argv) override; |