aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jit
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-10-15 10:22:47 +0200
committerLars Knoll <lars.knoll@qt.io>2018-11-05 21:15:39 +0000
commitb1f07986c30978ed6636457e8d3f4a65c5db38a3 (patch)
tree6dd48a2901219b4268a95b9d5acd08a3c49988c0 /src/qml/jit
parent0fce92af2cab51d03f33230718ab5ae35149b9e1 (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.cpp9
-rw-r--r--src/qml/jit/qv4baselinejit_p.h1
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;