scripts.at(ii)->release();
scripts.clear();
- qPersistentDispose(m_program);
- qPersistentDispose(m_value);
-
// An addref() was made when the QQmlCleanup was added to the engine.
release();
}
#include <private/qqmlbundle_p.h>
#include <private/qflagpointer_p.h>
+#include <private/qv4value_p.h>
+
QT_BEGIN_NAMESPACE
class QQmlScriptData;
bool m_loaded;
QByteArray m_programSource;
- v8::Persistent<v8::Script> m_program;
- v8::Persistent<v8::Object> m_value;
+ QExplicitlySharedDataPointer<v8::Script> m_program;
+ QV4::PersistentValue m_value;
QQmlError m_error;
};
// Must be called with a handle scope and context
void QQmlScriptData::initialize(QQmlEngine *engine)
{
- Q_ASSERT(m_program.IsEmpty());
+ Q_ASSERT(!m_program);
Q_ASSERT(engine);
Q_ASSERT(!hasEngine());
if (program.IsEmpty())
return;
- m_program = qPersistentNew<v8::Script>(program);
+ m_program = program.get();
m_programSource.clear(); // We don't need this anymore
addToEngine(engine);
QV4::PersistentValue QQmlVME::run(QQmlContextData *parentCtxt, QQmlScriptData *script)
{
if (script->m_loaded)
- return script->m_value->v4Value();
+ return script->m_value;
QV4::PersistentValue rv;
v8::Handle<v8::Object> qmlglobal = v8engine->qmlScope(ctxt, 0);
v8engine->contextWrapper()->takeContextOwnership(qmlglobal);
- if (!script->m_program.IsEmpty()) {
+ if (!!script->m_program) {
script->m_program->Run(qmlglobal);
} else {
// Compilation failed.
rv = qmlglobal->v4Value();
if (shared) {
- script->m_value = qPersistentNew<v8::Object>(qmlglobal);
+ script->m_value = rv;
script->m_loaded = true;
}