-- C32107A.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. --* -- CHECK THAT OBJECT DECLARATIONS ARE ELABORATED IN THE ORDER OF THEIR -- OCCURRENCE, I.E., THAT EXPRESSIONS ASSOCIATED WITH ONE DECLARATION -- (INCLUDING DEFAULT EXPRESSIONS, IF APPROPRIATE) ARE EVALUATED BEFORE -- ANY EXPRESSION BELONGING TO THE NEXT DECLARATION. ALSO, CHECK THAT -- EXPRESSIONS IN THE SUBTYPE INDICATION OR THE CONSTRAINED ARRAY -- DEFINITION ARE EVALUATED BEFORE ANY INITIALIZATION EXPRESSIONS ARE -- EVALUATED. -- R.WILLIAMS 9/24/86 WITH REPORT; USE REPORT; PROCEDURE C32107A IS BUMP : INTEGER := 0; ORDER_CHECK : INTEGER; G1, H1, I1 : INTEGER; FIRST_CALL : BOOLEAN := TRUE; TYPE ARR1 IS ARRAY (POSITIVE RANGE <>) OF INTEGER; TYPE ARR1_NAME IS ACCESS ARR1; TYPE ARR2 IS ARRAY (POSITIVE RANGE <>, POSITIVE RANGE <>) OF INTEGER; TYPE REC (D : INTEGER) IS RECORD COMP : INTEGER; END RECORD; TYPE REC_NAME IS ACCESS REC; FUNCTION F RETURN INTEGER IS BEGIN BUMP := BUMP + 1; RETURN BUMP; END F; FUNCTION G RETURN INTEGER IS BEGIN BUMP := BUMP + 1; G1 := BUMP; RETURN BUMP; END G; FUNCTION H RETURN INTEGER IS BEGIN BUMP := BUMP + 1; H1 := BUMP; RETURN BUMP; END H; FUNCTION I RETURN INTEGER IS BEGIN IF FIRST_CALL THEN BUMP := BUMP + 1; I1 := BUMP; FIRST_CALL := FALSE; END IF; RETURN I1; END I; BEGIN TEST ( "C32107A", "CHECK THAT OBJECT DECLARATIONS ARE " & "ELABORATED IN THE ORDER OF THEIR " & "OCCURRENCE, I.E., THAT EXPRESSIONS " & "ASSOCIATED WITH ONE DECLARATION (INCLUDING " & "DEFAULT EXPRESSIONS, IF APPROPRIATE) ARE " & "EVALUATED BEFORE ANY EXPRESSION BELONGING " & "TO THE NEXT DECLARATION. ALSO, CHECK THAT " & "EXPRESSIONS IN THE SUBTYPE INDICATION OR " & "THE CONSTRAINED ARRAY DEFINITION ARE " & "EVALUATED BEFORE ANY INITIALIZATION " & "EXPRESSIONS ARE EVALUATED" ); DECLARE -- (A). I1 : INTEGER := 10000 * F; A1 : CONSTANT ARRAY (1 .. H) OF REC (G * 100) := (1 .. H1 => (G1 * 100, I * 10)); I2 : CONSTANT INTEGER := F * 1000; BEGIN ORDER_CHECK := I1 + I2 + A1'LAST + A1 (1).D + A1 (1).COMP; IF ORDER_CHECK = 15243 OR ORDER_CHECK = 15342 THEN COMMENT ( "ORDER_CHECK HAS VALUE " & INTEGER'IMAGE (ORDER_CHECK) & " - (A)" ); ELSE FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 15343 OR " & "15242 -- ACTUAL VALUE IS " & INTEGER'IMAGE (ORDER_CHECK) & " - (A)" ); END IF; END; -- (A). BUMP := 0; DECLARE -- (B). A : ARR2 (1 .. F, 1 .. F * 10); R : REC (G * 100) := (G1 * 100, F * 1000); I : INTEGER RANGE 1 .. H; S : REC (F * 10); BEGIN ORDER_CHECK := A'LAST (1) + A'LAST (2) + R.D + R.COMP; IF (H1 + S.D = 65) AND (ORDER_CHECK = 4321 OR ORDER_CHECK = 4312) THEN COMMENT ( "ORDER_CHECK HAS VALUE 65 " & INTEGER'IMAGE (ORDER_CHECK) & " - (B)" ); ELSE FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 65 4321 OR " & "65 4312 -- ACTUAL VALUE IS " & INTEGER'IMAGE (H1 + S.D) & INTEGER'IMAGE (ORDER_CHECK) & " - (B)" ); END IF; END; -- (B). BUMP := 0; DECLARE -- (C). I1 : CONSTANT INTEGER RANGE 1 .. G * 10 := F; A1 : ARRAY (1 .. F * 100) OF INTEGER RANGE 1 .. H * 1000; BEGIN ORDER_CHECK := I1 + (G1 * 10) + A1'LAST + (H1 * 1000); IF ORDER_CHECK = 4312 OR ORDER_CHECK = 3412 THEN COMMENT ( "ORDER_CHECK HAS VALUE " & INTEGER'IMAGE (ORDER_CHECK) & " - (C)" ); ELSE FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 4312 OR " & "3412 -- ACTUAL VALUE IS " & INTEGER'IMAGE (ORDER_CHECK) & " - (C)" ); END IF; END; -- (C). BUMP := 0; FIRST_CALL := TRUE; DECLARE -- (D). A1 : ARRAY (1 .. G) OF REC (H * 10000) := (1 .. G1 => (H1 * 10000, I * 100)); R1 : CONSTANT REC := (F * 1000, F * 10); BEGIN ORDER_CHECK := A1'LAST + A1 (1).D + A1 (1).COMP + R1.D + R1.COMP; IF ORDER_CHECK = 25341 OR ORDER_CHECK = 24351 OR ORDER_CHECK = 15342 OR ORDER_CHECK = 14352 THEN COMMENT ( "ORDER_CHECK HAS VALUE " & INTEGER'IMAGE (ORDER_CHECK) & " - (D)" ); ELSE FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 25341, " & "24351, 15342 OR 14352 -- ACTUAL VALUE IS " & INTEGER'IMAGE (ORDER_CHECK) & " - (D)" ); END IF; END; -- (D). BUMP := 0; DECLARE -- (E). A1 : CONSTANT ARR1_NAME := NEW ARR1' (1 .. F => F * 10); R1 : REC_NAME (H * 100) := NEW REC'(H1 * 100, F * 1000); BEGIN ORDER_CHECK := A1.ALL'LAST + A1.ALL (1) + R1.D + R1.COMP; IF ORDER_CHECK /= 4321 THEN FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 4321 " & "-- ACTUAL VALUE IS " & INTEGER'IMAGE (ORDER_CHECK) & " - (E)" ); END IF; END; -- (E). BUMP := 0; FIRST_CALL := TRUE; DECLARE -- (F). A1 : CONSTANT ARRAY (1 .. G) OF INTEGER RANGE 1 .. H * 100 := (1 .. G1 => I * 10); A2 : ARR1 (1 .. F * 1000); BEGIN ORDER_CHECK := A1'LAST + (H1 * 100) + A1 (1) + A2'LAST; IF ORDER_CHECK = 4231 OR ORDER_CHECK = 4132 THEN COMMENT ( "ORDER_CHECK HAS VALUE " & INTEGER'IMAGE (ORDER_CHECK) & " - (F)" ); ELSE FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 4231 OR " & "4132 -- ACTUAL VALUE IS " & INTEGER'IMAGE (ORDER_CHECK) & " - (F)" ); END IF; END; -- (F). BUMP := 0; DECLARE -- (G). A1 : ARR1_NAME (1 .. G) := NEW ARR1 (1 .. G1); R1 : CONSTANT REC_NAME (H * 10) := NEW REC'(H1 * 10, F * 100); BEGIN ORDER_CHECK := A1.ALL'LAST + R1.D + R1.COMP; IF ORDER_CHECK /= 321 THEN FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 321 OR " & "-- ACTUAL VALUE IS " & INTEGER'IMAGE (ORDER_CHECK) & " - (G)" ); END IF; END; -- (G). BUMP := 0; DECLARE -- (H). TYPE REC (D : INTEGER := F) IS RECORD COMP : INTEGER := F * 10; END RECORD; R1 : REC; R2 : REC (G * 100) := (G1 * 100, F * 1000); BEGIN ORDER_CHECK := R1.D + R1.COMP + R2.D + R2.COMP; IF ORDER_CHECK = 4321 OR ORDER_CHECK = 4312 OR ORDER_CHECK = 3421 OR ORDER_CHECK = 3412 THEN COMMENT ( "ORDER_CHECK HAS VALUE " & INTEGER'IMAGE (ORDER_CHECK) & " - (H)" ); ELSE FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 4321, " & "4312, 3421, OR 3412 -- ACTUAL VALUE IS " & INTEGER'IMAGE (ORDER_CHECK) & " - (H)" ); END IF; END; -- (H). BUMP := 0; DECLARE -- (I). TYPE REC2 (D1, D2 : INTEGER) IS RECORD COMP : INTEGER; END RECORD; R1 : REC2 (G * 1000, H * 10000) := (G1 * 1000, H1 * 10000, F * 100); R2 : REC2 (F, F * 10); BEGIN ORDER_CHECK := R1.D1 + R1.D2 + R1.COMP + R2.D1 + R2.D2; IF ORDER_CHECK = 21354 OR ORDER_CHECK = 21345 OR ORDER_CHECK = 12345 OR ORDER_CHECK = 12354 THEN COMMENT ( "ORDER_CHECK HAS VALUE " & INTEGER'IMAGE (ORDER_CHECK) & " - (I)" ); ELSE FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 21354, " & "21345, 12354, OR 12345 -- ACTUAL VALUE IS " & INTEGER'IMAGE (ORDER_CHECK) & " - (I)" ); END IF; END; -- (I). BUMP := 0; DECLARE -- (J). PACKAGE P IS TYPE PRIV (D : INTEGER) IS PRIVATE; P1 : CONSTANT PRIV; P2 : CONSTANT PRIV; FUNCTION GET_A (P : PRIV) RETURN INTEGER; PRIVATE TYPE PRIV (D : INTEGER) IS RECORD COMP : INTEGER; END RECORD; P1 : CONSTANT PRIV := (F , F * 10); P2 : CONSTANT PRIV := (F * 100, F * 1000); END P; PACKAGE BODY P IS FUNCTION GET_A (P : PRIV) RETURN INTEGER IS BEGIN RETURN P.COMP; END GET_A; END P; USE P; BEGIN ORDER_CHECK := P1.D + GET_A (P1) + P2.D + GET_A (P2); IF ORDER_CHECK = 4321 OR ORDER_CHECK = 4312 OR ORDER_CHECK = 3412 OR ORDER_CHECK = 3421 THEN COMMENT ( "ORDER_CHECK HAS VALUE " & INTEGER'IMAGE (ORDER_CHECK) & " - (J)" ); ELSE FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 4321, " & "4312, 3421, OR 3412 -- ACTUAL VALUE IS " & INTEGER'IMAGE (ORDER_CHECK) & " - (J)" ); END IF; END; -- (J). BUMP := 0; DECLARE -- (K). PACKAGE P IS TYPE PRIV (D1, D2 : INTEGER) IS PRIVATE; PRIVATE TYPE PRIV (D1, D2 : INTEGER) IS RECORD NULL; END RECORD; END P; USE P; P1 : PRIV (F, F * 10); P2 : PRIV (F * 100, F * 1000); BEGIN ORDER_CHECK := P1.D1 + P1.D2 + P2.D1 + P2.D2; IF ORDER_CHECK = 4321 OR ORDER_CHECK = 4312 OR ORDER_CHECK = 3412 OR ORDER_CHECK = 3421 THEN COMMENT ( "ORDER_CHECK HAS VALUE " & INTEGER'IMAGE (ORDER_CHECK) & " - (K)" ); ELSE FAILED ( "OBJECTS NOT ELABORATED IN PROPER ORDER " & "VALUE OF ORDER_CHECK SHOULD BE 4321, 4312, " & "3421, OR 3412 -- ACTUAL VALUE IS " & INTEGER'IMAGE (ORDER_CHECK) & " - (K)" ); END IF; END; -- (K). RESULT; END C32107A;