================================================================================ null procedure ================================================================================ package P is procedure A is null; overriding procedure B is null; procedure B is null with Inline; end; -------------------------------------------------------------------------------- (compilation (compilation_unit (package_specification (name (identifier)) (null_procedure_declaration (procedure_specification (name (identifier)))) (null_procedure_declaration (overriding_indicator) (procedure_specification (name (identifier)))) (null_procedure_declaration (procedure_specification (name (identifier))) (aspect_specification (aspect_mark_list (aspect_association (aspect_mark (identifier))))))))) ================================================================================ procedures ================================================================================ package P is procedure A (P1, P2 : Integer; P3 : Float) with Inline; end; -------------------------------------------------------------------------------- (compilation (compilation_unit (package_specification (name (identifier)) (subprogram_declaration (subprogram_specification (procedure_specification (name (identifier)) (non_empty_parameter_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier) (identifier)) (name (identifier))) (parameter_specification (defining_identifier_list (identifier)) (name (identifier)))))))) (aspect_specification (aspect_mark_list (aspect_association (aspect_mark (identifier))))))))) ================================================================================ abstract procedures ================================================================================ package P is procedure B is abstract; overriding procedure C is abstract with Inline; end; -------------------------------------------------------------------------------- (compilation (compilation_unit (package_specification (name (identifier)) (subprogram_declaration (subprogram_specification (procedure_specification (name (identifier))))) (subprogram_declaration (overriding_indicator) (subprogram_specification (procedure_specification (name (identifier)))) (aspect_specification (aspect_mark_list (aspect_association (aspect_mark (identifier))))))))) ================================================================================ functions ================================================================================ package P is function F (A, B : Integer) return not null access Integer with Inline, Convention => C; end; -------------------------------------------------------------------------------- (compilation (compilation_unit (package_specification (name (identifier)) (subprogram_declaration (subprogram_specification (function_specification (name (identifier)) (parameter_and_result_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier) (identifier)) (name (identifier))))) (result_profile (access_definition (null_exclusion) (name (identifier))))))) (aspect_specification (aspect_mark_list (aspect_association (aspect_mark (identifier))) (aspect_association (aspect_mark (identifier)) (aspect_definition (expression (relation (simple_expression (term (factor (primary (name (identifier)))))))))))))))) ================================================================================ subprogram body ================================================================================ package body P is procedure A (B : Integer) is V : Integer; begin null; end A; end; -------------------------------------------------------------------------------- (compilation (compilation_unit (proper_body (package_body (name (identifier)) (non_empty_declarative_part (declarative_item_pragma (proper_body (subprogram_body (subprogram_specification (procedure_specification (name (identifier)) (non_empty_parameter_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier)) (name (identifier)))))))) (non_empty_declarative_part (declarative_item_pragma (object_declaration (defining_identifier_list (identifier)) (subtype_indication (name (identifier)))))) (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (null_statement))))) (name (identifier)))))))))) ================================================================================ Expression function membership ================================================================================ function F2 (A : Integer) return Boolean is (A not in Small_Integer); -------------------------------------------------------------------------------- (compilation (compilation_unit (expression_function_declaration (function_specification (name (identifier)) (parameter_and_result_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier)) (name (identifier))))) (result_profile (name (identifier))))) (aggregate (record_aggregate (record_component_association_list (record_component_association (expression (relation (simple_expression (term (factor (primary (name (identifier)))))) (membership_choice_list (membership_choice (simple_expression (term (factor (primary (name (identifier))))))))))))))))) ================================================================================ Expression function declare ================================================================================ function F2 (A : Integer) return Boolean is (declare B : constant Integer := A + 1; begin B); -------------------------------------------------------------------------------- (compilation (compilation_unit (expression_function_declaration (function_specification (name (identifier)) (parameter_and_result_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier)) (name (identifier))))) (result_profile (name (identifier))))) (aggregate (declare_expression (declare_item (object_declaration (defining_identifier_list (identifier)) (subtype_indication (name (identifier))) (assign_value (expression (relation (simple_expression (term (factor (primary (name (identifier))))) (binary_adding_operator) (term (factor (primary (numeric_literal)))))))))) (expression (relation (simple_expression (term (factor (primary (name (identifier))))))))))))) ================================================================================ Expression function raise ================================================================================ function F3 return Boolean is (raise Constraint_Error); -------------------------------------------------------------------------------- (compilation (compilation_unit (expression_function_declaration (function_specification (name (identifier)) (parameter_and_result_profile (result_profile (name (identifier))))) (aggregate (record_aggregate (record_component_association_list (record_component_association (expression (relation (raise_expression (name (identifier)))))))))))) ================================================================================ Expression function simple ================================================================================ function F4 return Boolean is (True); -------------------------------------------------------------------------------- (compilation (compilation_unit (expression_function_declaration (function_specification (name (identifier)) (parameter_and_result_profile (result_profile (name (identifier))))) (aggregate (record_aggregate (record_component_association_list (record_component_association (expression (relation (simple_expression (term (factor (primary (name (identifier))))))))))))))) ================================================================================ Expression function if ================================================================================ function F (A : Integer) return Boolean is (if A = 0 or A = 1 then True else False); -------------------------------------------------------------------------------- (compilation (compilation_unit (expression_function_declaration (function_specification (name (identifier)) (parameter_and_result_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier)) (name (identifier))))) (result_profile (name (identifier))))) (aggregate (conditional_expression (if_expression (expression (relation (simple_expression (term (factor (primary (name (identifier)))))) (relational_operator) (simple_expression (term (factor (primary (numeric_literal)))))) (relation (simple_expression (term (factor (primary (name (identifier)))))) (relational_operator) (simple_expression (term (factor (primary (numeric_literal))))))) (expression (relation (simple_expression (term (factor (primary (name (identifier)))))))) (expression (relation (simple_expression (term (factor (primary (name (identifier)))))))))))))) ================================================================================ Expression function if extra parenthesis ================================================================================ function F5 (A : Integer) return Boolean is ((if A = 0 then True else False)); -------------------------------------------------------------------------------- (compilation (compilation_unit (expression_function_declaration (function_specification (name (identifier)) (parameter_and_result_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier)) (name (identifier))))) (result_profile (name (identifier))))) (aggregate (record_aggregate (record_component_association_list (record_component_association (expression (relation (simple_expression (term (factor (primary (aggregate (conditional_expression (if_expression (expression (relation (simple_expression (term (factor (primary (name (identifier)))))) (relational_operator) (simple_expression (term (factor (primary (numeric_literal))))))) (expression (relation (simple_expression (term (factor (primary (name (identifier)))))))) (expression (relation (simple_expression (term (factor (primary (name (identifier)))))))))))))))))))))))) ================================================================================ Expression function case ================================================================================ function F (A : Integer) return Boolean is (case A + 1 is when 0 .. 1 | 3 .. 4 => True, when others => False); -------------------------------------------------------------------------------- (compilation (compilation_unit (expression_function_declaration (function_specification (name (identifier)) (parameter_and_result_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier)) (name (identifier))))) (result_profile (name (identifier))))) (aggregate (conditional_expression (case_expression (expression (relation (simple_expression (term (factor (primary (name (identifier))))) (binary_adding_operator) (term (factor (primary (numeric_literal))))))) (case_expression_alternative (discrete_choice_list (discrete_choice (range_g (simple_expression (term (factor (primary (numeric_literal))))) (simple_expression (term (factor (primary (numeric_literal))))))) (discrete_choice (range_g (simple_expression (term (factor (primary (numeric_literal))))) (simple_expression (term (factor (primary (numeric_literal)))))))) (expression (relation (simple_expression (term (factor (primary (name (identifier))))))))) (case_expression_alternative (discrete_choice_list (discrete_choice)) (expression (relation (simple_expression (term (factor (primary (name (identifier))))))))))))))) ================================================================================ Expression function quantified ================================================================================ function F (A : My_Array) return Boolean is (for some E of A => E = 1); -------------------------------------------------------------------------------- (compilation (compilation_unit (expression_function_declaration (function_specification (name (identifier)) (parameter_and_result_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier)) (name (identifier))))) (result_profile (name (identifier))))) (aggregate (quantified_expression (quantifier) (iterator_specification (identifier) (name (identifier))) (assoc_expression (expression (relation (simple_expression (term (factor (primary (name (identifier)))))) (relational_operator) (simple_expression (term (factor (primary (numeric_literal))))))))))))) ================================================================================ Operators ================================================================================ overriding function "<" (Left, Right : My_Int) return Boolean is begin return False; end "<"; -------------------------------------------------------------------------------- (compilation (compilation_unit (proper_body (subprogram_body (overriding_indicator) (subprogram_specification (function_specification (string_literal) (parameter_and_result_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier) (identifier)) (name (identifier))))) (result_profile (name (identifier)))))) (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (simple_return_statement (expression (relation (simple_expression (term (factor (primary (name (identifier))))))))))))) (string_literal)))))