Debugger: Always disable v4 optimizer if v8 debugger is activated
authorKai Koehne <kai.koehne@nokia.com>
Fri, 16 Mar 2012 20:00:42 +0000 (21:00 +0100)
committerQt by Nokia <qt-info@nokia.com>
Mon, 19 Mar 2012 13:35:55 +0000 (14:35 +0100)
Don't rely on QML_DISABLE_OPTIMIZER environment variable being set.

Change-Id: Ib1a9d83eb9698adcd3c9a5bbcc74cba382836078
Reviewed-by: Aurindam Jana <aurindam.jana@nokia.com>
src/qml/debugger/qv8debugservice.cpp
tests/auto/qml/debugger/qqmldebugjs/data/breakpointRelocation.qml
tests/auto/qml/debugger/qqmldebugjs/tst_qqmldebugjs.cpp

index a6aeda3..7d54a59 100644 (file)
@@ -42,6 +42,7 @@
 #include "qv8debugservice_p.h"
 #include "qqmldebugservice_p_p.h"
 #include <private/qjsconverter_impl_p.h>
+#include <private/qv4compiler_p.h>
 #include <private/qv8engine_p.h>
 
 #include <QtCore/QHash>
@@ -192,6 +193,7 @@ void QV8DebugService::init()
     Q_D(QV8DebugService);
     v8::Debug::SetMessageHandler2(DebugMessageHandler);
     v8::Debug::SetDebugMessageDispatchHandler(DebugMessageDispatchHandler);
+    QV4Compiler::enableV4(false);
     d->initializeMutex.unlock();
 }
 
index 1f0f9e2..0a1a5eb 100644 (file)
@@ -47,7 +47,9 @@ Item {
     Component.onCompleted: {
         //Comment
 
-        var b = 6;
+        var x = 6;
     }
+
+    width : height + 2
 }
 
index f4a9a4a..8293ec6 100644 (file)
@@ -191,6 +191,7 @@ private slots:
     void setBreakpointInScriptInDifferentFile();
     void setBreakpointInScriptOnComment();
     void setBreakpointInScriptOnEmptyLine();
+    void setBreakpointInScriptOnOptimizedBinding();
     void setBreakpointInScriptWithCondition();
     //void setBreakpointInFunction(); //NOT SUPPORTED
     void setBreakpointOnEvent();
@@ -1019,9 +1020,6 @@ bool tst_QQmlDebugJS::init(const QString &qmlFile, bool blockMode)
     process = new QQmlDebugProcess(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlscene");
     client = new QJSDebugClient(connection);
 
-    QStringList systemEnvironment = QProcess::systemEnvironment();
-    systemEnvironment << "QML_DISABLE_OPTIMIZER=1";
-    process->setEnvironment(systemEnvironment);
     if (blockMode)
         process->start(QStringList() << QLatin1String(BLOCKMODE) << testFile(qmlFile));
     else
@@ -1295,6 +1293,26 @@ void tst_QQmlDebugJS::setBreakpointInScriptOnEmptyLine()
     QCOMPARE(QFileInfo(body.value("script").toMap().value("name").toString()).fileName(), QLatin1String(BREAKPOINTRELOCATION_QMLFILE));
 }
 
+void tst_QQmlDebugJS::setBreakpointInScriptOnOptimizedBinding()
+{
+    //void setBreakpoint(QString type, QString target, int line = -1, int column = -1, bool enabled = false, QString condition = QString(), int ignoreCount = -1)
+
+    int sourceLine = 52;
+    QVERIFY(init(BREAKPOINTRELOCATION_QMLFILE));
+
+    client->setBreakpoint(QLatin1String(SCRIPTREGEXP), QLatin1String(BREAKPOINTRELOCATION_QMLFILE), sourceLine, -1, true);
+    client->connect();
+    QVERIFY(QQmlDebugTest::waitForSignal(client, SIGNAL(stopped())));
+
+    QString jsonString(client->response);
+    QVariantMap value = client->parser.call(QJSValueList() << QJSValue(jsonString)).toVariant().toMap();
+
+    QVariantMap body = value.value("body").toMap();
+
+    QCOMPARE(body.value("sourceLine").toInt(), sourceLine);
+    QCOMPARE(QFileInfo(body.value("script").toMap().value("name").toString()).fileName(), QLatin1String(BREAKPOINTRELOCATION_QMLFILE));
+}
+
 void tst_QQmlDebugJS::setBreakpointInScriptWithCondition()
 {
     //void setBreakpoint(QString type, QString target, int line = -1, int column = -1, bool enabled = false, QString condition = QString(), int ignoreCount = -1)