diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-09-16 11:49:35 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-09-16 11:49:35 +0200 |
| commit | b575036fe804f14b78da74897a74b010cc94f730 (patch) | |
| tree | 054dcb6e932bc8cf5faf2a0158794913fc6e8be3 /boot/parser.yy | |
| parent | 52c8ca2c06da93c8d14e80a256e8996c1fa1e885 (diff) | |
| download | elna-b575036fe804f14b78da74897a74b010cc94f730.tar.gz | |
Implement named blocks
Diffstat (limited to 'boot/parser.yy')
| -rw-r--r-- | boot/parser.yy | 6 |
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(@$)); } |
