diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-10-15 10:22:47 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-11-05 21:15:39 +0000 |
commit | b1f07986c30978ed6636457e8d3f4a65c5db38a3 (patch) | |
tree | 6dd48a2901219b4268a95b9d5acd08a3c49988c0 /src/qml/jit | |
parent | 0fce92af2cab51d03f33230718ab5ae35149b9e1 (diff) |
Create proper template objects for tagged templates
If a tagged template gets evaluated multiple times, the
underlying template object is shared.
Change-Id: Ie2f476fbc93d5991322ce1087c42719a8d8333ae
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jit')
-rw-r--r-- | src/qml/jit/qv4baselinejit.cpp | 9 | ||||
-rw-r--r-- | src/qml/jit/qv4baselinejit_p.h | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/qml/jit/qv4baselinejit.cpp b/src/qml/jit/qv4baselinejit.cpp index 6bc1ca6e45..098bbfc6c6 100644 --- a/src/qml/jit/qv4baselinejit.cpp +++ b/src/qml/jit/qv4baselinejit.cpp @@ -992,6 +992,15 @@ void BaselineJIT::generate_ThrowOnNullOrUndefined() as->checkException(); } +void BaselineJIT::generate_GetTemplateObject(int index) +{ + STORE_ACC(); + as->prepareCallWithArgCount(2); + as->passInt32AsArg(index, 1); + as->passFunctionAsArg(0); + BASELINEJIT_GENERATE_RUNTIME_CALL(RuntimeHelpers::getTemplateObject, CallResultDestination::InAccumulator); + as->checkException(); +} void BaselineJIT::startInstruction(Instr::Type /*instr*/) { diff --git a/src/qml/jit/qv4baselinejit_p.h b/src/qml/jit/qv4baselinejit_p.h index 47ad274d23..98d23f4517 100644 --- a/src/qml/jit/qv4baselinejit_p.h +++ b/src/qml/jit/qv4baselinejit_p.h @@ -215,6 +215,7 @@ public: void generate_LoadQmlImportedScripts(int result) override; void generate_InitializeBlockDeadTemporalZone(int firstReg, int count) override; void generate_ThrowOnNullOrUndefined() override; + void generate_GetTemplateObject(int index) override; void startInstruction(Moth::Instr::Type instr) override; void endInstruction(Moth::Instr::Type instr) override; |