From c9d482321ee5ff861db5de35eac678ded30a8c78 Mon Sep 17 00:00:00 2001 From: Dmitry Mordvinov Date: Fri, 12 Sep 2014 20:00:37 +0400 Subject: [PATCH] Fixed appending function call when it does not exist in script --- trikScriptRunner/src/scriptEngineWorker.cpp | 10 ++++++---- trikScriptRunner/src/scriptEngineWorker.h | 1 - trikScriptRunner/src/threading.cpp | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/trikScriptRunner/src/scriptEngineWorker.cpp b/trikScriptRunner/src/scriptEngineWorker.cpp index 066b84400..086e419f0 100644 --- a/trikScriptRunner/src/scriptEngineWorker.cpp +++ b/trikScriptRunner/src/scriptEngineWorker.cpp @@ -59,7 +59,6 @@ ScriptEngineWorker::ScriptEngineWorker(trikControl::Brick &brick, QString const , mBrick(brick) , mThreadingVariable(*this) , mStartDirPath(startDirPath) - , mCloned(false) { connect(&mBrick, SIGNAL(quitSignal()), this, SLOT(onScriptRequestingToQuit())); } @@ -86,7 +85,6 @@ ScriptEngineWorker &ScriptEngineWorker::clone() QScriptValue globalObject = result->mEngine->globalObject(); Utils::copyRecursivelyTo(mEngine->globalObject(), globalObject, result->mEngine); result->mEngine->setGlobalObject(globalObject); - result->mCloned = true; return *result; } @@ -104,11 +102,15 @@ void ScriptEngineWorker::run(QString const &script, bool inEventDrivenMode, QStr } mThreadingVariable.setCurrentScript(script); - mEngine->evaluate(function.isEmpty() ? script : QString("%1\n%2();").arg(script, function)); + QRegExp const functionRegexp(QString( + "(.*%1\\s*=\\s*\\w*\\s*function\\(.*\\).*)|(.*function\\s+%1\\s*\\(.*\\).*)").arg(function)); + bool const needCallFunction = !function.isEmpty() && functionRegexp.exactMatch(script) + && !script.trimmed().endsWith(function + "();"); + mEngine->evaluate(needCallFunction ? QString("%1\n%2();").arg(script, function) : script); if (!mBrick.isInEventDrivenMode()) { mBrick.stop(); - if (!mCloned) { + if (!dynamic_cast(parent())) { // Only main thread must wait for others mThreadingVariable.waitForAll(); } diff --git a/trikScriptRunner/src/scriptEngineWorker.h b/trikScriptRunner/src/scriptEngineWorker.h index ad8529613..878795149 100644 --- a/trikScriptRunner/src/scriptEngineWorker.h +++ b/trikScriptRunner/src/scriptEngineWorker.h @@ -80,7 +80,6 @@ private slots: trikControl::Brick &mBrick; Threading mThreadingVariable; QString const mStartDirPath; - bool mCloned; }; } diff --git a/trikScriptRunner/src/threading.cpp b/trikScriptRunner/src/threading.cpp index db08e7b54..64054651e 100644 --- a/trikScriptRunner/src/threading.cpp +++ b/trikScriptRunner/src/threading.cpp @@ -18,7 +18,7 @@ using namespace trikScriptRunner; -int const maxThreadsCount = 10; +int const maxThreadsCount = 100; Threading::Threading(ScriptEngineWorker &runner) : mRunner(runner)