parser/statement-keyword-as-identifier.vala \
parser/statement-outside-root.test \
parser/switch-statement.vala \
+ parser/switch-section-outside-switch.test \
parser/template.vala \
parser/tuple.vala \
parser/unsupported-property-async.test \
case TokenType.SWITCH:
stmt = parse_switch_statement ();
break;
+ case TokenType.CASE:
+ case TokenType.DEFAULT:
+ stmt = parse_switch_section_statement ();
+ break;
case TokenType.WHILE:
stmt = parse_while_statement ();
break;
void parse_statements (Block block) throws ParseError {
while (current () != TokenType.CLOSE_BRACE
- && current () != TokenType.CASE
- && current () != TokenType.DEFAULT
&& current () != TokenType.EOF) {
try {
Statement stmt = null;
case TokenType.WITH:
stmt = parse_statement (current ());
break;
+ case TokenType.CASE:
+ case TokenType.DEFAULT:
+ if (block is SwitchSection) {
+ // begin a new switch case
+ return;
+ } else {
+ stmt = parse_statement (current ());
+ }
+ break;
case TokenType.VAR:
is_decl = true;
parse_local_variable_declarations (block);
return !error;
}
+ if (!(parent_node is SwitchStatement)) {
+ Report.error (source_reference, "no enclosing switch statement found");
+ error = true;
+ return false;
+ }
+
foreach (SwitchLabel label in get_labels ()) {
label.check (context);
}