diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index b1fb6d4cd5..dd8d539f21 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -36,6 +36,13 @@ using ScriptProgramPointer = QSharedPointer; Q_DECLARE_METATYPE(ScriptEnginePointer); +template +inline ScriptValue scriptValueFromValue(ScriptEngine* engine, const T& t); + +template +inline T scriptvalue_cast(const ScriptValue& value); + + /// [ScriptInterface] Provides an engine-independent interface for QScriptEngine class ScriptEngine { public: diff --git a/libraries/script-engine/src/ScriptEngineCast.h b/libraries/script-engine/src/ScriptEngineCast.h index b378302fe2..475c869584 100644 --- a/libraries/script-engine/src/ScriptEngineCast.h +++ b/libraries/script-engine/src/ScriptEngineCast.h @@ -41,7 +41,7 @@ inline ScriptValue scriptValueFromValue(ScriptEngine* engine, const QV } template -T scriptvalue_cast(const ScriptValue& value) { +inline T scriptvalue_cast(const ScriptValue& value) { T t; const int id = qMetaTypeId(); diff --git a/libraries/script-engine/src/ScriptValue.h b/libraries/script-engine/src/ScriptValue.h index e2c608b8fc..afb578a676 100644 --- a/libraries/script-engine/src/ScriptValue.h +++ b/libraries/script-engine/src/ScriptValue.h @@ -89,10 +89,10 @@ public: inline void setProperty(quint32 arrayIndex, const ScriptValue& value, const PropertyFlags& flags = KeepExistingFlags); - template + template inline void setProperty(const QString& name, const TYP& value, const PropertyFlags& flags = KeepExistingFlags); - template + template inline void setProperty(quint32 arrayIndex, const TYP& value, const PropertyFlags& flags = KeepExistingFlags); inline void setPrototype(const ScriptValue& prototype); @@ -165,14 +165,16 @@ public: virtual QObject* toQObject() const = 0; }; -template +// the second template parameter is used to defer evaluation of calls to the engine until ScriptEngine isn't forward-declared +template void ScriptValue::setProperty(const QString& name, const TYP& value, const PropertyFlags& flags) { - setProperty(name, engine()->newValue(value), flags); + setProperty(name, static_cast(engine())->newValue(value), flags); } -template +// the second template parameter is used to defer evaluation of calls to the engine until ScriptEngine isn't forward-declared +template void ScriptValue::setProperty(quint32 arrayIndex, const TYP& value, const PropertyFlags& flags) { - setProperty(arrayIndex, engine()->newValue(value), flags); + setProperty(arrayIndex, static_cast(engine())->newValue(value), flags); } ScriptValue::ScriptValue(const ScriptValue& src) : _proxy(src.ptr()->copy()) { diff --git a/libraries/script-engine/src/qtscript/ScriptContextQtWrapper.h b/libraries/script-engine/src/qtscript/ScriptContextQtWrapper.h index db542799c8..f93a59e7bc 100644 --- a/libraries/script-engine/src/qtscript/ScriptContextQtWrapper.h +++ b/libraries/script-engine/src/qtscript/ScriptContextQtWrapper.h @@ -32,16 +32,16 @@ public: // construction inline QScriptContext* toQtValue() const { return _context; } public: // ScriptContext implementation - virtual int argumentCount() const; - virtual ScriptValue argument(int index) const; - virtual QStringList backtrace() const; - virtual ScriptValue callee() const; - virtual ScriptEnginePointer engine() const; - virtual ScriptFunctionContextPointer functionContext() const; - virtual ScriptContextPointer parentContext() const; - virtual ScriptValue thisObject() const; - virtual ScriptValue throwError(const QString& text); - virtual ScriptValue throwValue(const ScriptValue& value); + virtual int argumentCount() const override; + virtual ScriptValue argument(int index) const override; + virtual QStringList backtrace() const override; + virtual ScriptValue callee() const override; + virtual ScriptEnginePointer engine() const override; + virtual ScriptFunctionContextPointer functionContext() const override; + virtual ScriptContextPointer parentContext() const override; + virtual ScriptValue thisObject() const override; + virtual ScriptValue throwError(const QString& text) override; + virtual ScriptValue throwValue(const ScriptValue& value) override; private: // storage QScriptContext* _context; @@ -53,10 +53,10 @@ public: // construction inline ScriptFunctionContextQtWrapper(QScriptContext* context) : _value(context) {} public: // ScriptFunctionContext implementation - virtual QString fileName() const; - virtual QString functionName() const; - virtual FunctionType functionType() const; - virtual int lineNumber() const; + virtual QString fileName() const override; + virtual QString functionName() const override; + virtual FunctionType functionType() const override; + virtual int lineNumber() const override; private: // storage QScriptContextInfo _value; diff --git a/libraries/script-engine/src/qtscript/ScriptEngineQtScript.h b/libraries/script-engine/src/qtscript/ScriptEngineQtScript.h index 61c5dbbf96..e17fa037f7 100644 --- a/libraries/script-engine/src/qtscript/ScriptEngineQtScript.h +++ b/libraries/script-engine/src/qtscript/ScriptEngineQtScript.h @@ -45,55 +45,55 @@ class ScriptEngineQtScript : public QScriptEngine, public ScriptEngine, public Q Q_OBJECT public: // ScriptEngine implementation - virtual void abortEvaluation(); - virtual void clearExceptions(); - virtual ScriptValue cloneUncaughtException(const QString& detail = QString()); - virtual ScriptContext* currentContext() const; - //virtual ScriptValue evaluate(const QString& program, const QString& fileName = QString()); - //virtual ScriptValue evaluate(const ScriptProgramPointer &program); - //virtual ScriptValue evaluateInClosure(const ScriptValue& locals, const ScriptProgramPointer& program); - virtual ScriptValue globalObject() const; - virtual bool hasUncaughtException() const; - virtual bool isEvaluating() const; - virtual ScriptValue lintScript(const QString& sourceCode, const QString& fileName, const int lineNumber = 1); - virtual ScriptValue makeError(const ScriptValue& other, const QString& type = "Error"); - virtual ScriptManager* manager() const; + virtual void abortEvaluation() override; + virtual void clearExceptions() override; + virtual ScriptValue cloneUncaughtException(const QString& detail = QString()) override; + virtual ScriptContext* currentContext() const override; + //virtual ScriptValue evaluate(const QString& program, const QString& fileName = QString()) override; + //virtual ScriptValue evaluate(const ScriptProgramPointer &program) override; + //virtual ScriptValue evaluateInClosure(const ScriptValue& locals, const ScriptProgramPointer& program) override; + virtual ScriptValue globalObject() const override; + virtual bool hasUncaughtException() const override; + virtual bool isEvaluating() const override; + virtual ScriptValue lintScript(const QString& sourceCode, const QString& fileName, const int lineNumber = 1) override; + virtual ScriptValue makeError(const ScriptValue& other, const QString& type = "Error") override; + virtual ScriptManager* manager() const override; // if there is a pending exception and we are at the top level (non-recursive) stack frame, this emits and resets it - virtual bool maybeEmitUncaughtException(const QString& debugHint = QString()); + virtual bool maybeEmitUncaughtException(const QString& debugHint = QString()) override; - virtual ScriptValue newArray(uint length = 0); - virtual ScriptValue newArrayBuffer(const QByteArray& message); - virtual ScriptValue newFunction(ScriptEngine::FunctionSignature fun, int length = 0); - virtual ScriptValue newObject(); - virtual ScriptProgramPointer newProgram(const QString& sourceCode, const QString& fileName); + virtual ScriptValue newArray(uint length = 0) override; + virtual ScriptValue newArrayBuffer(const QByteArray& message) override; + virtual ScriptValue newFunction(ScriptEngine::FunctionSignature fun, int length = 0) override; + virtual ScriptValue newObject() override; + virtual ScriptProgramPointer newProgram(const QString& sourceCode, const QString& fileName) override; virtual ScriptValue newQObject(QObject *object, ScriptEngine::ValueOwnership ownership = ScriptEngine::QtOwnership, - const ScriptEngine::QObjectWrapOptions &options = ScriptEngine::QObjectWrapOptions()); - virtual ScriptValue newValue(bool value); - virtual ScriptValue newValue(int value); - virtual ScriptValue newValue(uint value); - virtual ScriptValue newValue(double value); - virtual ScriptValue newValue(const QString& value); - virtual ScriptValue newValue(const QLatin1String& value); - virtual ScriptValue newValue(const char* value); - virtual ScriptValue newVariant(const QVariant& value); - virtual ScriptValue nullValue(); - virtual bool raiseException(const ScriptValue& exception); - //virtual void registerEnum(const QString& enumName, QMetaEnum newEnum); - //Q_INVOKABLE virtual void registerFunction(const QString& name, ScriptEngine::FunctionSignature fun, int numArguments = -1); - //Q_INVOKABLE virtual void registerFunction(const QString& parent, const QString& name, ScriptEngine::FunctionSignature fun, int numArguments = -1); - //Q_INVOKABLE virtual void registerGetterSetter(const QString& name, ScriptEngine::FunctionSignature getter, ScriptEngine::FunctionSignature setter, const QString& parent = QString("")); - //virtual void registerGlobalObject(const QString& name, QObject* object); - virtual void setDefaultPrototype(int metaTypeId, const ScriptValue& prototype); - virtual void setObjectName(const QString& name); - virtual bool setProperty(const char* name, const QVariant& value); - virtual void setProcessEventsInterval(int interval); - virtual QThread* thread() const; - virtual void setThread(QThread* thread); - virtual ScriptValue undefinedValue(); - virtual ScriptValue uncaughtException() const; - virtual QStringList uncaughtExceptionBacktrace() const; - virtual int uncaughtExceptionLineNumber() const; + const ScriptEngine::QObjectWrapOptions& options = ScriptEngine::QObjectWrapOptions()) override; + virtual ScriptValue newValue(bool value) override; + virtual ScriptValue newValue(int value) override; + virtual ScriptValue newValue(uint value) override; + virtual ScriptValue newValue(double value) override; + virtual ScriptValue newValue(const QString& value) override; + virtual ScriptValue newValue(const QLatin1String& value) override; + virtual ScriptValue newValue(const char* value) override; + virtual ScriptValue newVariant(const QVariant& value) override; + virtual ScriptValue nullValue() override; + virtual bool raiseException(const ScriptValue& exception) override; + //virtual void registerEnum(const QString& enumName, QMetaEnum newEnum) override; + //Q_INVOKABLE virtual void registerFunction(const QString& name, ScriptEngine::FunctionSignature fun, int numArguments = -1) override; + //Q_INVOKABLE virtual void registerFunction(const QString& parent, const QString& name, ScriptEngine::FunctionSignature fun, int numArguments = -1) override; + //Q_INVOKABLE virtual void registerGetterSetter(const QString& name, ScriptEngine::FunctionSignature getter, ScriptEngine::FunctionSignature setter, const QString& parent = QString("")) override; + //virtual void registerGlobalObject(const QString& name, QObject* object) override; + virtual void setDefaultPrototype(int metaTypeId, const ScriptValue& prototype) override; + virtual void setObjectName(const QString& name) override; + virtual bool setProperty(const char* name, const QVariant& value) override; + virtual void setProcessEventsInterval(int interval) override; + virtual QThread* thread() const override; + virtual void setThread(QThread* thread) override; + virtual ScriptValue undefinedValue() override; + virtual ScriptValue uncaughtException() const override; + virtual QStringList uncaughtExceptionBacktrace() const override; + virtual int uncaughtExceptionLineNumber() const override; // helper to detect and log warnings when other code invokes QScriptEngine/BaseScriptEngine in thread-unsafe ways inline bool IS_THREADSAFE_INVOCATION(const QString& method) { return ScriptEngine::IS_THREADSAFE_INVOCATION(method); } diff --git a/libraries/script-engine/src/qtscript/ScriptProgramQtWrapper.h b/libraries/script-engine/src/qtscript/ScriptProgramQtWrapper.h index ddd477b90b..cfd7982a8a 100644 --- a/libraries/script-engine/src/qtscript/ScriptProgramQtWrapper.h +++ b/libraries/script-engine/src/qtscript/ScriptProgramQtWrapper.h @@ -32,9 +32,9 @@ public: // construction inline const QScriptProgram& toQtValue() const { return _value; } public: // ScriptProgram implementation - virtual ScriptSyntaxCheckResultPointer checkSyntax() const; - virtual QString fileName() const; - virtual QString sourceCode() const; + virtual ScriptSyntaxCheckResultPointer checkSyntax() const override; + virtual QString fileName() const override; + virtual QString sourceCode() const override; private: // storage QPointer _engine; @@ -47,10 +47,10 @@ public: // construction _value(std::move(value)) {} public: // ScriptSyntaxCheckResult implementation - virtual int errorColumnNumber() const; - virtual int errorLineNumber() const; - virtual QString errorMessage() const; - virtual State state() const; + virtual int errorColumnNumber() const override; + virtual int errorLineNumber() const override; + virtual QString errorMessage() const override; + virtual State state() const override; private: // storage QScriptSyntaxCheckResult _value; diff --git a/libraries/script-engine/src/qtscript/ScriptValueIteratorQtWrapper.h b/libraries/script-engine/src/qtscript/ScriptValueIteratorQtWrapper.h index 9250117df7..54d3bd6116 100644 --- a/libraries/script-engine/src/qtscript/ScriptValueIteratorQtWrapper.h +++ b/libraries/script-engine/src/qtscript/ScriptValueIteratorQtWrapper.h @@ -31,11 +31,11 @@ public: // construction _engine(engine), _value(object) {} public: // ScriptValueIterator implementation - virtual ScriptValue::PropertyFlags flags() const; - virtual bool hasNext() const; - virtual QString name() const; - virtual void next(); - virtual ScriptValue value() const; + virtual ScriptValue::PropertyFlags flags() const override; + virtual bool hasNext() const override; + virtual QString name() const override; + virtual void next() override; + virtual ScriptValue value() const override; private: // storage QPointer _engine; diff --git a/libraries/script-engine/src/qtscript/ScriptValueQtWrapper.h b/libraries/script-engine/src/qtscript/ScriptValueQtWrapper.h index 363bf71d05..236c773633 100644 --- a/libraries/script-engine/src/qtscript/ScriptValueQtWrapper.h +++ b/libraries/script-engine/src/qtscript/ScriptValueQtWrapper.h @@ -35,52 +35,53 @@ public: // construction static QScriptValue fullUnwrap(ScriptEngineQtScript* engine, const ScriptValue& value); public: - virtual void release(); - virtual ScriptValueProxy* copy() const; + virtual void release() override; + virtual ScriptValueProxy* copy() const override; public: // ScriptValue implementation - virtual ScriptValue call(const ScriptValue& thisObject = ScriptValue(), const ScriptValueList& args = ScriptValueList()); - virtual ScriptValue call(const ScriptValue& thisObject, const ScriptValue& arguments); - virtual ScriptValue construct(const ScriptValueList& args = ScriptValueList()); - virtual ScriptValue construct(const ScriptValue& arguments); - virtual ScriptValue data() const; - virtual ScriptEnginePointer engine() const; - virtual ScriptValueIteratorPointer newIterator() const; + virtual ScriptValue call(const ScriptValue& thisObject = ScriptValue(), + const ScriptValueList& args = ScriptValueList()) override; + virtual ScriptValue call(const ScriptValue& thisObject, const ScriptValue& arguments) override; + virtual ScriptValue construct(const ScriptValueList& args = ScriptValueList()) override; + virtual ScriptValue construct(const ScriptValue& arguments) override; + virtual ScriptValue data() const override; + virtual ScriptEnginePointer engine() const override; + virtual ScriptValueIteratorPointer newIterator() const override; virtual ScriptValue property(const QString& name, - const ScriptValue::ResolveFlags& mode = ScriptValue::ResolvePrototype) const; + const ScriptValue::ResolveFlags& mode = ScriptValue::ResolvePrototype) const override; virtual ScriptValue property(quint32 arrayIndex, - const ScriptValue::ResolveFlags& mode = ScriptValue::ResolvePrototype) const; - virtual void setData(const ScriptValue& val); + const ScriptValue::ResolveFlags& mode = ScriptValue::ResolvePrototype) const override; + virtual void setData(const ScriptValue& val) override; virtual void setProperty(const QString& name, const ScriptValue& value, - const ScriptValue::PropertyFlags& flags = ScriptValue::KeepExistingFlags); + const ScriptValue::PropertyFlags& flags = ScriptValue::KeepExistingFlags) override; virtual void setProperty(quint32 arrayIndex, const ScriptValue& value, - const ScriptValue::PropertyFlags& flags = ScriptValue::KeepExistingFlags); - virtual void setPrototype(const ScriptValue& prototype); - virtual bool strictlyEquals(const ScriptValue& other) const; + const ScriptValue::PropertyFlags& flags = ScriptValue::KeepExistingFlags) override; + virtual void setPrototype(const ScriptValue& prototype) override; + virtual bool strictlyEquals(const ScriptValue& other) const override; - virtual bool equals(const ScriptValue& other) const; - virtual bool isArray() const; - virtual bool isBool() const; - virtual bool isError() const; - virtual bool isFunction() const; - virtual bool isNumber() const; - virtual bool isNull() const; - virtual bool isObject() const; - virtual bool isString() const; - virtual bool isUndefined() const; - virtual bool isValid() const; - virtual bool isVariant() const; - virtual bool toBool() const; - virtual qint32 toInt32() const; - virtual double toInteger() const; - virtual double toNumber() const; - virtual QString toString() const; - virtual quint16 toUInt16() const; - virtual quint32 toUInt32() const; - virtual QVariant toVariant() const; - virtual QObject* toQObject() const; + virtual bool equals(const ScriptValue& other) const override; + virtual bool isArray() const override; + virtual bool isBool() const override; + virtual bool isError() const override; + virtual bool isFunction() const override; + virtual bool isNumber() const override; + virtual bool isNull() const override; + virtual bool isObject() const override; + virtual bool isString() const override; + virtual bool isUndefined() const override; + virtual bool isValid() const override; + virtual bool isVariant() const override; + virtual bool toBool() const override; + virtual qint32 toInt32() const override; + virtual double toInteger() const override; + virtual double toNumber() const override; + virtual QString toString() const override; + virtual quint16 toUInt16() const override; + virtual quint32 toUInt32() const override; + virtual QVariant toVariant() const override; + virtual QObject* toQObject() const override; private: // helper functions QScriptValue fullUnwrap(const ScriptValue& value) const;