Add error recovery in for loops

pull/70/head
Max Brunsfeld 2014-09-07 09:51:25 +07:00
parent a0a97b7433
commit 4429001308
2 changed files with 45 additions and 3 deletions

@ -71,9 +71,9 @@ module.exports = compiler.grammar
for_statement: -> seq(
keyword("for"),
"(",
commaSep(@expression), ";"
optional(@expression), ";"
optional(@expression),
commaSep(err(@expression)), ";"
optional(err(@expression)), ";"
optional(err(@expression)),
")",
@statement)

@ -35,6 +35,48 @@ okWhatever();
(expression_statement (function_call (identifier))))
(expression_statement (function_call (identifier))))
============================================
Invalid for loops
============================================
for (i = 0; a b c d e; i++)
wat();
ok1;
for (a b c d; e; i++)
wat();
ok2;
for (a; b; c d e f)
wat();
---
(program
(for_statement
(assignment (identifier) (number))
(ERROR 'b')
(math_op (identifier))
(expression_statement (function_call (identifier))))
(expression_statement (identifier))
(for_statement
(ERROR 'b')
(identifier)
(math_op (identifier))
(expression_statement (function_call (identifier))))
(expression_statement (identifier))
(for_statement
(identifier)
(identifier)
(ERROR 'd')
(expression_statement (function_call (identifier)))))
============================================
Invalid statement blocks
============================================