feat: implement break

This commit is contained in:
samsonium
2026-10-22 21:30:32 +03:00
parent b5ae959d14
commit 7cfb8efef4
6 changed files with 60 additions and 13 deletions
+10
View File
@@ -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;