lex_ctx ctx = parser_ctx(parser);
/* skip the 'do' and get the body */
- if (!parser_next(parser) || parser->tok != '(') {
+ if (!parser_next(parser)) {
parseerror(parser, "expected loop body");
return false;
}
/* expect the "while" */
if (parser->tok != TOKEN_KEYWORD ||
- !strcmp(parser_tokval(parser), "while"))
+ strcmp(parser_tokval(parser), "while"))
{
parseerror(parser, "expected 'while' and condition");
ast_delete(ontrue);
return false;
}
/* parse on */
+ if (!parser_next(parser) || parser->tok != ';') {
+ parseerror(parser, "expected semicolon after condition");
+ ast_delete(ontrue);
+ ast_delete(cond);
+ return false;
+ }
+
if (!parser_next(parser)) {
parseerror(parser, "parse error");
ast_delete(ontrue);