tree-sitter-ada/test/corpus/statements.txt
Troy Brown 6c3dc1f0ae Correct parsing of discriminant constraints in allocators.
The existing grammar was causing discriminant constraints in
allocators to be incorrectly parsed as function calls.  This change
modifies the grammar to more accurately follow the grammar of the
language and corrects the issue.

Updated the test corpus to add additional allocator tests with
numerous subtype indications and qualified expressions for more
extensive testing.
2024-05-22 21:12:41 +02:00

855 lines
24 KiB
Plaintext

================================================================================
Untyped Constant
================================================================================
A : constant := 111;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(number_declaration
(identifier)
(expression
(term
(numeric_literal))))))
================================================================================
Factors
================================================================================
A : constant Integer := 2 + 8 * 3;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(object_declaration
(identifier)
(identifier)
(expression
(term
(numeric_literal))
(binary_adding_operator)
(term
(numeric_literal)
(multiplying_operator)
(numeric_literal))))))
================================================================================
While
================================================================================
procedure P is
begin
while True loop
exit;
exit when A > 0;
end loop;
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(loop_statement
(iteration_scheme
(expression
(term
(identifier))))
(exit_statement)
(exit_statement
(expression
(term
(identifier))
(relational_operator)
(term
(numeric_literal)))))))))
================================================================================
For loops
================================================================================
procedure P is
begin
for E in Pkg.Arr'Range loop
goto end_loop;
<<end_loop>>
end loop;
for E of reverse Arr loop
delay 1.0;
end loop;
end P;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(loop_statement
(iteration_scheme
(loop_parameter_specification
(identifier)
(range_g
(selected_component
(identifier)
(identifier))
(tick)
(range_attribute_designator))))
(goto_statement
(identifier))
(label
(identifier)))
(loop_statement
(iteration_scheme
(iterator_specification
(identifier)
(identifier)))
(delay_relative_statement
(expression
(term
(numeric_literal))))))
(identifier))))
================================================================================
Named loop
================================================================================
procedure P is
begin
Main:
loop
exit Main;
end loop Main;
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(loop_statement
(loop_label
(identifier))
(exit_statement
(identifier))
(identifier))))))
================================================================================
Return
================================================================================
function F return Boolean is
begin
return True;
return A : My_Rec := (F => 1) do
null;
end return;
return Y : Integer
with Address => X'Address
do
null;
end return;
end F;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(function_specification
(identifier)
(result_profile
(identifier)))
(handled_sequence_of_statements
(simple_return_statement
(expression
(term
(identifier))))
(extended_return_statement
(extended_return_object_declaration
(identifier)
(identifier)
(expression
(term
(record_aggregate
(record_component_association_list
(component_choice_list
(identifier))
(expression
(term
(numeric_literal))))))))
(handled_sequence_of_statements
(null_statement)))
(extended_return_statement
(extended_return_object_declaration
(identifier)
(identifier)
(aspect_specification
(aspect_mark_list
(aspect_association
(identifier)
(expression
(term
(identifier)
(tick)
(attribute_designator
(identifier))))))))
(handled_sequence_of_statements
(null_statement))))
(identifier))))
================================================================================
Procedure call
================================================================================
procedure P (A : Integer) is
begin
P2 (1, False);
end P;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier)
(formal_part
(parameter_specification
(identifier)
(identifier))))
(handled_sequence_of_statements
(procedure_call_statement
(identifier)
(actual_parameter_part
(parameter_association
(expression
(term
(numeric_literal))))
(parameter_association
(expression
(term
(identifier)))))))
(identifier))))
================================================================================
Raise exception
================================================================================
procedure P is
begin
raise Constraint_Error;
raise Constraint_Error with "msg";
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(raise_statement
(identifier))
(raise_statement
(identifier)
(expression
(term
(string_literal))))))))
================================================================================
Function calls
================================================================================
procedure P is
A : Integer;
begin
A := Func (B => 1);
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(non_empty_declarative_part
(object_declaration
(identifier)
(identifier)))
(handled_sequence_of_statements
(assignment_statement
(identifier)
(expression
(term
(function_call
(identifier)
(actual_parameter_part
(parameter_association
(component_choice_list
(identifier))
(expression
(term
(numeric_literal)))))))))))))
================================================================================
if statement
================================================================================
procedure P is
begin
if A = 0 or else B = 1 then
declare
begin
null;
end;
elsif A = 1 then
declare
C : Integer;
begin
null;
exception
when Constraint_Error => null;
end;
else
begin
null;
end;
end if;
end P;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(if_statement
(expression
(term
(identifier))
(relational_operator)
(term
(numeric_literal))
(term
(identifier))
(relational_operator)
(term
(numeric_literal)))
(block_statement
(handled_sequence_of_statements
(null_statement)))
(elsif_statement_item
(expression
(term
(identifier))
(relational_operator)
(term
(numeric_literal)))
(block_statement
(non_empty_declarative_part
(object_declaration
(identifier)
(identifier)))
(handled_sequence_of_statements
(null_statement)
(exception_handler
(exception_choice_list
(exception_choice
(identifier)))
(null_statement)))))
(block_statement
(handled_sequence_of_statements
(null_statement)))))
(identifier))))
================================================================================
Case statement
================================================================================
procedure P is
begin
case Func(A => 1) is
when '1' .. '2' =>
null;
when '3' | '4' =>
null;
end case;
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(case_statement
(expression
(term
(function_call
(identifier)
(actual_parameter_part
(parameter_association
(component_choice_list
(identifier))
(expression
(term
(numeric_literal))))))))
(case_statement_alternative
(discrete_choice_list
(discrete_choice
(range_g
(term
(character_literal))
(term
(character_literal)))))
(null_statement))
(case_statement_alternative
(discrete_choice_list
(discrete_choice
(expression
(term
(character_literal))))
(discrete_choice
(expression
(term
(character_literal)))))
(null_statement)))))))
================================================================================
Allocators
================================================================================
procedure P is
begin
-- subtype indication
A := new T;
A := new not null T;
A := new T'Base;
A := new T (1 .. 10, 1 .. 20);
A := new T (100);
A := new T (F => 100);
A := new T (F);
-- qualified expression
A := new T'(0, 255, 0);
A := new T'(F => 1);
A := new T'(1 .. 10 => (1 .. 20 => 0.0));
A := new T'(55);
A := new T'(F);
A := new T'Base'(5);
-- subpool specification
A := new (pkg.pool) T'((F => 1));
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
name: (identifier))
(comment)
(handled_sequence_of_statements
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
subtype_mark: (identifier)))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
(null_exclusion)
subtype_mark: (identifier)))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
subtype_mark: (identifier)
subtype_mark: (tick)
subtype_mark: (attribute_designator
(identifier))))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
subtype_mark: (identifier)
(index_constraint
(range_g
(term
(numeric_literal))
(term
(numeric_literal)))
(range_g
(term
(numeric_literal))
(term
(numeric_literal))))))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
subtype_mark: (identifier)
(discriminant_constraint
(expression
(term
(numeric_literal))))))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
subtype_mark: (identifier)
(discriminant_constraint
(discriminant_association
(identifier)
(expression
(term
(numeric_literal)))))))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
subtype_mark: (identifier)
(discriminant_constraint
(expression
(term
name: (identifier))))))))
(comment)
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
(qualified_expression
subtype_name: (identifier)
(tick)
(positional_array_aggregate
(expression
(term
(numeric_literal)))
(expression
(term
(numeric_literal)))
(expression
(term
(numeric_literal)))))))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
(qualified_expression
subtype_name: (identifier)
(tick)
(record_aggregate
(record_component_association_list
(component_choice_list
(identifier))
(expression
(term
(numeric_literal))))))))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
(qualified_expression
subtype_name: (identifier)
(tick)
(named_array_aggregate
(array_component_association
(discrete_choice_list
(discrete_choice
(range_g
(term
(numeric_literal))
(term
(numeric_literal)))))
(expression
(term
(named_array_aggregate
(array_component_association
(discrete_choice_list
(discrete_choice
(range_g
(term
(numeric_literal))
(term
(numeric_literal)))))
(expression
(term
(numeric_literal))))))))))))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
(qualified_expression
subtype_name: (identifier)
(tick)
(expression
(term
(numeric_literal))))))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
(qualified_expression
subtype_name: (identifier)
(tick)
(expression
(term
name: (identifier))))))))
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
(qualified_expression
subtype_name: (identifier)
subtype_name: (tick)
subtype_name: (attribute_designator
(identifier))
(tick)
(expression
(term
(numeric_literal))))))))
(comment)
(assignment_statement
variable_name: (identifier)
(expression
(term
(allocator
(subpool_specification
subpool_handle_name: (selected_component
prefix: (identifier)
selector_name: (identifier)))
(qualified_expression
subtype_name: (identifier)
(tick)
(expression
(term
(record_aggregate
(record_component_association_list
(component_choice_list
(identifier))
(expression
(term
(numeric_literal))))))))))))))))
================================================================================
Filtered for loops
================================================================================
procedure P is
begin
for E of Some_Array when E /= 0 loop
null;
end loop;
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(loop_statement
(iteration_scheme
(iterator_specification
(identifier)
(identifier)
(iterator_filter
(expression
(term
(identifier))
(relational_operator)
(term
(numeric_literal))))))
(null_statement))))))
================================================================================
Assignment target name
================================================================================
procedure P is
begin
Some_Very_Long.And_Complex (Expression) := @ + 1;
Another_Very_Long.And_Complex (Expression) := Function_Call (@);
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(assignment_statement
(function_call
(selected_component
(identifier)
(identifier))
(actual_parameter_part
(parameter_association
(expression
(term
(identifier))))))
(expression
(term
(target_name))
(binary_adding_operator)
(term
(numeric_literal))))
(assignment_statement
(function_call
(selected_component
(identifier)
(identifier))
(actual_parameter_part
(parameter_association
(expression
(term
(identifier))))))
(expression
(term
(function_call
(identifier)
(actual_parameter_part
(parameter_association
(expression
(term
(target_name)))))))))))))
================================================================================
if-expressions
================================================================================
procedure P is
begin
S := new String'((if N /= "" then N else "12"));
S := new String'(if N /= "" then N else "12");
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(assignment_statement
(identifier)
(expression
(term
(allocator
(qualified_expression
(identifier)
(tick)
(expression
(term
(if_expression
(expression
(term
(identifier))
(relational_operator)
(term
(string_literal)))
(expression
(term
(identifier)))
(expression
(term
(string_literal)))))))))))
(assignment_statement
(identifier)
(expression
(term
(allocator
(qualified_expression
(identifier)
(tick)
(if_expression
(expression
(term
(identifier))
(relational_operator)
(term
(string_literal)))
(expression
(term
(identifier)))
(expression
(term
(string_literal)))))))))))))
================================================================================
Re-raise
================================================================================
procedure P is
begin
null;
exception
when others =>
Proc;
pragma Assert (True);
raise;
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(null_statement)
(exception_handler
(exception_choice_list
(exception_choice))
(procedure_call_statement
(identifier))
(pragma_g
(identifier)
(pragma_argument_association
(expression
(term
(identifier)))))
(raise_statement))))))