diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-10-10 14:02:18 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-10-10 17:29:22 +0200 |
commit | 8f79bb3b8cc9cde18b6c7f1843494cc23fa524e5 (patch) | |
tree | d9dda0b65fcb46e6f5e9c9d25f2d86e09fa163be /src/lib/corelib/language | |
parent | 203640bb34445c4f4d65823ca6640450f356bfef (diff) |
avoid usage of QScriptContext::callee in callbacks
In order to fix QBS-695 we must work-around QTBUG-39416.
Instead of relying on the callee() and extracting data from it, we're
passing payload via QScriptEngine::newFunction.
Change-Id: I1d454fba78523c7cd77a906952bdd48cbd5330db
Task-number: QBS-695
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Diffstat (limited to 'src/lib/corelib/language')
-rw-r--r-- | src/lib/corelib/language/scriptengine.cpp | 1 | ||||
-rw-r--r-- | src/lib/corelib/language/scriptengine.h | 3 |
2 files changed, 4 insertions, 0 deletions
diff --git a/src/lib/corelib/language/scriptengine.cpp b/src/lib/corelib/language/scriptengine.cpp index 7aa6138dd..a9b7c48d7 100644 --- a/src/lib/corelib/language/scriptengine.cpp +++ b/src/lib/corelib/language/scriptengine.cpp @@ -93,6 +93,7 @@ ScriptEngine::ScriptEngine(const Logger &logger, QObject *parent) ScriptEngine::~ScriptEngine() { + qDeleteAll(m_ownedVariantMaps); } void ScriptEngine::import(const FileContextBaseConstPtr &fileCtx, QScriptValue scope, diff --git a/src/lib/corelib/language/scriptengine.h b/src/lib/corelib/language/scriptengine.h index c56dece01..8932c0cfd 100644 --- a/src/lib/corelib/language/scriptengine.h +++ b/src/lib/corelib/language/scriptengine.h @@ -37,6 +37,7 @@ #include <tools/filetime.h> #include <QHash> +#include <QList> #include <QProcessEnvironment> #include <QScriptEngine> #include <QStack> @@ -97,6 +98,7 @@ public: QSet<QString> imports() const; static QScriptValueList argumentList(const QStringList &argumentNames, const QScriptValue &context); + void registerOwnedVariantMap(QVariantMap *vm) { m_ownedVariantMaps.append(vm); } class ScriptValueCache { @@ -166,6 +168,7 @@ private: QScriptValue m_loadFileFunction; QScriptValue m_loadExtensionFunction; QScriptValue m_cancelationError; + QList<QVariantMap *> m_ownedVariantMaps; }; } // namespace Internal |