]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Parse standalone integer/real literals as expression statement 77aec5976dd55591c4b82603ac70ec9deb71f2fb
authorRico Tzschichholz <ricotz@ubuntu.com>
Sat, 4 Apr 2020 08:25:31 +0000 (10:25 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sat, 4 Apr 2020 08:47:32 +0000 (10:47 +0200)
Issue an error in the semantic check to forbid such statements.

Parsing such an errornous expression-statement failed since
5464767cfa5a8dbbc5f46293693ca627b8fcc46d

Fixes https://gitlab.gnome.org/GNOME/vala/issues/961

tests/Makefile.am
tests/parser/invalid-statement-delimiter.test [new file with mode: 0644]
tests/semantic/literal-expression.test [new file with mode: 0644]
vala/valaexpressionstatement.vala
vala/valaparser.vala

index 9f956d793ab5d089b4af2c991c74d66192e0c076..f87bcf2ba3d5d54abd94c5bfec6486156487aac3 100644 (file)
@@ -667,6 +667,7 @@ TESTS = \
        parser/function-syntax-error.test \
        parser/inner-array-size.test \
        parser/invalid-brace.test \
+       parser/invalid-statement-delimiter.test \
        parser/local-variable.vala \
        parser/lock-statement.vala \
        parser/main-block.vala \
@@ -803,6 +804,7 @@ TESTS = \
        semantic/interface-prerequisite-invalid.test \
        semantic/interface-prerequisite-less-accessible.test \
        semantic/interface-prerequisite-multiple.test \
+       semantic/literal-expression.test \
        semantic/localvariable-owned-to-unowned.test \
        semantic/localvariable-var-static-access-instance-field.test \
        semantic/localvariable-var-static-access-instance-method.test \
diff --git a/tests/parser/invalid-statement-delimiter.test b/tests/parser/invalid-statement-delimiter.test
new file mode 100644 (file)
index 0000000..7dcde9e
--- /dev/null
@@ -0,0 +1,7 @@
+Invalid Code
+
+void main () {
+       int foo[]23;
+       bar ()23;
+       {}23;
+}
diff --git a/tests/semantic/literal-expression.test b/tests/semantic/literal-expression.test
new file mode 100644 (file)
index 0000000..1edc600
--- /dev/null
@@ -0,0 +1,6 @@
+Invalid Code
+
+void main () {
+       23;
+       3.14;
+}
index 0de6571f2e99edd160655e20e335c9a445f88546..ac435d081b128ba07c42fdb6d93457b1985c4e82 100644 (file)
@@ -78,6 +78,10 @@ public class Vala.ExpressionStatement : CodeNode, Statement {
                        // ignore inner error
                        error = true;
                        return false;
+               } else if (expression is Literal) {
+                       Report.error (source_reference, "Literal expression not allowed as statement");
+                       error = true;
+                       return false;
                }
 
                return !error;
index f1b49352df0e697f8bbd2d0996d2d8b7a2e8f450..e2ec7b4a1bbc3ec850c6b9b889ed6de21d4af7c8 100644 (file)
@@ -1689,6 +1689,9 @@ public class Vala.Parser : CodeVisitor {
                case TokenType.DOT:
                // pointer member access
                case TokenType.OP_PTR:
+               // literal expression
+               case TokenType.INTEGER_LITERAL:
+               case TokenType.REAL_LITERAL:
                        rollback (begin);
                        return true;
                default: