From: Rico Tzschichholz Date: Sat, 4 Apr 2020 08:25:31 +0000 (+0200) Subject: vala: Parse standalone integer/real literals as expression statement X-Git-Tag: 0.49.1~205 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=refs%2Fkeep-around%2F77aec5976dd55591c4b82603ac70ec9deb71f2fb;p=thirdparty%2Fvala.git vala: Parse standalone integer/real literals as expression statement 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 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 9f956d793..f87bcf2ba 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 index 000000000..7dcde9ee5 --- /dev/null +++ b/tests/parser/invalid-statement-delimiter.test @@ -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 index 000000000..1edc600f1 --- /dev/null +++ b/tests/semantic/literal-expression.test @@ -0,0 +1,6 @@ +Invalid Code + +void main () { + 23; + 3.14; +} diff --git a/vala/valaexpressionstatement.vala b/vala/valaexpressionstatement.vala index 0de6571f2..ac435d081 100644 --- a/vala/valaexpressionstatement.vala +++ b/vala/valaexpressionstatement.vala @@ -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; diff --git a/vala/valaparser.vala b/vala/valaparser.vala index f1b49352d..e2ec7b4a1 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -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: