]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
parser: Accept "empty" enums/error-domains 540aa1492c342f482be6838b97f54437f3b776e4
authorRico Tzschichholz <ricotz@ubuntu.com>
Thu, 12 Jul 2018 09:19:02 +0000 (11:19 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Thu, 12 Jul 2018 09:47:44 +0000 (11:47 +0200)
This drops the semantic check from the parser. Actual errors will be caught
later by the SemanticAnalyzer.

See https://gitlab.gnome.org/GNOME/vala/issues/253

vala/valaparser.vala

index 9a26015c11330325cab37f6f8be42485bbd39e73..e5accb12881c1af637722d232090ff575cce6a26 100644 (file)
@@ -3087,10 +3087,17 @@ public class Vala.Parser : CodeVisitor {
                set_attributes (en, attrs);
 
                expect (TokenType.OPEN_BRACE);
+               var inner_begin = get_location ();
+               try {
+                       // enum methods
+                       while (current () != TokenType.CLOSE_BRACE) {
+                               parse_declaration (en);
+                       }
+               } catch (ParseError e) {
+                       rollback (inner_begin);
+               }
                do {
-                       if (current () == TokenType.CLOSE_BRACE
-                           && en.get_values ().size > 0) {
-                               // allow trailing comma
+                       if (current () == TokenType.CLOSE_BRACE) {
                                break;
                        }
                        var value_attrs = parse_attributes ();
@@ -3144,10 +3151,17 @@ public class Vala.Parser : CodeVisitor {
                set_attributes (ed, attrs);
 
                expect (TokenType.OPEN_BRACE);
+               var inner_begin = get_location ();
+               try {
+                       // errordomain methods
+                       while (current () != TokenType.CLOSE_BRACE) {
+                               parse_declaration (ed);
+                       }
+               } catch (ParseError e) {
+                       rollback (inner_begin);
+               }
                do {
-                       if (current () == TokenType.CLOSE_BRACE
-                           && ed.get_codes ().size > 0) {
-                               // allow trailing comma
+                       if (current () == TokenType.CLOSE_BRACE) {
                                break;
                        }
                        var code_attrs = parse_attributes ();