(extension with aggregates): allow a single positional item
This commit is contained in:
parent
c61d74d03a
commit
a63a4f53d3
15
grammar.js
15
grammar.js
|
|
@ -690,7 +690,7 @@ module.exports = grammar({
|
|||
'(',
|
||||
$.expression,
|
||||
reservedWord('with'),
|
||||
$.record_component_association_list,
|
||||
$._record_component_association_list_or_expression,
|
||||
')',
|
||||
),
|
||||
record_delta_aggregate: $ => seq(
|
||||
|
|
@ -698,7 +698,7 @@ module.exports = grammar({
|
|||
$.expression,
|
||||
reservedWord('with'),
|
||||
reservedWord('delta'),
|
||||
$.record_component_association_list,
|
||||
$._record_component_association_list_or_expression,
|
||||
')',
|
||||
),
|
||||
array_delta_aggregate: $ => choice(
|
||||
|
|
@ -730,7 +730,7 @@ module.exports = grammar({
|
|||
// * expression, {expression_or_named}
|
||||
// expression_or_named:: expression | choice => expression
|
||||
// * named {, named}
|
||||
record_component_association_list: $ => choice(
|
||||
record_component_association_list: $ => choice( // RM 4.3.1
|
||||
seq(
|
||||
reservedWord('null'),
|
||||
reservedWord('record'),
|
||||
|
|
@ -745,6 +745,15 @@ module.exports = grammar({
|
|||
),
|
||||
comma_separated_list_of($._named_record_component_association),
|
||||
),
|
||||
|
||||
// We have modified record_component_association_list to accept a
|
||||
// minimum of two positional expressions. However, in extension
|
||||
// aggregates it is valid to have just "(parent with value)"
|
||||
_record_component_association_list_or_expression: $ => choice(
|
||||
$.record_component_association_list,
|
||||
$.expression,
|
||||
),
|
||||
|
||||
_named_record_component_association: $ => seq( // adapted from ARM 4.3.1
|
||||
$.component_choice_list,
|
||||
'=>',
|
||||
|
|
|
|||
|
|
@ -3531,7 +3531,7 @@
|
|||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "record_component_association_list"
|
||||
"name": "_record_component_association_list_or_expression"
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
|
|
@ -3584,7 +3584,7 @@
|
|||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "record_component_association_list"
|
||||
"name": "_record_component_association_list_or_expression"
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
|
|
@ -3843,6 +3843,19 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"_record_component_association_list_or_expression": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "record_component_association_list"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "expression"
|
||||
}
|
||||
]
|
||||
},
|
||||
"_named_record_component_association": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
|
|
|
|||
22352
src/parser.c
22352
src/parser.c
File diff suppressed because it is too large
Load Diff
|
|
@ -458,3 +458,52 @@ variants 2
|
|||
(identifier)
|
||||
(component_definition
|
||||
(identifier)))))))))))))
|
||||
|
||||
================================================================================
|
||||
Extension with aggregate
|
||||
================================================================================
|
||||
|
||||
procedure Proc is
|
||||
Null : constant Rec := (Parent with A => null);
|
||||
Null2 : constant Rec := (Parent with null);
|
||||
begin
|
||||
null;
|
||||
end;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(compilation
|
||||
(compilation_unit
|
||||
(subprogram_body
|
||||
(procedure_specification
|
||||
(identifier))
|
||||
(non_empty_declarative_part
|
||||
(object_declaration
|
||||
(identifier)
|
||||
(identifier)
|
||||
(expression
|
||||
(term
|
||||
(extension_aggregate
|
||||
(expression
|
||||
(term
|
||||
(identifier)))
|
||||
(record_component_association_list
|
||||
(component_choice_list
|
||||
(identifier))
|
||||
(expression
|
||||
(term
|
||||
(primary_null))))))))
|
||||
(object_declaration
|
||||
(identifier)
|
||||
(identifier)
|
||||
(expression
|
||||
(term
|
||||
(extension_aggregate
|
||||
(expression
|
||||
(term
|
||||
(identifier)))
|
||||
(expression
|
||||
(term
|
||||
(primary_null))))))))
|
||||
(handled_sequence_of_statements
|
||||
(null_statement)))))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user