summaryrefslogtreecommitdiff
path: root/vala/valaparser.vala
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2020-01-18 20:03:37 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2020-02-03 13:33:40 +0100
commit2517adbe43d77b7afe94e4c581996ad07b4c3e4e (patch)
tree540ba4c028132e4b2383d03f52f59b8c47812d67 /vala/valaparser.vala
parentec37f4cef2bf5746fcc19ad1289b124bd9b0076a (diff)
downloadvala-2517adbe43d77b7afe94e4c581996ad07b4c3e4e.tar.gz
parser: Make parse_argument_list/parse_initializer more robust
... when --keep-going was passed or the input appears to be incomplete
Diffstat (limited to 'vala/valaparser.vala')
-rw-r--r--vala/valaparser.vala26
1 files changed, 24 insertions, 2 deletions
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index fd2b31ad2..aaae5a25a 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -579,7 +579,18 @@ public class Vala.Parser : CodeVisitor {
var list = new ArrayList<Expression> ();
if (current () != TokenType.CLOSE_PARENS) {
do {
- list.add (parse_argument ());
+ try {
+ list.add (parse_argument ());
+ } catch (ParseError e) {
+ if (current () == TokenType.CLOSE_PARENS) {
+ prev ();
+ report_parse_error (new ParseError.SYNTAX ("incomplete argument list"));
+ } else if (context.keep_going) {
+ report_parse_error (e);
+ } else {
+ throw e;
+ }
+ }
} while (accept (TokenType.COMMA));
}
expect (TokenType.CLOSE_PARENS);
@@ -2732,7 +2743,18 @@ public class Vala.Parser : CodeVisitor {
expect (TokenType.OPEN_BRACE);
var initializer = new InitializerList (get_src (begin));
while (current () != TokenType.CLOSE_BRACE) {
- initializer.append (parse_argument ());
+ try {
+ initializer.append (parse_argument ());
+ } catch (ParseError e) {
+ if (current () == TokenType.CLOSE_BRACE) {
+ prev ();
+ report_parse_error (new ParseError.SYNTAX ("incomplete initializer"));
+ } else if (context.keep_going) {
+ report_parse_error (e);
+ } else {
+ throw e;
+ }
+ }
if (!accept (TokenType.COMMA)) {
break;