diff options
Diffstat (limited to 'library/scriptadapter.cpp')
-rw-r--r-- | library/scriptadapter.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/library/scriptadapter.cpp b/library/scriptadapter.cpp index 17d8d25..ba196c7 100644 --- a/library/scriptadapter.cpp +++ b/library/scriptadapter.cpp @@ -42,6 +42,10 @@ #include <QtCore/QDebug> #include <QtGui/QMessageBox> +#ifdef Q_OS_WIN +#include <windows.h> +#endif + template <typename Enum> static void scriptToEnum(const QScriptValue &obj, Enum &e) { @@ -177,6 +181,30 @@ void ScriptAdapter::messageBox(const QString &text) mCurrentScript->endBlocking(); } +static QScriptValue safePrint(QScriptContext *context, QScriptEngine *engine) +{ + QString result; + for (int i = 0; i < context->argumentCount(); ++i) { + if (i != 0) + result.append(QLatin1Char(' ')); + QString s(context->argument(i).toString()); + if (engine->hasUncaughtException()) + break; + result.append(s); + } + if (engine->hasUncaughtException()) + return engine->uncaughtException(); + +#ifdef Q_OS_WIN + if (IsDebuggerPresent()) + qDebug("%s", qPrintable(result)); +#else + qDebug("%s", qPrintable(result)); +#endif + + return engine->undefinedValue(); +} + Script::Script(const QString &name, const QString &scriptCode, ScriptAdapter *adapter) : QObject(adapter) @@ -203,6 +231,10 @@ Script::Script(const QString &name, const QString &scriptCode, mEngine.globalObject().setProperty(functionName, functionValue); } + // override print, the default uses qDebug and that is not allowed in coroutines! + QScriptValue printFn = mEngine.newFunction(safePrint, 1); + mEngine.globalObject().setProperty("print", printFn); + QHashIterator<QString, QObject *> iter(mAdapter->mScriptInterfaces); while (iter.hasNext()) { iter.next(); |