From 828f8a2cbd828aa0806c72a1870f935b8cda40d4 Mon Sep 17 00:00:00 2001
From: Aurindam Jana <aurindam.jana@nokia.com>
Date: Tue, 13 Dec 2011 16:45:32 +0100
Subject: [PATCH] QmlV8DebuggerClient: Evaluate expressions

Check if the current stack frame is usable before
sending eval request to v8.

Change-Id: Ief687516b1b4a323c2b602f1b54d83ff7661bed4
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
---
 .../debugger/qml/qmlv8debuggerclient.cpp       | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
index 42dcfc74118..1135464fc78 100644
--- a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
+++ b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
@@ -1119,8 +1119,10 @@ void QmlV8DebuggerClient::assignValueInDebugger(const QByteArray /*expr*/, const
 {
     StackHandler *stackHandler = d->engine->stackHandler();
     QString expression = QString(_("%1 = %2;")).arg(property).arg(value);
-    if (stackHandler->isContentsValid()) {
-        d->evaluate(expression/*, false, false, stackHandler->currentIndex()*/);
+    if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
+        d->evaluate(expression, false, false, stackHandler->currentIndex());
+    } else {
+        d->engine->showMessage(QString(_("Cannot evaluate %1 in current stack frame")).arg(expression), ScriptConsoleOutput);
     }
 }
 
@@ -1132,12 +1134,12 @@ void QmlV8DebuggerClient::updateWatchData(const WatchData &/*data*/)
 void QmlV8DebuggerClient::executeDebuggerCommand(const QString &command)
 {
     StackHandler *stackHandler = d->engine->stackHandler();
-    if (stackHandler->isContentsValid()) {
-        d->evaluate(command/*, false, false, stackHandler->currentIndex()*/);
+    if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
+        d->evaluate(command, false, false, stackHandler->currentIndex());
         d->evaluatingExpression.insert(d->sequence, command);
     } else {
         //Currently cannot evaluate if not in a javascript break
-        d->engine->showMessage(_("Request Was Unsuccessful"), ScriptConsoleOutput);
+        d->engine->showMessage(QString(_("Cannot evaluate %1 in current stack frame")).arg(command), ScriptConsoleOutput);
         //        d->evaluate(command);
     }
 }
@@ -1148,7 +1150,11 @@ void QmlV8DebuggerClient::synchronizeWatchers(const QStringList &watchers)
     foreach (const QString &exp, watchers) {
         if (!d->watchedExpressions.contains(exp)) {
             d->watchedExpressions << exp;
-            executeDebuggerCommand(exp);
+            StackHandler *stackHandler = d->engine->stackHandler();
+            if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
+                d->evaluate(exp, false, false, stackHandler->currentIndex());
+                d->evaluatingExpression.insert(d->sequence, exp);
+            }
         }
     }
 }
-- 
GitLab