summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2021-04-15 16:49:14 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2021-04-28 08:44:24 +0200
commit9ee5fbf4f00c8ea5c2dc3e0b9aff453b4ec09fef (patch)
treede753c8ae7deb81b8b498efe1727bb4481b7af57
parentcc65cabdc3c47a1a1a4ecc887642b594d7ffa4a6 (diff)
downloadvala-9ee5fbf4f00c8ea5c2dc3e0b9aff453b4ec09fef.tar.gz
parser: Allow empty member-initializer and accept trailing comma
-rw-r--r--tests/Makefile.am3
-rw-r--r--tests/parser/member-initializer-empty.vala7
-rw-r--r--tests/parser/member-initializer-trailing-comma.vala9
-rw-r--r--tests/parser/member-initializer.vala9
-rw-r--r--vala/valaparser.vala8
5 files changed, 34 insertions, 2 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 03b221b9c..79656a816 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -823,6 +823,9 @@ TESTS = \
parser/lock-statement.vala \
parser/main-block.vala \
parser/member-access-pointer.vala \
+ parser/member-initializer.vala \
+ parser/member-initializer-empty.vala \
+ parser/member-initializer-trailing-comma.vala \
parser/method-no-abstract-override.test \
parser/method-no-abstract-virtual-override.test \
parser/method-no-abstract-virtual.test \
diff --git a/tests/parser/member-initializer-empty.vala b/tests/parser/member-initializer-empty.vala
new file mode 100644
index 000000000..732503bf2
--- /dev/null
+++ b/tests/parser/member-initializer-empty.vala
@@ -0,0 +1,7 @@
+class Foo {
+ public int i;
+}
+
+void main () {
+ var foo = new Foo () {};
+}
diff --git a/tests/parser/member-initializer-trailing-comma.vala b/tests/parser/member-initializer-trailing-comma.vala
new file mode 100644
index 000000000..8e7503c8e
--- /dev/null
+++ b/tests/parser/member-initializer-trailing-comma.vala
@@ -0,0 +1,9 @@
+class Foo {
+ public int i;
+}
+
+void main () {
+ var foo = new Foo () {
+ i = 42,
+ };
+}
diff --git a/tests/parser/member-initializer.vala b/tests/parser/member-initializer.vala
new file mode 100644
index 000000000..7795c14f6
--- /dev/null
+++ b/tests/parser/member-initializer.vala
@@ -0,0 +1,9 @@
+class Foo {
+ public int i;
+}
+
+void main () {
+ var foo = new Foo () {
+ i = 23
+ };
+}
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index d3f0875fe..41cd47698 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -1052,9 +1052,13 @@ public class Vala.Parser : CodeVisitor {
List<MemberInitializer> parse_object_initializer () throws ParseError {
var list = new ArrayList<MemberInitializer> ();
if (accept (TokenType.OPEN_BRACE)) {
- do {
+ while (current () != TokenType.CLOSE_BRACE) {
list.add (parse_member_initializer ());
- } while (accept (TokenType.COMMA));
+
+ if (!accept (TokenType.COMMA)) {
+ break;
+ }
+ }
expect (TokenType.CLOSE_BRACE);
}
return list;