feat: implement break
This commit is contained in:
@@ -1198,6 +1198,13 @@ fzl_node_t *parse_loop(fzl_parser_t *parser)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// `break` keyword parsing
|
||||
fzl_node_t *parse_break(fzl_parser_t *parser)
|
||||
{
|
||||
fzl_token_t *tok = consume(parser);
|
||||
return fzl_mknode(FZL_NODETYPE_BREAK, tok);
|
||||
}
|
||||
|
||||
// Statement parsing
|
||||
fzl_node_t *parse_statement(fzl_parser_t *parser)
|
||||
{
|
||||
@@ -1218,6 +1225,8 @@ fzl_node_t *parse_statement(fzl_parser_t *parser)
|
||||
return parse_block(parser);
|
||||
else if (is(parser, FZL_TOKTYPE_FOR) || is(parser, FZL_TOKTYPE_WHILE))
|
||||
return parse_loop(parser);
|
||||
else if (is(parser, FZL_TOKTYPE_BREAK))
|
||||
res = parse_break(parser);
|
||||
|
||||
if (!res)
|
||||
res = parse_expression(parser);
|
||||
@@ -1303,6 +1312,7 @@ void fzl_freeast(fzl_node_t *root)
|
||||
{
|
||||
switch (root->type)
|
||||
{
|
||||
case FZL_NODETYPE_BREAK:
|
||||
case FZL_NODETYPE_IDENTIFIER:
|
||||
case FZL_NODETYPE_LITERAL:
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user