aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcon <qtc-committer@nokia.com>2009-09-01 16:19:13 +0200
committercon <qtc-committer@nokia.com>2009-09-01 16:27:33 +0200
commit5063af5318b30f055f80c45bf0e1c3b85bee97ee (patch)
treeae5a126ec8aa119a7d71bcc9f5c382feddef0f22
parenta5b09336aca6b9cf2cd8b3429055ab4d68ed217d (diff)
No need to create a QScriptEngine at startup.
(cherry picked from commit 3eb875cf972ddd1f5945b03175011801848b29d3)
-rw-r--r--src/plugins/coreplugin/scriptmanager/scriptmanager.cpp73
-rw-r--r--src/plugins/coreplugin/scriptmanager/scriptmanager.h3
-rw-r--r--src/plugins/coreplugin/scriptmanager/scriptmanager_p.h6
-rw-r--r--src/plugins/duieditor/duieditoractionhandler.cpp1
-rw-r--r--src/shared/scriptwrapper/interface_wrap_helpers.h8
-rw-r--r--src/shared/scriptwrapper/wrap_helpers.h4
6 files changed, 40 insertions, 55 deletions
diff --git a/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp b/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp
index 3edcc75658..1d13fa5ad3 100644
--- a/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp
+++ b/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp
@@ -46,10 +46,6 @@
#include <QtGui/QToolBar>
#include <QtGui/QStatusBar>
-namespace {
- enum { debugQWorkbenchWrappers = 0 };
-}
-
// Script function template to pop up a message box
// with a certain icon and buttons.
template <int MsgBoxIcon, int MsgBoxButtons>
@@ -178,14 +174,9 @@ namespace Core {
namespace Internal {
ScriptManagerPrivate::ScriptManagerPrivate(QObject *parent)
- : ScriptManager(parent), m_initialized(false)
-{
-}
-
-QScriptEngine &ScriptManagerPrivate::scriptEngine()
+ : ScriptManager(parent),
+ m_engine(0)
{
- ensureEngineInitialized();
- return m_engine;
}
// Split a backtrace of the form:
@@ -225,25 +216,26 @@ bool ScriptManagerPrivate::runScript(const QString &script, QString *errorMessag
ensureEngineInitialized();
stack->clear();
- m_engine.pushContext();
- m_engine.evaluate(script);
+ m_engine->pushContext();
+ m_engine->evaluate(script);
- const bool failed = m_engine.hasUncaughtException ();
+ const bool failed = m_engine->hasUncaughtException ();
if (failed) {
- const int errorLineNumber = m_engine.uncaughtExceptionLineNumber();
- const QStringList backTrace = m_engine.uncaughtExceptionBacktrace();
+ const int errorLineNumber = m_engine->uncaughtExceptionLineNumber();
+ const QStringList backTrace = m_engine->uncaughtExceptionBacktrace();
parseBackTrace(backTrace, *stack);
const QString backtrace = backTrace.join(QString(QLatin1Char('\n')));
*errorMessage = ScriptManager::tr("Exception at line %1: %2\n%3").arg(errorLineNumber).arg(engineError(m_engine)).arg(backtrace);
}
- m_engine.popContext();
+ m_engine->popContext();
return !failed;
}
void ScriptManagerPrivate::ensureEngineInitialized()
{
- if (m_initialized)
+ if (m_engine)
return;
+ m_engine = new QScriptEngine(this);
// register QObjects that occur as properties
SharedTools::registerQObject<QMainWindow>(m_engine);
SharedTools::registerQObject<QStatusBar>(m_engine);
@@ -252,52 +244,51 @@ void ScriptManagerPrivate::ensureEngineInitialized()
// SharedTools::registerQObjectInterface<Core::MessageManager, MessageManagerPrototype>(m_engine);
// SharedTools::registerQObjectInterface<Core::IFile, FilePrototype>(m_engine);
-// qScriptRegisterSequenceMetaType<QList<Core::IFile *> >(&m_engine);
+// qScriptRegisterSequenceMetaType<QList<Core::IFile *> >(m_engine);
// SharedTools::registerQObjectInterface<Core::FileManager, FileManagerPrototype>(m_engine);
// SharedTools::registerQObjectInterface<Core::IEditor, EditorPrototype>(m_engine);
- qScriptRegisterSequenceMetaType<QList<Core::IEditor *> >(&m_engine);
+ qScriptRegisterSequenceMetaType<QList<Core::IEditor *> >(m_engine);
// SharedTools::registerQObjectInterface<Core::EditorGroup, EditorGroupPrototype>(m_engine);
- qScriptRegisterSequenceMetaType<QList<Core::EditorGroup *> >(&m_engine);
+ qScriptRegisterSequenceMetaType<QList<Core::EditorGroup *> >(m_engine);
SharedTools::registerQObjectInterface<Core::EditorManager, EditorManagerPrototype>(m_engine);
// SharedTools::registerQObjectInterface<Core::ICore, CorePrototype>(m_engine);
// Make "core" available
- m_engine.globalObject().setProperty(QLatin1String("core"), qScriptValueFromValue(&m_engine, Core::ICore::instance()));
+ m_engine->globalObject().setProperty(QLatin1String("core"), qScriptValueFromValue(m_engine, Core::ICore::instance()));
// CLASSIC: registerInterfaceWithDefaultPrototype<Core::MessageManager, MessageManagerPrototype>(m_engine);
// Message box conveniences
- m_engine.globalObject().setProperty(QLatin1String("critical"),
- m_engine.newFunction(messageBox<QMessageBox::Critical, QMessageBox::Ok>, 3));
- m_engine.globalObject().setProperty(QLatin1String("warning"),
- m_engine.newFunction(messageBox<QMessageBox::Warning, QMessageBox::Ok>, 3));
- m_engine.globalObject().setProperty(QLatin1String("information"),
- m_engine.newFunction(messageBox<QMessageBox::Information, QMessageBox::Ok>, 3));
+ m_engine->globalObject().setProperty(QLatin1String("critical"),
+ m_engine->newFunction(messageBox<QMessageBox::Critical, QMessageBox::Ok>, 3));
+ m_engine->globalObject().setProperty(QLatin1String("warning"),
+ m_engine->newFunction(messageBox<QMessageBox::Warning, QMessageBox::Ok>, 3));
+ m_engine->globalObject().setProperty(QLatin1String("information"),
+ m_engine->newFunction(messageBox<QMessageBox::Information, QMessageBox::Ok>, 3));
// StandardButtons has overloaded operator '|' - grrr.
enum { MsgBoxYesNo = 0x00014000 };
- m_engine.globalObject().setProperty(QLatin1String("yesNoQuestion"),
- m_engine.newFunction(messageBox<QMessageBox::Question, MsgBoxYesNo>, 3));
+ m_engine->globalObject().setProperty(QLatin1String("yesNoQuestion"),
+ m_engine->newFunction(messageBox<QMessageBox::Question, MsgBoxYesNo>, 3));
- m_engine.globalObject().setProperty(QLatin1String("getText"), m_engine.newFunction(inputDialogGetText, 3));
- m_engine.globalObject().setProperty(QLatin1String("getInteger"), m_engine.newFunction(inputDialogGetInteger, 3));
- m_engine.globalObject().setProperty(QLatin1String("getDouble"), m_engine.newFunction(inputDialogGetDouble, 3));
- m_engine.globalObject().setProperty(QLatin1String("getItem"), m_engine.newFunction(inputDialogGetItem, 3));
+ m_engine->globalObject().setProperty(QLatin1String("getText"), m_engine->newFunction(inputDialogGetText, 3));
+ m_engine->globalObject().setProperty(QLatin1String("getInteger"), m_engine->newFunction(inputDialogGetInteger, 3));
+ m_engine->globalObject().setProperty(QLatin1String("getDouble"), m_engine->newFunction(inputDialogGetDouble, 3));
+ m_engine->globalObject().setProperty(QLatin1String("getItem"), m_engine->newFunction(inputDialogGetItem, 3));
// file box
- m_engine.globalObject().setProperty(QLatin1String("getOpenFileNames"), m_engine.newFunction(fileBox<QFileDialog::AcceptOpen, QFileDialog::ExistingFiles> , 2));
- m_engine.globalObject().setProperty(QLatin1String("getOpenFileName"), m_engine.newFunction(fileBox<QFileDialog::AcceptOpen, QFileDialog::ExistingFile> , 2));
- m_engine.globalObject().setProperty(QLatin1String("getSaveFileName"), m_engine.newFunction(fileBox<QFileDialog::AcceptSave, QFileDialog::AnyFile> , 2));
- m_engine.globalObject().setProperty(QLatin1String("getExistingDirectory"), m_engine.newFunction(fileBox<QFileDialog::AcceptSave, QFileDialog::DirectoryOnly> , 2));
- m_initialized = true;
+ m_engine->globalObject().setProperty(QLatin1String("getOpenFileNames"), m_engine->newFunction(fileBox<QFileDialog::AcceptOpen, QFileDialog::ExistingFiles> , 2));
+ m_engine->globalObject().setProperty(QLatin1String("getOpenFileName"), m_engine->newFunction(fileBox<QFileDialog::AcceptOpen, QFileDialog::ExistingFile> , 2));
+ m_engine->globalObject().setProperty(QLatin1String("getSaveFileName"), m_engine->newFunction(fileBox<QFileDialog::AcceptSave, QFileDialog::AnyFile> , 2));
+ m_engine->globalObject().setProperty(QLatin1String("getExistingDirectory"), m_engine->newFunction(fileBox<QFileDialog::AcceptSave, QFileDialog::DirectoryOnly> , 2));
}
-QString ScriptManagerPrivate::engineError(QScriptEngine &scriptEngine)
+QString ScriptManagerPrivate::engineError(QScriptEngine *scriptEngine)
{
- QScriptValue error = scriptEngine.evaluate(QLatin1String("Error"));
+ QScriptValue error = scriptEngine->evaluate(QLatin1String("Error"));
if (error.isValid())
return error.toString();
return ScriptManager::tr("Unknown error");
diff --git a/src/plugins/coreplugin/scriptmanager/scriptmanager.h b/src/plugins/coreplugin/scriptmanager/scriptmanager.h
index 5d40f5b190..8b3fcb2b09 100644
--- a/src/plugins/coreplugin/scriptmanager/scriptmanager.h
+++ b/src/plugins/coreplugin/scriptmanager/scriptmanager.h
@@ -59,9 +59,6 @@ public:
ScriptManager(QObject *parent = 0) : QObject(parent) {}
virtual ~ScriptManager() { }
- // Access the engine (for plugins to wrap additional interfaces).
- virtual QScriptEngine &scriptEngine() = 0;
-
// Run a script
virtual bool runScript(const QString &script, QString *errorMessage, Stack *errorStack) = 0;
virtual bool runScript(const QString &script, QString *errorMessage) = 0;
diff --git a/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h b/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h
index 2a94e094ab..4a34fd61d1 100644
--- a/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h
+++ b/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h
@@ -45,17 +45,15 @@ class ScriptManagerPrivate : public Core::ScriptManager
public:
explicit ScriptManagerPrivate(QObject *parent);
- QScriptEngine &scriptEngine();
bool runScript(const QString &script, QString *errorMessage, Stack *stack);
bool runScript(const QString &script, QString *errorMessage);
- static QString engineError(QScriptEngine &scriptEngine);
+ static QString engineError(QScriptEngine *scriptEngine);
private:
void ensureEngineInitialized();
- QScriptEngine m_engine;
- bool m_initialized;
+ QScriptEngine *m_engine;
};
} // namespace Internal
diff --git a/src/plugins/duieditor/duieditoractionhandler.cpp b/src/plugins/duieditor/duieditoractionhandler.cpp
index 28c50a2361..de776d5a81 100644
--- a/src/plugins/duieditor/duieditoractionhandler.cpp
+++ b/src/plugins/duieditor/duieditoractionhandler.cpp
@@ -33,7 +33,6 @@
#include <coreplugin/icore.h>
#include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/scriptmanager/scriptmanager.h>
#include <QtCore/QDebug>
#include <QtGui/QAction>
diff --git a/src/shared/scriptwrapper/interface_wrap_helpers.h b/src/shared/scriptwrapper/interface_wrap_helpers.h
index 968c417f29..b28e84dbe0 100644
--- a/src/shared/scriptwrapper/interface_wrap_helpers.h
+++ b/src/shared/scriptwrapper/interface_wrap_helpers.h
@@ -70,13 +70,13 @@ static void scriptValueToQObjectInterface(const QScriptValue &sv, QObjectInterfa
// QObject that implements the interface, so it can be casted to it.
template <class QObjectInterface, class Prototype>
-static void registerQObjectInterface(QScriptEngine &engine)
+static void registerQObjectInterface(QScriptEngine *engine)
{
- Prototype *protoType = new Prototype(&engine);
- const QScriptValue scriptProtoType = engine.newQObject(protoType);
+ Prototype *protoType = new Prototype(engine);
+ const QScriptValue scriptProtoType = engine->newQObject(protoType);
const int metaTypeId = qScriptRegisterMetaType<QObjectInterface*>(
- &engine,
+ engine,
qObjectInterfaceToScriptValue<QObjectInterface>,
scriptValueToQObjectInterface<QObjectInterface>,
scriptProtoType);
diff --git a/src/shared/scriptwrapper/wrap_helpers.h b/src/shared/scriptwrapper/wrap_helpers.h
index 533450d8da..eed26e0685 100644
--- a/src/shared/scriptwrapper/wrap_helpers.h
+++ b/src/shared/scriptwrapper/wrap_helpers.h
@@ -319,9 +319,9 @@ static void scriptValueToQObject(const QScriptValue &sv, SomeQObject * &p)
// Q_PROPERTY(QMainWindow*).
template <class SomeQObject>
-static void registerQObject(QScriptEngine &engine)
+static void registerQObject(QScriptEngine *engine)
{
- qScriptRegisterMetaType<SomeQObject*>(&engine,
+ qScriptRegisterMetaType<SomeQObject*>(engine,
qObjectToScriptValue<SomeQObject>,
scriptValueToQObject<SomeQObject>);
}