blob: c6ebad3c81b3a657440750297ea053086bf31797 [file] [log] [blame]
-- C74306A.ADA
-- Grant of Unlimited Rights
--
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
-- unlimited rights in the software and documentation contained herein.
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
-- this public release, the Government intends to confer upon all
-- recipients unlimited rights equal to those held by the Government.
-- These rights include rights to use, duplicate, release or disclose the
-- released technical data and computer software in whole or in part, in
-- any manner and for any purpose whatsoever, and to have or permit others
-- to do so.
--
-- DISCLAIMER
--
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
-- PARTICULAR PURPOSE OF SAID MATERIAL.
--*
-- OBJECTIVE:
-- AFTER THE FULL DECLARATION OF A DEFERRED CONSTANT, THE VALUE OF
-- THE CONSTANT MAY BE USED IN ANY EXPRESSION, PARTICULARLY
-- EXPRESSIONS IN WHICH THE USE WOULD BE ILLEGAL BEFORE THE FULL
-- DECLARATION.
-- HISTORY:
-- BCB 03/14/88 CREATED ORIGINAL TEST.
WITH REPORT; USE REPORT;
PROCEDURE C74306A IS
GENERIC
TYPE GENERAL_PURPOSE IS LIMITED PRIVATE;
Y : IN OUT GENERAL_PURPOSE;
FUNCTION IDENT (X : GENERAL_PURPOSE) RETURN GENERAL_PURPOSE;
FUNCTION IDENT (X : GENERAL_PURPOSE) RETURN GENERAL_PURPOSE IS
BEGIN
IF EQUAL(3,3) THEN
RETURN X;
END IF;
RETURN Y;
END IDENT;
PACKAGE P IS
TYPE T IS PRIVATE;
C : CONSTANT T;
PRIVATE
TYPE T IS RANGE 1 .. 100;
TYPE A IS ARRAY(1..2) OF T;
TYPE B IS ARRAY(INTEGER RANGE <>) OF T;
TYPE D (DISC : T) IS RECORD
NULL;
END RECORD;
C : CONSTANT T := 50;
PARAM : T := 99;
FUNCTION IDENT_T IS NEW IDENT (T, PARAM);
FUNCTION F (X : T := C) RETURN T;
SUBTYPE RAN IS T RANGE 1 .. C;
SUBTYPE IND IS B(1..INTEGER(C));
SUBTYPE DIS IS D (DISC => C);
OBJ : T := C;
CON : CONSTANT T := C;
ARR : A := (5, C);
PAR : T := IDENT_T (C);
RANOBJ : T RANGE 1 .. C := C;
INDOBJ : B(1..INTEGER(C));
DIS_VAL : DIS;
REN : T RENAMES C;
GENERIC
FOR_PAR : T := C;
PACKAGE GENPACK IS
VAL : T;
END GENPACK;
GENERIC
IN_PAR : IN T;
PACKAGE NEWPACK IS
IN_VAL : T;
END NEWPACK;
END P;
USE P;
PACKAGE BODY P IS
TYPE A1 IS ARRAY(1..2) OF T;
TYPE B1 IS ARRAY(INTEGER RANGE <>) OF T;
TYPE D1 (DISC1 : T) IS RECORD
NULL;
END RECORD;
SUBTYPE RAN1 IS T RANGE 1 .. C;
SUBTYPE IND1 IS B1(1..INTEGER(C));
SUBTYPE DIS1 IS D1 (DISC1 => C);
OBJ1 : T := C;
FUNCVAR : T;
CON1 : CONSTANT T := C;
ARR1 : A1 := (5, C);
PAR1 : T := IDENT_T (C);
RANOBJ1 : T RANGE 1 .. C := C;
INDOBJ1 : B1(1..INTEGER(C));
DIS_VAL1 : DIS1;
REN1 : T RENAMES C;
FUNCTION F (X : T := C) RETURN T IS
BEGIN
RETURN C;
END F;
PACKAGE BODY GENPACK IS
BEGIN
VAL := FOR_PAR;
END GENPACK;
PACKAGE BODY NEWPACK IS
BEGIN
IN_VAL := IN_PAR;
END NEWPACK;
PACKAGE PACK IS NEW GENPACK (FOR_PAR => C);
PACKAGE NPACK IS NEW NEWPACK (IN_PAR => C);
BEGIN
TEST ("C74306A", "AFTER THE FULL DECLARATION OF A DEFERRED " &
"CONSTANT, THE VALUE OF THE CONSTANT MAY " &
"BE USED IN ANY EXPRESSION, PARTICULARLY " &
"EXPRESSIONS IN WHICH THE USE WOULD BE " &
"ILLEGAL BEFORE THE FULL DECLARATION");
IF OBJ /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR OBJ");
END IF;
IF CON /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR CON");
END IF;
IF ARR /= (IDENT_T(5), IDENT_T(50)) THEN
FAILED ("IMPROPER VALUES FOR ARR");
END IF;
IF PAR /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR PAR");
END IF;
IF OBJ1 /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR OBJ1");
END IF;
IF CON1 /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR CON1");
END IF;
IF ARR1 /= (IDENT_T(5), IDENT_T(50)) THEN
FAILED ("IMPROPER VALUES FOR ARR1");
END IF;
IF PAR1 /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR PAR1");
END IF;
IF PACK.VAL /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR PACK.VAL");
END IF;
IF NPACK.IN_VAL /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR NPACK.IN_VAL");
END IF;
IF RAN'LAST /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR RAN'LAST");
END IF;
IF RANOBJ /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR RANOBJ");
END IF;
IF IND'LAST /= IDENT_INT(50) THEN
FAILED ("IMPROPER VALUE FOR IND'LAST");
END IF;
IF INDOBJ'LAST /= IDENT_INT(50) THEN
FAILED ("IMPROPER VALUE FOR INDOBJ'LAST");
END IF;
IF DIS_VAL.DISC /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR DIS_VAL.DISC");
END IF;
IF REN /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR REN");
END IF;
IF RAN1'LAST /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR RAN1'LAST");
END IF;
IF RANOBJ1 /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR RANOBJ1");
END IF;
IF IND1'LAST /= IDENT_INT(50) THEN
FAILED ("IMPROPER VALUE FOR IND1'LAST");
END IF;
IF INDOBJ1'LAST /= IDENT_INT(50) THEN
FAILED ("IMPROPER VALUE FOR INDOBJ1'LAST");
END IF;
IF DIS_VAL1.DISC1 /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR DIS_VAL1.DISC1");
END IF;
IF REN1 /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR REN1");
END IF;
FUNCVAR := F(C);
IF FUNCVAR /= IDENT_T(50) THEN
FAILED ("IMPROPER VALUE FOR FUNCVAR");
END IF;
RESULT;
END P;
BEGIN
DECLARE
TYPE ARR IS ARRAY(1..2) OF T;
VAL1 : T := C;
VAL2 : ARR := (C, C);
VAL3 : T RENAMES C;
BEGIN
NULL;
END;
NULL;
END C74306A;