From: Florian Brosch Date: Sun, 14 Sep 2014 17:32:20 +0000 (+0200) Subject: parser: Warn on if/else/lock without body X-Git-Tag: 0.27.1~91 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=071b7c87283a2bd8096d0d3f81265287880e716f;p=thirdparty%2Fvala.git parser: Warn on if/else/lock without body Fixes bug 682906. --- diff --git a/vala/valaparser.vala b/vala/valaparser.vala index 512909f47..1f08f52a7 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -1672,7 +1672,7 @@ public class Vala.Parser : CodeVisitor { 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; @@ -1682,16 +1682,20 @@ public class Vala.Parser : CodeVisitor { 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 (); @@ -1859,10 +1863,10 @@ public class Vala.Parser : CodeVisitor { 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); } @@ -1900,14 +1904,14 @@ public class Vala.Parser : CodeVisitor { 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 (); @@ -1961,7 +1965,7 @@ public class Vala.Parser : CodeVisitor { } 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); @@ -1994,7 +1998,7 @@ public class Vala.Parser : CodeVisitor { 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); } @@ -2095,7 +2099,7 @@ public class Vala.Parser : CodeVisitor { 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)); }