diff -r b72c6db6890b -r 5dc02b23752f src/script/api/qscriptprogram.cpp --- a/src/script/api/qscriptprogram.cpp Wed Jun 23 19:07:03 2010 +0300 +++ b/src/script/api/qscriptprogram.cpp Tue Jul 06 15:10:48 2010 +0300 @@ -63,7 +63,10 @@ QScriptProgramPrivate::~QScriptProgramPrivate() { - delete _executable; + if (engine) { + QScript::APIShim shim(engine); + _executable.clear(); + } } QScriptProgramPrivate *QScriptProgramPrivate::get(const QScriptProgram &q) @@ -76,17 +79,17 @@ { if (_executable) { if (eng == engine) - return _executable; - delete _executable; + return _executable.get(); + _executable = 0; } WTF::PassRefPtr provider = QScript::UStringSourceProviderWithFeedback::create(sourceCode, fileName, firstLineNumber, eng); sourceId = provider->asID(); JSC::SourceCode source(provider, firstLineNumber); //after construction of SourceCode provider variable will be null. - _executable = new JSC::EvalExecutable(exec, source); + _executable = JSC::EvalExecutable::create(exec, source); engine = eng; isCompiled = false; - return _executable; + return _executable.get(); } /*! @@ -121,7 +124,7 @@ */ QScriptProgram::~QScriptProgram() { - Q_D(QScriptProgram); + // Q_D(QScriptProgram); // if (d->engine && (d->ref == 1)) // d->engine->unregisterScriptProgram(d); }