3 with Ada
.Finalization
; use Ada
.Finalization
;
9 type Ctrl
is new Controlled
with null record;
10 type Integer_Ptr
is access all Integer;
11 type String_Ptr
is access all String;
13 function Func
(Val
: Integer) return Ctrl
is
14 begin return Result
: Ctrl
; end Func
;
16 function Func
(Val
: String) return Ctrl
is
17 begin return Result
: Ctrl
; end Func
;
19 type Rec_1
(Val
: Integer) is record
20 Comp
: Ctrl
:= Func
(Val
);
23 type Rec_2
(Val
: access Integer) is record
24 Comp
: Ctrl
:= Func
(Val
.all);
27 type Rec_3
(Val
: Integer_Ptr
) is record
28 Comp
: Ctrl
:= Func
(Val
.all);
31 type Rec_4
(Val
: access String) is record
32 Comp
: Ctrl
:= Func
(Val
.all);
35 type Rec_5
(Val
: String_Ptr
) is record
36 Comp
: Ctrl
:= Func
(Val
.all);
39 Int_Heap
: constant Integer_Ptr
:= new Integer'(Int_Input);
40 Int_Stack : aliased Integer := Int_Input;
41 Str_Heap : constant String_Ptr := new String'(Str_Input
);
42 Str_Stack
: aliased String := Str_Input
;
44 Obj_1
: constant Rec_1
:= (Val
=> Int_Input
, others => <>);
46 Obj_2
: constant Rec_2
:= (Val
=> Int_Heap
, others => <>);
47 Obj_3
: constant Rec_2
:= (Val
=> Int_Stack
'Access, others => <>);
48 Obj_4
: constant Rec_2
:= (Val
=> new Integer'(Int_Input), others => <>);
50 Obj_5 : constant Rec_3 := (Val => Int_Heap, others => <>);
51 Obj_6 : constant Rec_3 := (Val => Int_Stack'Access, others => <>);
52 Obj_7 : constant Rec_3 := (Val => new Integer'(Int_Input
), others => <>);
54 Obj_8
: constant Rec_4
:= (Val
=> Str_Heap
, others => <>);
55 Obj_9
: constant Rec_4
:= (Val
=> Str_Stack
'Access, others => <>);
56 Obj_10
: constant Rec_4
:= (Val
=> new String'(Str_Input), others => <>);
58 Obj_11 : constant Rec_5 := (Val => Str_Heap, others => <>);
59 Obj_12 : constant Rec_5 := (Val => Str_Stack'Access, others => <>);
60 Obj_13 : constant Rec_5 := (Val => new String'(Str_Input
), others => <>);