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