From: Rico Tzschichholz Date: Thu, 15 Apr 2021 14:49:14 +0000 (+0200) Subject: parser: Allow empty member-initializer and accept trailing comma X-Git-Tag: 0.53.1~119 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20fcf9ce42dca52c707b96ddf7457931d6ee96f5;p=thirdparty%2Fvala.git parser: Allow empty member-initializer and accept trailing comma --- 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 parse_object_initializer () throws ParseError { var list = new ArrayList (); 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;