Fix automatic semicolon insertion before ++/-- operators.
authorErik Verbruggen <erik.verbruggen@me.com>
Thu, 10 Jan 2013 10:43:11 +0000 (11:43 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 11 Jan 2013 11:34:56 +0000 (12:34 +0100)
Also move the tilde token from isBinop to the lex method, because it is
not a binop, but should still be delimited.

Change-Id: I532260f4f3ebdde2d38128b41d11bce5a113d1f1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/qml/qml/parser/qqmljslexer.cpp
tests/auto/qml/qmlmin/tst_qmlmin.cpp
tests/auto/qml/qqmlecmascript/data/incrDecrSemicolon_error1.qml [new file with mode: 0644]
tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp

index 253526b..b2020d8 100644 (file)
@@ -203,7 +203,6 @@ inline bool isBinop(int tok)
     case Lexer::T_LT_LT_EQ:
     case Lexer::T_MINUS:
     case Lexer::T_MINUS_EQ:
-    case Lexer::T_MINUS_MINUS:
     case Lexer::T_NOT_EQ:
     case Lexer::T_NOT_EQ_EQ:
     case Lexer::T_OR:
@@ -211,13 +210,11 @@ inline bool isBinop(int tok)
     case Lexer::T_OR_OR:
     case Lexer::T_PLUS:
     case Lexer::T_PLUS_EQ:
-    case Lexer::T_PLUS_PLUS:
     case Lexer::T_REMAINDER:
     case Lexer::T_REMAINDER_EQ:
     case Lexer::T_RETURN:
     case Lexer::T_STAR:
     case Lexer::T_STAR_EQ:
-    case Lexer::T_TILDE:
     case Lexer::T_XOR:
     case Lexer::T_XOR_EQ:
         return true;
@@ -246,6 +243,7 @@ int Lexer::lex()
     case T_SEMICOLON:
     case T_QUESTION:
     case T_COLON:
+    case T_TILDE:
         _delimited = true;
         break;
     default:
index 3fb5151..028a04a 100644 (file)
@@ -112,6 +112,7 @@ void tst_qmlmin::initTestCase()
     invalidFiles << "tests/auto/qml/qqmlecmascript/data/qtbug_22843.library.js";
     invalidFiles << "tests/auto/qml/qquickworkerscript/data/script_error_onLoad.js";
     invalidFiles << "tests/auto/qml/parserstress/tests/ecma_3/Unicode/regress-352044-02-n.js";
+    invalidFiles << "tests/auto/qml/qqmlecmascript/data/incrDecrSemicolon_error1.qml";
     invalidFiles << "tests/auto/qml/qqmlecmascript/data/jsimportfail/malformedFileQualifier.js";
     invalidFiles << "tests/auto/qml/qqmlecmascript/data/jsimportfail/malformedImport.js";
     invalidFiles << "tests/auto/qml/qqmlecmascript/data/jsimportfail/malformedModule.js";
diff --git a/tests/auto/qml/qqmlecmascript/data/incrDecrSemicolon_error1.qml b/tests/auto/qml/qqmlecmascript/data/incrDecrSemicolon_error1.qml
new file mode 100644 (file)
index 0000000..710729c
--- /dev/null
@@ -0,0 +1,19 @@
+import QtQuick 2.0
+
+QtObject {
+
+    // PLEASE NOTE: the function below is whitespace and newline sensitive,
+    //              because that is what the test is all about.
+    //
+    // So: DO NOT REFORMAT THE CODE BELOW!
+
+    function code() {
+var x=0, y=0;
+var z=
+x
+++
+++
+y
+    }
+}
+
index 8624fef..7be6216 100644 (file)
@@ -268,6 +268,7 @@ private slots:
     void compatibilitySemicolon();
     void incrDecrSemicolon1();
     void incrDecrSemicolon2();
+    void incrDecrSemicolon_error1();
     void unaryExpression();
     void switchStatement();
     void withStatement();
@@ -6638,6 +6639,13 @@ void tst_qqmlecmascript::incrDecrSemicolon2()
     QVERIFY(object != 0);
 }
 
+void tst_qqmlecmascript::incrDecrSemicolon_error1()
+{
+    QQmlComponent component(&engine, testFileUrl("incrDecrSemicolon_error1.qml"));
+    QObject *object = component.create();
+    QVERIFY(object == 0);
+}
+
 void tst_qqmlecmascript::unaryExpression()
 {
     QQmlComponent component(&engine, testFileUrl("unaryExpression.qml"));