aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4engine.cpp
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-10-12 01:00:07 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-10-12 01:00:07 +0200
commit8092a4e247a69ea5a9f21d16a619b562b9558d2d (patch)
tree7746770b3799d03c2467caa6073d981735ca03ee /src/qml/jsruntime/qv4engine.cpp
parent9b87533da07a6c978fb80aa99223921c343df01e (diff)
parentb8f4005f132c26b842387e1ae5f492594dc03d86 (diff)
Merge remote-tracking branch 'origin/5.12' into dev
Diffstat (limited to 'src/qml/jsruntime/qv4engine.cpp')
-rw-r--r--src/qml/jsruntime/qv4engine.cpp42
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);