[vala/0.48] vala: Parse standalone integer/real literals as expression statement
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/0.48] vala: Parse standalone integer/real literals as expression statement
- Date: Sun, 5 Apr 2020 05:48:57 +0000 (UTC)
commit 50f36ab93c355017229e9d71d8d41cbdb062383d
Author: Rico Tzschichholz <ricotz ubuntu com>
Date: Sat Apr 4 10:25:31 2020 +0200
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
tests/Makefile.am | 2 ++
tests/parser/invalid-statement-delimiter.test | 7 +++++++
tests/semantic/literal-expression.test | 6 ++++++
vala/valaexpressionstatement.vala | 4 ++++
vala/valaparser.vala | 3 +++
5 files changed, 22 insertions(+)
---
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 43cebbe62..73160b0cc 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:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]