History

working to clean up the QtScript implementation and move towards completion of the proxy interface

Heather Anderson committed 5 years ago

Commit 2dd9d781 parent 1e018db38 files · +2240 −923Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 38 files). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+67−0
@@ -0,0 +1,67 @@
1//
2// ScriptEngine.cpp
3// libraries/script-engine/src
4//
5// Created by Brad Hefta-Gaub on 12/14/13.
6// Copyright 2013 High Fidelity, Inc.
7// Copyright 2020 Vircadia contributors.
8//
9// Distributed under the Apache License, Version 2.0.
10// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
11//
12
13#include "ScriptEngine.h"
14
15#include "ScriptEngineLogging.h"
16#include "ScriptValue.h"
17#include "qtscript/ScriptEngineQtScript.h"
18
19ScriptEnginePointer newScriptEngine(ScriptManager* manager) {
20 return QSharedPointer<ScriptEngineQtScript>(new ScriptEngineQtScript(manager));
21}
22
23ScriptValuePointer makeScopedHandlerObject(ScriptValuePointer scopeOrCallback, ScriptValuePointer methodOrName) {
24 auto engine = scopeOrCallback->engine();
25 if (!engine) {
26 return scopeOrCallback;
27 }
28 ScriptValuePointer scope;
29 ScriptValuePointer callback = scopeOrCallback;
30 if (scopeOrCallback->isObject()) {
31 if (methodOrName->isString()) {
32 scope = scopeOrCallback;
33 callback = scope->property(methodOrName->toString());
34 } else if (methodOrName->isFunction()) {
35 scope = scopeOrCallback;
36 callback = methodOrName;
37 } else if (!methodOrName->isValid()) {
38 // instantiate from an existing scoped handler object
39 if (scopeOrCallback->property("callback")->isFunction()) {
40 scope = scopeOrCallback->property("scope");
41 callback = scopeOrCallback->property("callback");
42 }
43 }
44 }
45 auto handler = engine->newObject();
46 handler->setProperty("scope", scope);
47 handler->setProperty("callback", callback);
48 return handler;
49}
50
51ScriptValuePointer callScopedHandlerObject(ScriptValuePointer handler, ScriptValuePointer err, ScriptValuePointer result) {
52 return handler->property("callback")->call(handler->property("scope"), ScriptValueList({ err, result }));
53}
54
55bool ScriptEngine::IS_THREADSAFE_INVOCATION(const QString& method) {
56 QThread* thread = this->thread();
57 if (QThread::currentThread() == thread) {
58 return true;
59 }
60 qCCritical(scriptengine) << QString("Scripting::%1 @ %2 -- ignoring thread-unsafe call from %3")
61 .arg(method)
62 .arg(thread ? thread->objectName() : "(!thread)")
63 .arg(QThread::currentThread()->objectName());
64 qCDebug(scriptengine) << "(please resolve on the calling side by using invokeMethod, executeOnScriptThread, etc.)";
65 Q_ASSERT(false);
66 return false;
67}