diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-10-08 01:29:37 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-10-08 01:29:37 +0200 |
| commit | d4b7f5e52a33f2d15aafca7f1b040f3f2821fd0c (patch) | |
| tree | c4d2f2ea44bbcb26108e86270a4454cd04f7873a /boot/parser.yy | |
| parent | 12e304fd56f054ba7296ab538eecd4280a67832a (diff) | |
| download | elna-d4b7f5e52a33f2d15aafca7f1b040f3f2821fd0c.tar.gz | |
Move record constructor type into the braces
Diffstat (limited to 'boot/parser.yy')
| -rw-r--r-- | boot/parser.yy | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/boot/parser.yy b/boot/parser.yy index e8c3590..f416d57 100644 --- a/boot/parser.yy +++ b/boot/parser.yy @@ -424,14 +424,9 @@ simple_expression: } | call_expression { $$ = $1; } | "(" expression ")" { $$ = $2; } - | name_reference "{" field_initializers "}" + | "{" type_expression field_initializers "}" { - boot::named_expression *reference = $1; - - $$ = new boot::record_constructor_expression(boot::make_position(@$), - boot::identifier(reference->name, reference->position()), - std::move(reference->arguments), $3); - delete reference; + $$ = new boot::record_constructor_expression(boot::make_position(@$), $2, $3); } | "[" required_expressions "]" { @@ -644,12 +639,13 @@ field_declarations: field_initializer: identifier ":" expression { $$ = std::make_unique<boot::field_initializer>(std::move(*$1), $3); } field_initializers: - field_initializer "," field_initializers + ";" field_initializer { $$.push_back(std::move(*$2)); } + | field_initializers "," field_initializer { - $$ = $3; - $$.emplace($$.cbegin(), std::move(*$1)); + $$ = $1; + $$.push_back(std::move(*$3)); } - | field_initializer { $$.push_back(std::move(*$1)); } + | %empty {} array_type_expression: "[" expression "]" type_expression { $$ = new boot::array_type_expression(boot::make_position(@$), $4, $2); } |
