make it possible to check for errors externally

svn path=/trunk/KDE/kdebase/runtime/; revision=1101327
This commit is contained in:
Aaron J. Seigo 2010-03-09 22:18:45 +00:00
parent 2003e72a37
commit 39088b5cd4
2 changed files with 14 additions and 10 deletions

View File

@ -65,7 +65,7 @@ QScriptEngine *ScriptEnv::engine() const
return m_engine; return m_engine;
} }
ScriptEnv *ScriptEnv::findScriptEnv( QScriptEngine *engine ) ScriptEnv *ScriptEnv::findScriptEnv(QScriptEngine *engine)
{ {
QScriptValue global = engine->globalObject(); QScriptValue global = engine->globalObject();
return qscriptvalue_cast<ScriptEnv*>(global.property("__plasma_scriptenv")); return qscriptvalue_cast<ScriptEnv*>(global.property("__plasma_scriptenv"));
@ -106,12 +106,17 @@ bool ScriptEnv::include(const QString &path)
m_engine->evaluate(script, path); m_engine->evaluate(script, path);
return !checkForErrors(true);
}
bool ScriptEnv::checkForErrors(bool fatal)
{
if (m_engine->hasUncaughtException()) { if (m_engine->hasUncaughtException()) {
emit reportError(this, true); emit reportError(this, fatal);
return false; return true;
} }
return true; return false;
} }
QScriptValue ScriptEnv::runApplication(QScriptContext *context, QScriptEngine *engine) QScriptValue ScriptEnv::runApplication(QScriptContext *context, QScriptEngine *engine)
@ -272,8 +277,7 @@ bool ScriptEnv::importExtensions(const KPluginInfo &info, QScriptValue &obj, Aut
} }
} }
if (m_engine->hasUncaughtException()) { if (checkForErrors(true)) {
emit reportError(this, true);
return false; return false;
} else { } else {
m_extensions << extension; m_extensions << extension;
@ -299,9 +303,7 @@ bool ScriptEnv::importExtensions(const KPluginInfo &info, QScriptValue &obj, Aut
} }
} }
if (m_engine->hasUncaughtException()) { if (!checkForErrors(false)) {
emit reportError(this, false);
} else {
m_extensions << extension; m_extensions << extension;
} }
} }

View File

@ -44,7 +44,7 @@ public:
QScriptEngine *engine() const; QScriptEngine *engine() const;
/** Returns the ScriptEnv in use for a given QScriptEngine or 0. */ /** Returns the ScriptEnv in use for a given QScriptEngine or 0. */
static ScriptEnv *findScriptEnv( QScriptEngine *engine ); static ScriptEnv *findScriptEnv(QScriptEngine *engine);
void registerEnums(QScriptValue &scriptValue, const QMetaObject &meta); void registerEnums(QScriptValue &scriptValue, const QMetaObject &meta);
bool include(const QString &path); bool include(const QString &path);
@ -52,6 +52,8 @@ public:
bool importExtensions(const KPluginInfo &info, QScriptValue &obj, Authorization &authorizer); bool importExtensions(const KPluginInfo &info, QScriptValue &obj, Authorization &authorizer);
QSet<QString> loadedExtensions() const; QSet<QString> loadedExtensions() const;
bool checkForErrors(bool fatal);
Q_SIGNALS: Q_SIGNALS:
void reportError(ScriptEnv *engine, bool fatal); void reportError(ScriptEnv *engine, bool fatal);