| -- Copyright 2017-2020 Free Software Foundation, Inc. |
| -- |
| -- This program is free software; you can redistribute it and/or modify |
| -- it under the terms of the GNU General Public License as published by |
| -- the Free Software Foundation; either version 3 of the License, or |
| -- (at your option) any later version. |
| -- |
| -- This program is distributed in the hope that it will be useful, |
| -- but WITHOUT ANY WARRANTY; without even the implied warranty of |
| -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| -- GNU General Public License for more details. |
| -- |
| -- You should have received a copy of the GNU General Public License |
| -- along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| with System; |
| |
| package Pck is |
| |
| package Top is |
| type Top_T is tagged private; |
| type Top_A is access Top_T'Class; |
| procedure Assign (Obj: in out Top_T; TV : Integer); |
| private |
| type Top_T is tagged record |
| N : Integer := 1; |
| A : Integer := 48; |
| end record; |
| end Top; |
| |
| package Middle is |
| type Middle_T is new Top.Top_T with private; |
| type Middle_A is access Middle_T'Class; |
| procedure Assign (Obj: in out Middle_T; MV : Character); |
| private |
| type Middle_T is new Top.Top_T with record |
| N : Character := 'a'; |
| end record; |
| end Middle; |
| |
| type Bottom_T is new Middle.Middle_T with record |
| N : Float := 4.0; |
| X : Integer := 6; |
| A : Character := 'J'; |
| end record; |
| type Bottom_A is access Bottom_T'Class; |
| procedure Assign (Obj: in out Bottom_T; BV : Float); |
| |
| procedure Do_Nothing (A : System.Address); |
| |
| type Integer_Array is array (Natural range <>) of Integer; |
| |
| package Dyn_Top is |
| type Dyn_Top_T (Disc : Natural) is tagged private; |
| type Dyn_Top_A is access Dyn_Top_T'Class; |
| procedure Assign (Obj: in out Dyn_Top_T; TV : Integer); |
| private |
| type Dyn_Top_T (Disc : Natural) is tagged record |
| S : Integer_Array (1 .. Disc) := (others => Disc); |
| N : Integer := 1; |
| A : Integer := 48; |
| end record; |
| end Dyn_Top; |
| |
| package Dyn_Middle is |
| type Dyn_Middle_T is new Dyn_Top.Dyn_Top_T with private; |
| type Dyn_Middle_A is access Dyn_Middle_T'Class; |
| procedure Assign (Obj: in out Dyn_Middle_T; MV : Character); |
| private |
| type Dyn_Middle_T is new Dyn_Top.Dyn_Top_T with record |
| N : Character := 'a'; |
| U : Integer := 42; |
| end record; |
| end Dyn_Middle; |
| |
| end Pck; |