1-- C83028A.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 BLOCK STATEMENT HIDES AN OUTER
27--     DECLARATION OF A HOMOGRAPH. ALSO CHECK THAT THE OUTER DECLARATION
28--     IS DIRECTLY VISIBLE IN BOTH DECLARATIVE REGIONS BEFORE THE
29--     DECLARATION OF THE INNER HOMOGRAPH AND THE OUTER DECLARATION IS
30--     VISIBLE BY SELECTION AFTER THE INNER HOMOGRAPH DECLARATION.
31
32-- HISTORY:
33--     BCB 09/06/88  CREATED ORIGINAL TEST.
34
35WITH REPORT; USE REPORT;
36PROCEDURE C83028A IS
37
38     GENERIC
39          TYPE T IS PRIVATE;
40          X : T;
41     FUNCTION GEN_FUN RETURN T;
42
43     FUNCTION GEN_FUN RETURN T IS
44     BEGIN
45          RETURN X;
46     END GEN_FUN;
47
48BEGIN
49     TEST ("C83028A", "CHECK THAT A DECLARATION IN A BLOCK " &
50                      "STATEMENT HIDES AN OUTER " &
51                      "DECLARATION OF A HOMOGRAPH");
52
53     ONE:
54     DECLARE
55          A : INTEGER := IDENT_INT(2);
56          B : INTEGER := A;
57
58     BEGIN  -- ONE
59          DECLARE
60               C : INTEGER := A;
61               A : INTEGER := IDENT_INT(3);
62          BEGIN
63               IF A /= IDENT_INT(3) THEN
64                    FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH - 1");
65               END IF;
66
67               IF ONE.A /= IDENT_INT(2) THEN
68                    FAILED ("INCORRECT VALUE FOR OUTER HOMOGRAPH - 2");
69               END IF;
70
71               IF ONE.B /= IDENT_INT(2) THEN
72                    FAILED ("INCORRECT VALUE FOR OUTER VARIABLE - 3");
73               END IF;
74
75               IF C /= IDENT_INT(2) THEN
76                    FAILED ("INCORRECT VALUE FOR INNER VARIABLE - 4");
77               END IF;
78
79               IF EQUAL(1,1) THEN
80                    ONE.A := A;
81               END IF;
82          END;
83
84          IF A /= IDENT_INT(3) THEN
85               FAILED ("INCORRECT VALUE PASSED OUT - 6");
86          END IF;
87     END ONE;
88
89     TWO:
90     DECLARE
91          A : INTEGER := IDENT_INT(2);
92          B : INTEGER := A;
93          OBJ : INTEGER := IDENT_INT(3);
94
95     BEGIN  -- TWO
96          DECLARE
97               X : INTEGER := A;
98               A : INTEGER := OBJ;
99               C : INTEGER := A;
100          BEGIN
101               IF A /= IDENT_INT(3) THEN
102                    FAILED ("INCORRECT VALUE FOR INNER HOMOGRAPH -10");
103               END IF;
104
105               IF TWO.A /= IDENT_INT(2) THEN
106                    FAILED ("INCORRECT VALUE FOR OUTER HOMOGRAPH - 11");
107               END IF;
108
109               IF TWO.B /= IDENT_INT(2) THEN
110                    FAILED ("INCORRECT VALUE FOR OUTER VARIABLE - 12");
111               END IF;
112
113               IF C /= IDENT_INT(3) THEN
114                    FAILED ("INCORRECT VALUE FOR INNER VARIABLE - 13");
115               END IF;
116
117               IF X /= IDENT_INT(2) THEN
118                    FAILED ("INCORRECT VALUE PASSED IN - 14");
119               END IF;
120
121               IF EQUAL(1,1) THEN
122                    TWO.OBJ := IDENT_INT(4);
123               ELSE
124                    TWO.OBJ := 1;
125               END IF;
126          END;
127
128          IF OBJ /= IDENT_INT(4) THEN
129               FAILED ("INCORRECT VALUE PASSED OUT - 15");
130          END IF;
131     END TWO;
132
133     THREE:
134     DECLARE                 --  OVERLOADING OF FUNCTIONS.
135
136          OBJ : INTEGER := 1;
137          FLO : FLOAT := 5.0;
138
139          FUNCTION F IS NEW GEN_FUN (INTEGER, OBJ);
140
141          FUNCTION F IS NEW GEN_FUN (FLOAT, FLO);
142
143     BEGIN
144          DECLARE
145               F : FLOAT := 6.25;
146          BEGIN
147               THREE.OBJ := INTEGER(F);
148          END;
149
150          IF OBJ /= IDENT_INT(6) THEN
151               FAILED ("INCORRECT VALUE RETURNED FROM FUNCTION - 20");
152          END IF;
153     END THREE;
154
155     RESULT;
156END C83028A;
157