tree-sitter-ada/test/corpus/protected.txt
Piotr Trojanek 68040e7ae8 Accept entry families with no parameters
(entry_body): directly parse entry_body_formal_part

In Ada grammar the entry_body_formal_part both the
entry_index_specification and the parameter_profile are optional
(because they describe both simple entries and entry families,
both with and without parameters). However, tree-sitter does not
allow rules that match empty strings.

The simplest solution is to directly encode entry_body_formal_part
within the entry_body.

add test.
2024-01-05 08:29:29 +01:00

138 lines
3.9 KiB
Plaintext

================================================================================
protected objects
================================================================================
package body P is
protected Obj is
procedure Proc;
function Func return Boolean;
entry E;
entry E2 (Color)(A : Integer);
entry E3 (1 .. 1);
private
Field : Integer;
end Obj;
protected body Obj is
procedure Proc is begin abort T; end;
function Func return Boolean is begin return False; end;
entry E when Field > 0 is
begin
requeue E with abort;
end E;
entry E2 (for C in Color)(A : Integer) when True is
begin
null;
end E2;
entry E3 (for I in 1 .. 1) when True is
begin
null;
end E3;
end Obj;
end;
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(package_body
(identifier)
(non_empty_declarative_part
(object_declaration
(single_protected_declaration
(identifier)
(protected_definition
(subprogram_declaration
(procedure_specification
(identifier)))
(subprogram_declaration
(function_specification
(identifier)
(result_profile
(identifier))))
(entry_declaration
(identifier))
(entry_declaration
(identifier)
(identifier)
(formal_part
(parameter_specification
(identifier)
(identifier))))
(entry_declaration
(identifier)
(range_g
(term
(numeric_literal))
(term
(numeric_literal))))
(component_declaration
(identifier)
(component_definition
(identifier)))
(identifier))))
(protected_body
(identifier)
(subprogram_body
(procedure_specification
(identifier))
(handled_sequence_of_statements
(abort_statement
(identifier))))
(subprogram_body
(function_specification
(identifier)
(result_profile
(identifier)))
(handled_sequence_of_statements
(simple_return_statement
(expression
(term
(identifier))))))
(entry_body
(identifier)
(entry_barrier
(expression
(term
(identifier))
(relational_operator)
(term
(numeric_literal))))
(handled_sequence_of_statements
(requeue_statement
(identifier)))
(identifier))
(entry_body
(identifier)
(entry_index_specification
(identifier)
(identifier))
(formal_part
(parameter_specification
(identifier)
(identifier)))
(entry_barrier
(expression
(term
(identifier))))
(handled_sequence_of_statements
(null_statement))
(identifier))
(entry_body
(identifier)
(entry_index_specification
(identifier)
(range_g
(term
(numeric_literal))
(term
(numeric_literal))))
(entry_barrier
(expression
(term
(identifier))))
(handled_sequence_of_statements
(null_statement))
(identifier))
(identifier))))))