From: Rico Tzschichholz Date: Tue, 2 Nov 2021 12:22:00 +0000 (+0100) Subject: parser: Split out Parser.parse_switch_section_statement() X-Git-Tag: 0.55.1~94 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c655e653fce25f44cf10b2fbed564aadcff7235f;p=thirdparty%2Fvala.git parser: Split out Parser.parse_switch_section_statement() --- diff --git a/vala/valaparser.vala b/vala/valaparser.vala index 93031cee1..02b69cc0a 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -2182,28 +2182,34 @@ public class Vala.Parser : CodeVisitor { var stmt = new SwitchStatement (condition, get_src (begin)); expect (TokenType.OPEN_BRACE); while (current () != TokenType.CLOSE_BRACE) { - begin = get_location (); - var section = new SwitchSection (get_src (begin)); - do { - if (accept (TokenType.CASE)) { - section.add_label (new SwitchLabel (parse_expression (), get_src (begin))); - while (current () == TokenType.COMMA) { - expect (TokenType.COMMA); - section.add_label (new SwitchLabel (parse_expression (), get_src (begin))); - } - } else { - expect (TokenType.DEFAULT); - section.add_label (new SwitchLabel.with_default (get_src (begin))); - } - expect (TokenType.COLON); - } while (current () == TokenType.CASE || current () == TokenType.DEFAULT); - parse_statements (section); - stmt.add_section (section); + stmt.add_section ((SwitchSection) parse_switch_section_statement ()); } expect (TokenType.CLOSE_BRACE); return stmt; } + Statement parse_switch_section_statement () throws ParseError { + var begin = get_location (); + var section = new SwitchSection (get_src (begin)); + do { + if (accept (TokenType.CASE)) { + section.add_label (new SwitchLabel (parse_expression (), get_src (begin))); + while (current () == TokenType.COMMA) { + expect (TokenType.COMMA); + section.add_label (new SwitchLabel (parse_expression (), get_src (begin))); + } + expect (TokenType.COLON); + } else if (accept (TokenType.DEFAULT)) { + section.add_label (new SwitchLabel.with_default (get_src (begin))); + expect (TokenType.COLON); + } else { + throw new ParseError.SYNTAX ("expected `case' or `default' switch label"); + } + } while (current () == TokenType.CASE || current () == TokenType.DEFAULT); + parse_statements (section); + return section; + } + Statement parse_while_statement () throws ParseError { var begin = get_location (); expect (TokenType.WHILE);