[vala/0.46] 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.46] vala: Parse standalone integer/real literals as expression statement
- Date: Tue, 21 Apr 2020 07:48:29 +0000 (UTC)
commit ddc69ba4c6741de277e52a4d6d3bb9d356adfda5
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 f97991e90..29e45d862 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -639,6 +639,7 @@ TESTS = \
parser/function-syntax-error.test \
parser/inner-array-size.test \
parser/invalid-brace.test \
+ parser/invalid-statement-delimiter.test \
parser/lock-statement.vala \
parser/main-block.vala \
parser/member-access-pointer.vala \
@@ -774,6 +775,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 9a033ab05..c98430df6 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -1651,6 +1651,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]