[vala/staging] parser: Allow empty member-initializer and accept trailing comma



commit 20fcf9ce42dca52c707b96ddf7457931d6ee96f5
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Thu Apr 15 16:49:14 2021 +0200

    parser: Allow empty member-initializer and accept trailing comma

 tests/Makefile.am                                   | 3 +++
 tests/parser/member-initializer-empty.vala          | 7 +++++++
 tests/parser/member-initializer-trailing-comma.vala | 9 +++++++++
 tests/parser/member-initializer.vala                | 9 +++++++++
 vala/valaparser.vala                                | 8 ++++++--
 5 files changed, 34 insertions(+), 2 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 00e05cad4..1b3d47831 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -835,6 +835,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 cba7c51b2..e85d45e6f 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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]