diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-05-31 16:06:34 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-09-07 10:32:01 +0000 |
commit | ff5bc526b4868aef9fb3a551afc5636b308a3d83 (patch) | |
tree | 692e956d6fcfd5fc4f064dce7275abeb51429c3a /src/qml/jit | |
parent | bd4064eabf79a6166805c877ee622931df6fb172 (diff) |
Add support for yield*
Change-Id: I5b054b59519ed825459a5b0b0a7cd2c6fc8a3797
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jit')
-rw-r--r-- | src/qml/jit/qv4baselinejit.cpp | 18 | ||||
-rw-r--r-- | src/qml/jit/qv4baselinejit_p.h | 2 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/qml/jit/qv4baselinejit.cpp b/src/qml/jit/qv4baselinejit.cpp index baaab75158..1e77c1a001 100644 --- a/src/qml/jit/qv4baselinejit.cpp +++ b/src/qml/jit/qv4baselinejit.cpp @@ -400,6 +400,12 @@ void BaselineJIT::generate_Yield() Q_UNREACHABLE(); } +void BaselineJIT::generate_YieldStar() +{ + // ##### + Q_UNREACHABLE(); +} + void BaselineJIT::generate_Resume(int) { // ##### @@ -694,6 +700,18 @@ void BaselineJIT::generate_IteratorNext(int value, int done) as->checkException(); } +void BaselineJIT::generate_IteratorNextForYieldStar(int iterator, int object) +{ + as->saveAccumulatorInFrame(); + as->prepareCallWithArgCount(4); + as->passJSSlotAsArg(object, 3); + as->passJSSlotAsArg(iterator, 2); + as->passAccumulatorAsArg(1); + as->passEngineAsArg(0); + BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_iteratorNextForYieldStar, CallResultDestination::InAccumulator); + as->checkException(); +} + void BaselineJIT::generate_IteratorClose(int done) { as->saveAccumulatorInFrame(); diff --git a/src/qml/jit/qv4baselinejit_p.h b/src/qml/jit/qv4baselinejit_p.h index f9c876a1e9..d4c1b074f6 100644 --- a/src/qml/jit/qv4baselinejit_p.h +++ b/src/qml/jit/qv4baselinejit_p.h @@ -117,6 +117,7 @@ public: int captureRequired) override; void generate_LoadIdObject(int index, int base) override; void generate_Yield() override; + void generate_YieldStar() override; void generate_Resume(int) override; void generate_CallValue(int name, int argc, int argv) override; @@ -149,6 +150,7 @@ public: void generate_PopContext() override; void generate_GetIterator(int iterator) override; void generate_IteratorNext(int value, int done) override; + void generate_IteratorNextForYieldStar(int iterator, int object) override; void generate_IteratorClose(int done) override; void generate_DestructureRestElement() override; void generate_DeleteProperty(int base, int index) override; |