aboutsummaryrefslogtreecommitdiff
path: root/boot/parser.yy
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-09-16 11:49:35 +0200
committerEugen Wissner <belka@caraus.de>2026-09-16 11:49:35 +0200
commitb575036fe804f14b78da74897a74b010cc94f730 (patch)
tree054dcb6e932bc8cf5faf2a0158794913fc6e8be3 /boot/parser.yy
parent52c8ca2c06da93c8d14e80a256e8996c1fa1e885 (diff)
downloadelna-b575036fe804f14b78da74897a74b010cc94f730.tar.gz
Implement named blocks
Diffstat (limited to 'boot/parser.yy')
-rw-r--r--boot/parser.yy6
1 files changed, 6 insertions, 0 deletions
diff --git a/boot/parser.yy b/boot/parser.yy
index ab386fe..eaf1a7c 100644
--- a/boot/parser.yy
+++ b/boot/parser.yy
@@ -112,6 +112,8 @@ along with GCC; see the file COPYING3. If not see
BEGIN_BLOCK "begin"
END_BLOCK "end"
DEFER "defer"
+ BLOCK "block"
+ BREAK "break"
CASE "case"
OF "of"
TO "to"
@@ -582,6 +584,10 @@ statement:
| call_expression { $$ = $1.release(); }
| "defer" statements "end"
{ $$ = new boot::defer_statement(boot::make_position(@$), $2); }
+ | "block" identifier statements "end"
+ { $$ = new boot::block_statement(boot::make_position(@$), std::move(*$2), $3); }
+ | "break" identifier
+ { $$ = new boot::break_statement(boot::make_position(@$), std::move(*$2)); }
| "case" expression "of" switch_cases else_statements "end"
{ $$ = new boot::case_statement(boot::make_position(@$), $2, $4, $5); }
| %empty { $$ = new boot::empty_statement(boot::make_position(@$)); }