================================================================================ While ================================================================================ procedure P is begin while True loop exit; exit when A > 0; end loop; end; -------------------------------------------------------------------------------- (compilation (compilation_unit (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier))) (handled_sequence_of_statements (sequence_of_statements (statement (compound_statement (loop_statement (iteration_scheme (expression (relation (simple_expression (term (factor (primary (identifier)))))))) (sequence_of_statements (statement (simple_statement (exit_statement))) (statement (simple_statement (exit_statement (expression (relation (simple_expression (term (factor (primary (identifier))))) (relational_operator) (simple_expression (term (factor (primary (numeric_literal)))))))))))))))))))) ================================================================================ For loops ================================================================================ procedure P is begin for E in Pkg.Arr'Range loop goto end_loop; <> end loop; for E of reverse Arr loop delay 1.0; end loop; end P; -------------------------------------------------------------------------------- (compilation (compilation_unit (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier))) (handled_sequence_of_statements (sequence_of_statements (statement (compound_statement (loop_statement (iteration_scheme (iterator_specification (identifier) (identifier) (attribute_reference (identifier) (tick) (attribute_designator (identifier))))) (sequence_of_statements (statement (simple_statement (goto_statement (identifier)))) (label (identifier)))))) (statement (compound_statement (loop_statement (iteration_scheme (iterator_specification (identifier) (identifier))) (sequence_of_statements (statement (simple_statement (delay_statement (delay_relative_statement (expression (relation (simple_expression (term (factor (primary (numeric_literal))))))))))))))))) (identifier))))) ================================================================================ Named loop ================================================================================ procedure P is begin Main: loop exit Main; end loop Main; end; -------------------------------------------------------------------------------- (compilation (compilation_unit (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier))) (handled_sequence_of_statements (sequence_of_statements (statement (compound_statement (loop_statement (loop_label (identifier)) (sequence_of_statements (statement (simple_statement (exit_statement (identifier))))) (identifier)))))))))) ================================================================================ Return ================================================================================ function F return Boolean is begin return True; return A : My_Rec := (F => 1) do null; end return; end F; -------------------------------------------------------------------------------- (compilation (compilation_unit (proper_body (subprogram_body (subprogram_specification (function_specification (identifier) (parameter_and_result_profile (result_profile (identifier))))) (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (simple_return_statement (expression (relation (simple_expression (term (factor (primary (identifier)))))))))) (statement (compound_statement (extended_return_statement (extended_return_object_declaration (identifier) (return_subtype_indication (subtype_indication (identifier))) (assign_value (expression (relation (simple_expression (term (factor (primary (aggregate (record_aggregate (record_component_association_list (component_choice_list (identifier)) (expression (relation (simple_expression (term (factor (primary (numeric_literal)))))))))))))))))) (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (null_statement)))))))))) (identifier))))) ================================================================================ Procedure call ================================================================================ procedure P (A : Integer) is begin P2 (1, False); end P; -------------------------------------------------------------------------------- (compilation (compilation_unit (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier) (non_empty_parameter_profile (formal_part (parameter_specification_list (parameter_specification (defining_identifier_list (identifier)) (identifier))))))) (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (procedure_call_statement (identifier) (actual_parameter_part (parameter_association (expression (relation (simple_expression (term (factor (primary (numeric_literal)))))))) (parameter_association (expression (relation (simple_expression (term (factor (primary (identifier)))))))))))))) (identifier))))) ================================================================================ Raise exception ================================================================================ procedure P is begin raise Constraint_Error; raise Constraint_Error with "msg"; end; -------------------------------------------------------------------------------- (compilation (compilation_unit (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier))) (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (raise_statement (identifier)))) (statement (simple_statement (raise_statement (identifier) (expression (relation (simple_expression (term (factor (primary (string_literal)))))))))))))))) ================================================================================ Function calls ================================================================================ procedure P is A : Integer; begin A := Func (B => 1); end; -------------------------------------------------------------------------------- (compilation (compilation_unit (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier))) (non_empty_declarative_part (declarative_item_pragma (object_declaration (defining_identifier_list (identifier)) (subtype_indication (identifier))))) (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (assignment_statement (identifier) (assign_value (expression (relation (simple_expression (term (factor (primary (function_call (identifier) (actual_parameter_part (parameter_association (component_choice_list (identifier)) (expression (relation (simple_expression (term (factor (primary (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 (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier))) (handled_sequence_of_statements (sequence_of_statements (statement (compound_statement (if_statement (expression (relation (simple_expression (term (factor (primary (identifier))))) (relational_operator) (simple_expression (term (factor (primary (numeric_literal)))))) (relation (simple_expression (term (factor (primary (identifier))))) (relational_operator) (simple_expression (term (factor (primary (numeric_literal))))))) (sequence_of_statements (statement (compound_statement (block_statement (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (null_statement))))))))) (elsif_statement_item (expression (relation (simple_expression (term (factor (primary (identifier))))) (relational_operator) (simple_expression (term (factor (primary (numeric_literal))))))) (sequence_of_statements (statement (compound_statement (block_statement (non_empty_declarative_part (declarative_item_pragma (object_declaration (defining_identifier_list (identifier)) (subtype_indication (identifier))))) (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (null_statement)))) (exception_handler_list (exception_handler (exception_choice_list (exception_choice (identifier))) (sequence_of_statements (statement (simple_statement (null_statement)))))))))))) (sequence_of_statements (statement (compound_statement (block_statement (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (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 (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier))) (handled_sequence_of_statements (sequence_of_statements (statement (compound_statement (case_statement (expression (relation (simple_expression (term (factor (primary (function_call (identifier) (actual_parameter_part (parameter_association (component_choice_list (identifier)) (expression (relation (simple_expression (term (factor (primary (numeric_literal)))))))))))))))) (case_statement_alternative (discrete_choice_list (discrete_choice (range_g (simple_expression (term (factor (primary (character_literal))))) (simple_expression (term (factor (primary (character_literal)))))))) (sequence_of_statements (statement (simple_statement (null_statement))))) (case_statement_alternative (discrete_choice_list (discrete_choice (expression (relation (simple_expression (term (factor (primary (character_literal)))))))) (discrete_choice (expression (relation (simple_expression (term (factor (primary (character_literal))))))))) (sequence_of_statements (statement (simple_statement (null_statement)))))))))))))) ================================================================================ Allocators ================================================================================ procedure P is begin A := new T; A := new (pkg.pool) T'((F => 1)); end; -------------------------------------------------------------------------------- (compilation (compilation_unit (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier))) (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (assignment_statement (identifier) (assign_value (expression (relation (simple_expression (term (factor (primary (allocator (subtype_indication_paren_constraint (identifier))))))))))))) (statement (simple_statement (assignment_statement (identifier) (assign_value (expression (relation (simple_expression (term (factor (primary (allocator (subpool_specification (identifier) (identifier)) (subtype_indication_paren_constraint (qualified_expression (identifier) (tick) (expression (relation (simple_expression (term (factor (primary (aggregate (record_aggregate (record_component_association_list (component_choice_list (identifier)) (expression (relation (simple_expression (term (factor (primary (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 (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier))) (handled_sequence_of_statements (sequence_of_statements (statement (compound_statement (loop_statement (iteration_scheme (iterator_specification (identifier) (identifier) (iterator_filter (expression (relation (simple_expression (term (factor (primary (identifier))))) (relational_operator) (simple_expression (term (factor (primary (numeric_literal)))))))))) (sequence_of_statements (statement (simple_statement (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 (proper_body (subprogram_body (subprogram_specification (procedure_specification (identifier))) (handled_sequence_of_statements (sequence_of_statements (statement (simple_statement (assignment_statement (identifier) (function_call (identifier) (actual_parameter_part (parameter_association (expression (relation (simple_expression (term (factor (primary (identifier)))))))))) (assign_value (expression (relation (simple_expression (term (factor (primary (target_name)))) (binary_adding_operator) (term (factor (primary (numeric_literal))))))))))) (statement (simple_statement (assignment_statement (identifier) (function_call (identifier) (actual_parameter_part (parameter_association (expression (relation (simple_expression (term (factor (primary (identifier)))))))))) (assign_value (expression (relation (simple_expression (term (factor (primary (function_call (identifier) (actual_parameter_part (parameter_association (expression (relation (simple_expression (term (factor (primary (target_name))))))))))))))))))))))))))