diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-04-27 11:41:13 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-05-03 20:05:14 +0000 |
commit | 5747a7530206ac410b6bd7c1b8490d7d389ad3a5 (patch) | |
tree | afca9153823b1a9efdf878be80922bce693eaefd /src/qml/jit | |
parent | 7e6485a046fde121f0e6fdf954162354939ff1d8 (diff) |
Add Generator support
Add support for ES6 generators. Those are currently
always executed in the interpreter (we never JIT them),
to simplify the initial implementation.
Most functionality, except for 'yield *' expressions
are supported. 'yield *' will have to wait until we
support for(... of ...)
Change-Id: I7c059d1e3b301cbcb79e3746b4bec346738fd426
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jit')
-rw-r--r-- | src/qml/jit/qv4jit.cpp | 19 | ||||
-rw-r--r-- | src/qml/jit/qv4jit_p.h | 3 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/qml/jit/qv4jit.cpp b/src/qml/jit/qv4jit.cpp index 678a0c16db..87c3642479 100644 --- a/src/qml/jit/qv4jit.cpp +++ b/src/qml/jit/qv4jit.cpp @@ -40,6 +40,7 @@ #include "qv4jit_p.h" #include "qv4assembler_p.h" #include <private/qv4lookup_p.h> +#include <private/qv4generatorobject_p.h> #ifdef V4_ENABLE_JIT @@ -462,6 +463,18 @@ void BaselineJIT::generate_LoadIdObject(int index, int base) as->checkException(); } +void BaselineJIT::generate_Yield() +{ + // ##### + Q_UNREACHABLE(); +} + +void BaselineJIT::generate_Resume(int) +{ + // ##### + Q_UNREACHABLE(); +} + void BaselineJIT::generate_CallValue(int name, int argc, int argv) { STORE_IP(); @@ -1146,6 +1159,12 @@ void BaselineJIT::collectLabelsInBytecode() MOTH_BEGIN_INSTR(LoadIdObject) MOTH_END_INSTR(LoadIdObject) + MOTH_BEGIN_INSTR(Yield) + MOTH_END_INSTR(Yield) + + MOTH_BEGIN_INSTR(Resume) + MOTH_END_INSTR(Resume) + MOTH_BEGIN_INSTR(CallValue) MOTH_END_INSTR(CallValue) diff --git a/src/qml/jit/qv4jit_p.h b/src/qml/jit/qv4jit_p.h index 150f4b6aab..bf11e69cbb 100644 --- a/src/qml/jit/qv4jit_p.h +++ b/src/qml/jit/qv4jit_p.h @@ -161,6 +161,9 @@ public: void generate_LoadContextObjectProperty(int propertyIndex, int base, int captureRequired) override; void generate_LoadIdObject(int index, int base) override; + void generate_Yield() override; + void generate_Resume(int) override; + void generate_CallValue(int name, 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; |