diff options
author | Peter Varga <pvarga@inf.u-szeged.hu> | 2011-05-31 16:28:07 +0200 |
---|---|---|
committer | Jedrzej Nowacki <jedrzej.nowacki@nokia.com> | 2011-05-31 16:28:07 +0200 |
commit | 51b5a84ce2b47291ea4bdf9b186fce37a0cabf09 (patch) | |
tree | f58545411b3b42d0806eb5500bc41d63d1606fb5 | |
parent | 47be6022c9fc66eacb1496d7b8d97e0ff98dc1ef (diff) |
Fix QScriptEnginePrivate constructor.
If the constructor is called with a QScriptEngine::AdoptCurrentContext
parameter then use the current isolate instead of creating a new one.
Merge-request: 2
Reviewed-by: Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-rw-r--r-- | src/script/api/qscriptengine.cpp | 14 | ||||
-rw-r--r-- | src/script/api/qscriptengine_p.h | 3 |
2 files changed, 10 insertions, 7 deletions
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index 8752cbd..2a5349c 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -661,9 +661,8 @@ v8::Handle<v8::Object> QScriptEnginePrivate::newVariant(const QVariant &value) return persistent; } -v8::Isolate *QScriptEnginePrivate::Isolates::createEnterIsolate(QScriptEnginePrivate *engine) +v8::Isolate *QScriptEnginePrivate::Isolates::enterIsolate(QScriptEnginePrivate *engine, v8::Isolate *isolate) { - v8::Isolate *isolate = v8::Isolate::New(); isolate->Enter(); { Isolates *i = isolates(); @@ -683,9 +682,11 @@ QScriptEnginePrivate *QScriptEnginePrivate::Isolates::engine(v8::Isolate *isolat } QScriptEnginePrivate::QScriptEnginePrivate(QScriptEngine::ContextOwnership ownership) - : m_isolate(Isolates::createEnterIsolate(this)) - , m_v8Context(ownership == QScriptEngine::AdoptCurrentContext ? - v8::Persistent<v8::Context>::New(v8::Context::GetCurrent()) : v8::Context::New()) + : m_hasOwnV8Context(ownership == QScriptEngine::CreateNewContext) + , m_isolate(m_hasOwnV8Context ? + Isolates::enterIsolate(this, v8::Isolate::New()) : Isolates::enterIsolate(this, v8::Isolate::GetCurrent())) + , m_v8Context(m_hasOwnV8Context ? + v8::Context::New() : v8::Persistent<v8::Context>::New(v8::Context::GetCurrent())) , m_originalGlobalObject(this, m_v8Context) , m_reportedAddtionalMemoryCost(-1) , m_currentQsContext(0) @@ -856,7 +857,8 @@ QScriptEnginePrivate::~QScriptEnginePrivate() m_v8Context.Dispose(); m_isolate->Exit(); - m_isolate->Dispose(); + if (m_hasOwnV8Context) + m_isolate->Dispose(); m_state = Destroyed; deallocateAdditionalResources(); diff --git a/src/script/api/qscriptengine_p.h b/src/script/api/qscriptengine_p.h index 86c825f..78fe4f3 100644 --- a/src/script/api/qscriptengine_p.h +++ b/src/script/api/qscriptengine_p.h @@ -87,7 +87,7 @@ class QScriptEnginePrivate // will be resolved and we can store QScriptEnginePrivate* in v8::Isolate class Isolates { public: - static v8::Isolate *createEnterIsolate(QScriptEnginePrivate *engine); + static v8::Isolate *enterIsolate(QScriptEnginePrivate *engine, v8::Isolate *isolate); static QScriptEnginePrivate *engine(v8::Isolate *isolate); private: Q_GLOBAL_STATIC(Isolates, isolates); @@ -299,6 +299,7 @@ private: v8::Handle<v8::FunctionTemplate> metaObjectTemplate(); v8::Handle<v8::FunctionTemplate> variantTemplate(); + const bool m_hasOwnV8Context; v8::Isolate *m_isolate; v8::Persistent<v8::Context> m_v8Context; Exception m_exception; |