aboutsummaryrefslogtreecommitdiff
path: root/boot/parser.yy
diff options
context:
space:
mode:
Diffstat (limited to 'boot/parser.yy')
-rw-r--r--boot/parser.yy18
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); }