diff options
author | Yulong Bai <yulong.bai@qt.io> | 2018-06-15 14:44:19 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-06-26 10:03:56 +0000 |
commit | 74f4065caa7254b0e30afa955aa59092024decdb (patch) | |
tree | b9b5555807ebfb2e7b6a80a56aec8785b4066ae1 /src/qml/jit | |
parent | c9fa5b8071f4a32afd05cc9fa5cd8ab28e60dc55 (diff) |
Add basic support for EcmaScript classes
Most of the class creation is done inside the runtime
in the CreateClass method. Added a corresponding
instruction to the interpreter and jit.
The compiled data now contains an array of classes
containing the compile time generated layout of the class.
Currently, classes without an explicit constructor and
classes with inheritance are not supported.
Done-with: Yulong Bai <yulong.bai@qt.io>
Change-Id: I0185dcc1e3b0b8f44deff74e44a8262fc646aa9e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jit')
-rw-r--r-- | src/qml/jit/qv4baselinejit.cpp | 11 | ||||
-rw-r--r-- | src/qml/jit/qv4baselinejit_p.h | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/qml/jit/qv4baselinejit.cpp b/src/qml/jit/qv4baselinejit.cpp index 3e8991122f..87b6478e0d 100644 --- a/src/qml/jit/qv4baselinejit.cpp +++ b/src/qml/jit/qv4baselinejit.cpp @@ -817,6 +817,17 @@ void BaselineJIT::generate_DefineObjectLiteral(int internalClassId, int argc, in as->passEngineAsArg(0); JIT_GENERATE_RUNTIME_CALL(Runtime::method_objectLiteral, Assembler::ResultInAccumulator); } + +void BaselineJIT::generate_CreateClass(int classIndex, int heritage, int computedNames) +{ + as->prepareCallWithArgCount(4); + as->passRegAsArg(computedNames, 3); + as->passRegAsArg(heritage, 2); + as->passInt32AsArg(classIndex, 1); + as->passEngineAsArg(0); + JIT_GENERATE_RUNTIME_CALL(Runtime::method_createClass, Assembler::ResultInAccumulator); +} + void BaselineJIT::generate_CreateMappedArgumentsObject() { as->prepareCallWithArgCount(1); diff --git a/src/qml/jit/qv4baselinejit_p.h b/src/qml/jit/qv4baselinejit_p.h index 11548219af..9fa4aa2cda 100644 --- a/src/qml/jit/qv4baselinejit_p.h +++ b/src/qml/jit/qv4baselinejit_p.h @@ -154,6 +154,7 @@ public: void generate_DeclareVar(int varName, int isDeletable) override; void generate_DefineArray(int argc, int args) override; void generate_DefineObjectLiteral(int internalClassId, int argc, int args) override; + void generate_CreateClass(int classIndex, int heritage, int computedNames) override; void generate_CreateMappedArgumentsObject() override; void generate_CreateUnmappedArgumentsObject() override; void generate_CreateRestParameter(int argIndex) override; |