Time for action – sandboxed script evaluation
The next task for us is to modify our script editor so that it cleans up after the execution of each script. As was said, each script is executed in the current context of the engine, so the task of solving the problem boils down to making sure that each script executes in a separate context. Incorporate the following code in the run()
method:
void MainWindow::run() { ui->logWindow->clear(); QString scriptSourceCode = ui->codeEditor->toPlainText(); m_engine.pushContext(); QScriptValue result = m_engine.evaluate (scriptSourceCode, windowFilePath()); if(m_engine.hasUncaughtException()) { // … } m_engine.popContext(); }
Run the program and repeat the last test to see that fun
no longer persists across executions.
What just happened?
When a function is called, a new execution context is pushed to the top of the stack. When the engine tries to resolve an object, it first looks for the object...