return false;
}
- Block parse_embedded_statement () throws ParseError {
+ Block parse_embedded_statement (string statement_name, bool accept_empty_body = true) throws ParseError {
if (current () == TokenType.OPEN_BRACE) {
var block = parse_block ();
return block;
var block = new Block (get_src (get_location ()));
- var stmt = parse_embedded_statement_without_block ();
+ var stmt = parse_embedded_statement_without_block (statement_name, accept_empty_body);
block.add_statement (stmt);
return block;
}
- Statement parse_embedded_statement_without_block () throws ParseError {
+ Statement parse_embedded_statement_without_block (string statement_name, bool accept_empty_body) throws ParseError {
switch (current ()) {
- case TokenType.SEMICOLON: return parse_empty_statement ();
+ case TokenType.SEMICOLON:
+ if (!accept_empty_body) {
+ Report.warning (get_current_src (), "%s-statement without body".printf (statement_name));
+ }
+ return parse_empty_statement ();
case TokenType.IF: return parse_if_statement ();
case TokenType.SWITCH: return parse_switch_statement ();
case TokenType.WHILE: return parse_while_statement ();
var condition = parse_expression ();
expect (TokenType.CLOSE_PARENS);
var src = get_src (begin);
- var true_stmt = parse_embedded_statement ();
+ var true_stmt = parse_embedded_statement ("if", false);
Block false_stmt = null;
if (accept (TokenType.ELSE)) {
- false_stmt = parse_embedded_statement ();
+ false_stmt = parse_embedded_statement ("else", false);
}
return new IfStatement (condition, true_stmt, false_stmt, src);
}
expect (TokenType.OPEN_PARENS);
var condition = parse_expression ();
expect (TokenType.CLOSE_PARENS);
- var body = parse_embedded_statement ();
+ var body = parse_embedded_statement ("while");
return new WhileStatement (condition, body, get_src (begin));
}
Statement parse_do_statement () throws ParseError {
var begin = get_location ();
expect (TokenType.DO);
- var body = parse_embedded_statement ();
+ var body = parse_embedded_statement ("do");
expect (TokenType.WHILE);
expect (TokenType.OPEN_PARENS);
var condition = parse_expression ();
}
expect (TokenType.CLOSE_PARENS);
var src = get_src (begin);
- var body = parse_embedded_statement ();
+ var body = parse_embedded_statement ("for");
var stmt = new ForStatement (condition, body, src);
foreach (Expression init in initializer_list) {
stmt.add_initializer (init);
var collection = parse_expression ();
expect (TokenType.CLOSE_PARENS);
var src = get_src (begin);
- var body = parse_embedded_statement ();
+ var body = parse_embedded_statement ("foreach");
return new ForeachStatement (type, id, collection, body, src);
}
expect (TokenType.OPEN_PARENS);
var expr = parse_expression ();
expect (TokenType.CLOSE_PARENS);
- var stmt = parse_embedded_statement ();
+ var stmt = parse_embedded_statement ("lock", false);
return new LockStatement (expr, stmt, get_src (begin));
}