]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
parser: Restrict source_reference for catch/lock expression to its header
authorRico Tzschichholz <ricotz@ubuntu.com>
Fri, 8 Mar 2019 17:46:02 +0000 (18:46 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 10 Apr 2019 14:09:29 +0000 (16:09 +0200)
vala/valaparser.vala

index 59d659f356fea7cee0f5ccb4fbc50918845adaf1..239de6bc170199640bfda6bdbf1ad66c30c502dc 100644 (file)
@@ -2113,8 +2113,9 @@ public class Vala.Parser : CodeVisitor {
        }
 
        void parse_catch_clauses (List<CatchClause> catch_clauses) throws ParseError {
-               while (accept (TokenType.CATCH)) {
+               while (current () == TokenType.CATCH) {
                        var begin = get_location ();
+                       expect (TokenType.CATCH);
                        DataType type = null;
                        string id = null;
                        if (accept (TokenType.OPEN_PARENS)) {
@@ -2122,8 +2123,9 @@ public class Vala.Parser : CodeVisitor {
                                id = parse_identifier ();
                                expect (TokenType.CLOSE_PARENS);
                        }
+                       var src = get_src (begin);
                        var block = parse_block ();
-                       catch_clauses.add (new CatchClause (type, id, block, get_src (begin)));
+                       catch_clauses.add (new CatchClause (type, id, block, src));
                }
        }
 
@@ -2139,11 +2141,12 @@ public class Vala.Parser : CodeVisitor {
                expect (TokenType.OPEN_PARENS);
                var expr = parse_expression ();
                expect (TokenType.CLOSE_PARENS);
+               var src = get_src (begin);
                Block? stmt = null;
                if (current () != TokenType.SEMICOLON) {
                        stmt = parse_embedded_statement ("lock", false);
                }
-               return new LockStatement (expr, stmt, get_src (begin));
+               return new LockStatement (expr, stmt, src);
        }
 
        Statement parse_unlock_statement () throws ParseError {