diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-10-12 01:00:07 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-10-12 01:00:07 +0200 |
commit | 8092a4e247a69ea5a9f21d16a619b562b9558d2d (patch) | |
tree | 7746770b3799d03c2467caa6073d981735ca03ee /src/qml/jsruntime/qv4engine.cpp | |
parent | 9b87533da07a6c978fb80aa99223921c343df01e (diff) | |
parent | b8f4005f132c26b842387e1ae5f492594dc03d86 (diff) |
Merge remote-tracking branch 'origin/5.12' into dev
Change-Id: I0ad1a3aa3a211ef86c4baf605361de860266dde1
Diffstat (limited to 'src/qml/jsruntime/qv4engine.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 3d6a13d794..3b4574c18b 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -101,6 +101,7 @@ #include "qv4memberdata_p.h" #include "qv4arraybuffer_p.h" #include "qv4dataview_p.h" +#include "qv4promiseobject_p.h" #include "qv4typedarray_p.h" #include <private/qv8engine_p.h> #include <private/qjsvalue_p.h> @@ -520,6 +521,14 @@ ExecutionEngine::ExecutionEngine(QJSEngine *jsEngine) jsObjects[SetProto] = memoryManager->allocate<SetPrototype>(); static_cast<SetPrototype *>(setPrototype())->init(this, setCtor()); + // + // promises + // + + jsObjects[Promise_Ctor] = memoryManager->allocate<PromiseCtor>(global); + jsObjects[PromiseProto] = memoryManager->allocate<PromisePrototype>(); + static_cast<PromisePrototype *>(promisePrototype())->init(this, promiseCtor()); + // typed arrays jsObjects[SharedArrayBuffer_Ctor] = memoryManager->allocate<SharedArrayBufferCtor>(global); @@ -570,6 +579,7 @@ ExecutionEngine::ExecutionEngine(QJSEngine *jsEngine) globalObject->defineDefaultProperty(QStringLiteral("SyntaxError"), *syntaxErrorCtor()); globalObject->defineDefaultProperty(QStringLiteral("TypeError"), *typeErrorCtor()); globalObject->defineDefaultProperty(QStringLiteral("URIError"), *uRIErrorCtor()); + globalObject->defineDefaultProperty(QStringLiteral("Promise"), *promiseCtor()); globalObject->defineDefaultProperty(QStringLiteral("SharedArrayBuffer"), *sharedArrayBufferCtor()); globalObject->defineDefaultProperty(QStringLiteral("ArrayBuffer"), *arrayBufferCtor()); @@ -876,6 +886,38 @@ Heap::Object *ExecutionEngine::newURIErrorObject(const Value &message) return ErrorObject::create<URIErrorObject>(this, message, uRIErrorCtor()); } +Heap::PromiseObject *ExecutionEngine::newPromiseObject() +{ + if (!m_reactionHandler) { + m_reactionHandler.reset(new Promise::ReactionHandler); + } + + Scope scope(this); + Scoped<PromiseObject> object(scope, memoryManager->allocate<PromiseObject>(this)); + return object->d(); +} + +Heap::Object *ExecutionEngine::newPromiseObject(const QV4::FunctionObject *thisObject, const QV4::PromiseCapability *capability) +{ + if (!m_reactionHandler) { + m_reactionHandler.reset(new Promise::ReactionHandler); + } + + Scope scope(this); + Scoped<CapabilitiesExecutorWrapper> executor(scope, memoryManager->allocate<CapabilitiesExecutorWrapper>()); + executor->d()->capabilities.set(this, capability->d()); + executor->insertMember(id_length(), Primitive::fromInt32(2), Attr_NotWritable|Attr_NotEnumerable); + + ScopedObject object(scope, thisObject->callAsConstructor(executor, 1)); + return object->d(); +} + +Promise::ReactionHandler *ExecutionEngine::getPromiseReactionHandler() +{ + Q_ASSERT(m_reactionHandler); + return m_reactionHandler.data(); +} + Heap::Object *ExecutionEngine::newVariantObject(const QVariant &v) { return memoryManager->allocate<VariantObject>(v); |