]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
parser: Stricter mode for chained member initializer with --keep-going
authorRico Tzschichholz <ricotz@ubuntu.com>
Sun, 21 Mar 2021 09:46:16 +0000 (10:46 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sun, 21 Mar 2021 09:46:16 +0000 (10:46 +0100)
Regression of 86bc23f2d7295ae3b2f5f79449d2c5a4a7a93a58

Fixes https://gitlab.gnome.org/GNOME/vala/issues/1158

tests/Makefile.am
tests/parser-keep-going/member-initializer.vala [new file with mode: 0644]
tests/parser-keep-going/tests-extra-environment.sh [new file with mode: 0644]
vala/valaparser.vala

index c3083a2f321ea61750ffa84c549e2b79b7584c36..3454623d29a05063915d4372c10568a1253ad26c 100644 (file)
@@ -884,6 +884,7 @@ TESTS = \
        parser/yield-return.vala \
        parser/bug728574.vala \
        parser/bug749576.vala \
+       parser-keep-going/member-initializer.vala \
        resolver/class-base-cycle.test \
        resolver/interface-prerequisite-cycle.test \
        resolver/peek-inner-types-ambiguous.test \
@@ -1244,6 +1245,7 @@ endif
 EXTRA_DIST = \
        glib/tests-extra-environment.sh \
        gtktemplate/tests-extra-environment.sh \
+       parser-keep-going/tests-extra-environment.sh \
        linux/tests-extra-environment.sh \
        nullability/tests-extra-environment.sh \
        posix/tests-extra-environment.sh \
diff --git a/tests/parser-keep-going/member-initializer.vala b/tests/parser-keep-going/member-initializer.vala
new file mode 100644 (file)
index 0000000..4ab47a2
--- /dev/null
@@ -0,0 +1,22 @@
+struct Foo {
+    uint x;
+    int y;
+}
+
+class Bar {
+    public string s;
+}
+
+void main() {
+    var foo = Foo () {
+               x = (uint) 23,
+               y = 42
+    };
+    assert (foo.x == 23U);
+    assert (foo.y == 42);
+
+    var bar = new Bar () {
+               s = "bar"
+    };
+    assert (bar.s == "bar");
+}
diff --git a/tests/parser-keep-going/tests-extra-environment.sh b/tests/parser-keep-going/tests-extra-environment.sh
new file mode 100644 (file)
index 0000000..2c64eea
--- /dev/null
@@ -0,0 +1 @@
+VALAFLAGS="--keep-going"
index 7236d5c7b8435481d55d319adf1d64b22317f61d..4cbe72358f05d6535cbeee5e62e7a3f0d3912071 100644 (file)
@@ -302,11 +302,11 @@ public class Vala.Parser : CodeVisitor {
                }
        }
 
-       string parse_identifier () throws ParseError {
+       string parse_identifier (bool required = false) throws ParseError {
                try {
                        skip_identifier ();
                } catch (ParseError e) {
-                       if (context.keep_going) {
+                       if (!required && context.keep_going) {
                                report_parse_error (e);
                                prev ();
                                return get_location_string ();
@@ -1060,16 +1060,16 @@ public class Vala.Parser : CodeVisitor {
                return list;
        }
 
-       MemberInitializer parse_member_initializer () throws ParseError {
+       MemberInitializer parse_member_initializer (bool chained = false) throws ParseError {
                var begin = get_location ();
-               string id = parse_identifier ();
+               string id = parse_identifier (chained);
                expect (TokenType.ASSIGN);
 
                var inner = get_location ();
                Expression expr;
                try {
                        // chained member initializer
-                       expr = parse_member_initializer ();
+                       expr = parse_member_initializer (true);
                } catch {
                        rollback (inner);
                        expr = parse_expression ();