1-- C83024A.ADA
2
3--                             Grant of Unlimited Rights
4--
5--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
6--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
7--     unlimited rights in the software and documentation contained herein.
8--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
9--     this public release, the Government intends to confer upon all
10--     recipients unlimited rights  equal to those held by the Government.
11--     These rights include rights to use, duplicate, release or disclose the
12--     released technical data and computer software in whole or in part, in
13--     any manner and for any purpose whatsoever, and to have or permit others
14--     to do so.
15--
16--                                    DISCLAIMER
17--
18--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
19--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
20--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
21--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
22--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
23--     PARTICULAR PURPOSE OF SAID MATERIAL.
24--*
25-- OBJECTIVE:
26--     CHECK THAT A DECLARATION IN A DECLARATIVE REGION FOR A GENERIC
27--     PACKAGE HIDES AN OUTER DECLARATION OF A HOMOGRAPH. ALSO CHECK
28--     THAT THE OUTER DECLARATION IS DIRECTLY VISIBLE IN BOTH
29--     DECLARATIVE REGIONS BEFORE THE DECLARATION OF THE INNER HOMOGRAPH
30--     AND THE OUTER DECLARATION IS VISIBLE BY SELECTION AFTER THE INNER
31--     HOMOGRAH DECLARATION.
32
33-- HISTORY:
34--     BCB 08/30/88  CREATED ORIGINAL TEST.
35
36WITH REPORT; USE REPORT;
37
38PROCEDURE C83024A IS
39
40     GENERIC
41          TYPE T IS PRIVATE;
42          X : T;
43     FUNCTION GEN_FUN RETURN T;
44
45     FUNCTION GEN_FUN RETURN T IS
46     BEGIN
47          RETURN X;
48     END GEN_FUN;
49
50BEGIN
51     TEST ("C83024A", "CHECK THAT A DECLARATION IN A DECLARATIVE " &
52                      "REGION FOR A GENERIC PACKAGE HIDES AN OUTER " &
53                      "DECLARATION OF A HOMOGRAPH");
54
55     ONE:
56     DECLARE
57          A : INTEGER := IDENT_INT(2);
58          B : INTEGER := A;
59          OBJ : INTEGER := IDENT_INT(3);
60
61          GENERIC
62               X : IN INTEGER := A;
63               A : IN OUT INTEGER;
64          PACKAGE INNER IS
65               C : INTEGER := A;
66          END INNER;
67
68          PACKAGE BODY INNER IS
69          BEGIN
70               IF A /= IDENT_INT(3) THEN
71                    FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 10");
72               END IF;
73
74               IF ONE.A /= IDENT_INT(2) THEN
75                    FAILED ("INCORRECT VALUE FOR OUTER HOMOGRAPH - 11");
76               END IF;
77
78               IF ONE.B /= IDENT_INT(2) THEN
79                    FAILED ("INCORRECT VALUE FOR OUTER VARIABLE - 12");
80               END IF;
81
82               IF C /= IDENT_INT(3) THEN
83                    FAILED ("INCORRECT VALUE FOR INNER VARIABLE - 13");
84               END IF;
85
86               IF X /= IDENT_INT(2) THEN
87                    FAILED ("INCORRECT VALUE PASSED IN - 14");
88               END IF;
89
90               IF EQUAL(1,1) THEN
91                    A := IDENT_INT(4);
92               ELSE
93                    A := 1;
94               END IF;
95          END INNER;
96
97          PACKAGE NEW_INNER IS NEW INNER (A => OBJ);
98
99     BEGIN  -- ONE
100          IF OBJ /= IDENT_INT(4) THEN
101               FAILED ("INCORRECT VALUE PASSED OUT - 15");
102          END IF;
103     END ONE;
104
105     TWO:
106     DECLARE            -- AFTER THE SPECIFICATION OF PACKAGE.
107          A : INTEGER := IDENT_INT(2);
108
109          GENERIC
110               X : IN OUT INTEGER;
111          PACKAGE INNER IS
112               A : INTEGER := IDENT_INT(3);
113          END INNER;
114
115          B : INTEGER := A;
116
117          PACKAGE BODY INNER IS
118               C : INTEGER := TWO.A;
119          BEGIN
120               IF A /= IDENT_INT(3) THEN
121                    FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 20");
122               END IF;
123
124               IF TWO.A /= IDENT_INT(2) THEN
125                    FAILED ("INCORRECT VALUE FOR OUTER HOMOGRAPH - 21");
126               END IF;
127
128               IF TWO.B /= IDENT_INT(2) THEN
129                    FAILED ("INCORRECT VALUE FOR OUTER VARIABLE - 22");
130               END IF;
131
132               IF C /= IDENT_INT(2) THEN
133                    FAILED ("INCORRECT VALUE FOR INNER VARIABLE - 23");
134               END IF;
135
136               IF X /= IDENT_INT(2) THEN
137                    FAILED ("INCORRECT VALUE PASSED IN - 24");
138               END IF;
139
140               IF EQUAL(1,1) THEN
141                    X := A;
142               ELSE
143                    NULL;
144               END IF;
145          END INNER;
146
147          PACKAGE NEW_INNER IS NEW INNER (A);
148
149     BEGIN  -- TWO
150          IF A /= IDENT_INT(3) THEN
151               FAILED ("INCORRECT VALUE PASSED OUT - 25");
152          END IF;
153     END TWO;
154
155     THREE:
156     DECLARE                 --  OVERLOADING OF FUNCTIONS.
157
158          OBJ : INTEGER := 1;
159          FLO : FLOAT := 6.25;
160
161          FUNCTION F IS NEW GEN_FUN (INTEGER, OBJ);
162
163          GENERIC
164               X : IN OUT INTEGER;
165               F : IN FLOAT;
166          PACKAGE INNER IS
167          END INNER;
168
169          FUNCTION F IS NEW GEN_FUN (FLOAT, FLO);
170
171          PACKAGE BODY INNER IS
172          BEGIN
173               X := INTEGER(F);
174          END INNER;
175
176          PACKAGE NEW_INNER IS NEW INNER (OBJ, FLO);
177
178     BEGIN
179          IF OBJ /= IDENT_INT(6) THEN
180               FAILED ("INCORRECT VALUE RETURNED FROM FUNCTION - 60");
181          END IF;
182     END THREE;
183
184     RESULT;
185END C83024A;
186