================================================================================
subtype indication (subtype mark: identifier)
================================================================================

procedure P is
begin
   A := new T;
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (assignment_statement
          variable_name: (identifier)
          (expression
            (term
              (allocator
                subtype_mark: (identifier)))))))))

================================================================================
subtype indication (subtype mark: selected component)
================================================================================

procedure P is
begin
   A := new X.T;
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (assignment_statement
          variable_name: (identifier)
          (expression
            (term
              (allocator
                subtype_mark: (selected_component
                  prefix: (identifier)
                  selector_name: (identifier))))))))))

================================================================================
subtype indication (subtype mark: attribute reference)
================================================================================

procedure P is
begin
   A := new T'Base;
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (assignment_statement
          variable_name: (identifier)
          (expression
            (term
              (allocator
                subtype_mark: (identifier)
                subtype_mark: (tick)
                subtype_mark: (attribute_designator
                  (identifier))))))))))

================================================================================
subtype indication (null exclusion)
================================================================================

procedure P is
begin
   A := new not null T;
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (assignment_statement
          variable_name: (identifier)
          (expression
            (term
              (allocator
                (null_exclusion)
                subtype_mark: (identifier)))))))))

================================================================================
subtype indication (constraint: index constraint)
================================================================================

procedure P is
begin
   A := new T (1 .. 10, 1 .. 20);
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (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))))))))))))

================================================================================
subtype indication (constraint: discriminant constraint - numeric literal)
================================================================================

procedure P is
begin
   A := new T (100);
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (assignment_statement
          variable_name: (identifier)
          (expression
            (term
              (allocator
                subtype_mark: (identifier)
                (discriminant_constraint
                  (expression
                    (term
                      (numeric_literal))))))))))))

================================================================================
subtype indication (constraint: discriminant constraint - discriminant association)
================================================================================

procedure P is
begin
   A := new T (F => 100);
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (assignment_statement
          variable_name: (identifier)
          (expression
            (term
              (allocator
                subtype_mark: (identifier)
                (discriminant_constraint
                  (discriminant_association
                    (identifier)
                    (expression
                      (term
                        (numeric_literal)))))))))))))

================================================================================
subtype indication (constraint: discriminant constraint - identifier)
================================================================================

procedure P is
begin
   A := new T (F);
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (assignment_statement
          variable_name: (identifier)
          (expression
            (term
              (allocator
                subtype_mark: (identifier)
                (discriminant_constraint
                  (expression
                    (term
                      name: (identifier))))))))))))

================================================================================
qualified expression (aggregate: positional array aggregate)
================================================================================

procedure P is
begin
   A := new T'(0, 255, 0);
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (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)))))))))))))

================================================================================
qualified expression (aggregate: record aggregate)
================================================================================

procedure P is
begin
   A := new T'(F => 1);
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (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))))))))))))))

================================================================================
qualified expression (aggregate: named array aggregate)
================================================================================

procedure P is
begin
   A := new T'(1 .. 10 => (1 .. 20 => 0.0));
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (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))))))))))))))))))

================================================================================
qualified expression (expression: numeric literal)
================================================================================

procedure P is
begin
   A := new T'(55);
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (assignment_statement
          variable_name: (identifier)
          (expression
            (term
              (allocator
                (qualified_expression
                  subtype_name: (identifier)
                  (tick)
                  (expression
                    (term
                      (numeric_literal))))))))))))

================================================================================
qualified expression (expression: identifier)
================================================================================

procedure P is
begin
   A := new T'(F);
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (assignment_statement
          variable_name: (identifier)
          (expression
            (term
              (allocator
                (qualified_expression
                  subtype_name: (identifier)
                  (tick)
                  (expression
                    (term
                      name: (identifier))))))))))))

================================================================================
qualified expression (subtype mark: attribute reference)
================================================================================

procedure P is
begin
   A := new T'Base'(5);
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (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))))))))))))

================================================================================
subpool specification
================================================================================

procedure P is
begin
   A := new (pkg.pool) T;
   A := new (pkg.pool) T'(55);
end;

--------------------------------------------------------------------------------

(compilation
  (compilation_unit
    (subprogram_body
      (procedure_specification
        name: (identifier))
      (handled_sequence_of_statements
        (assignment_statement
          variable_name: (identifier)
          (expression
            (term
              (allocator
                (subpool_specification
                  subpool_handle_name: (selected_component
                    prefix: (identifier)
                    selector_name: (identifier)))
                subtype_mark: (identifier)))))
        (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
                      (numeric_literal))))))))))))
