WITH REPORT; USE REPORT;
PROCEDURE C83033A IS
PACKAGE BASE_P IS
TYPE A IS (RED, BLUE, YELO);
FUNCTION RED(T : INTEGER; X : A) RETURN A;
FUNCTION BLUE(T : INTEGER; X : A) RETURN A;
END BASE_P;
PACKAGE BODY BASE_P IS
FUNCTION RED(T : INTEGER; X : A) RETURN A IS
BEGIN
IF EQUAL(T, T) THEN
RETURN X;
ELSE
RETURN YELO;
END IF;
END RED;
FUNCTION BLUE(T : INTEGER; X : A) RETURN A IS
BEGIN
IF EQUAL(T, T) THEN
RETURN X;
ELSE
RETURN YELO;
END IF;
END BLUE;
END BASE_P;
BEGIN
TEST ("C83033A", "CHECK THAT AN IMPLICIT DECLARATION OF A BLOCK " &
"NAME, A LOOP NAME, OR A STATEMENT LABEL HIDES " &
"THE DECLARATION OF AN ENUMERATION LITERAL OR " &
"OF A DERIVED SUBPROGRAM DECLARED BY A DERIVED " &
"TYPE DEFINITION");
B1:
DECLARE
TYPE STMT2 IS NEW BASE_P.A;
BEGIN
DECLARE
C, D : STMT2;
BEGIN
C := C83033A.B1.RED(3, C83033A.B1.RED);
D := C83033A.B1.RED;
GOTO RED; FAILED("STATEMENT LABEL - 1");
<<RED>> IF C /= D THEN
FAILED("STATEMENT LABEL - 2");
END IF;
END;
END B1;
B2:
DECLARE
TYPE STMT2 IS NEW BASE_P.A;
BEGIN
DECLARE
A : STMT2 := BLUE;
B : STMT2 := BLUE(3, BLUE);
BEGIN
BLUE:
FOR I IN 1 .. 1 LOOP
IF A /= B THEN
FAILED("LOOP NAME - 1");
END IF;
EXIT BLUE; FAILED("LOOP NAME - 2");
END LOOP BLUE;
END;
END B2;
B4:
DECLARE
PACKAGE P IS
GLOBAL : INTEGER := 1;
TYPE ENUM IS (GREEN, BLUE);
TYPE PRIV IS PRIVATE;
FUNCTION GREEN RETURN PRIV;
PRIVATE
TYPE PRIV IS NEW ENUM;
END P;
PACKAGE BODY P IS
FUNCTION GREEN RETURN PRIV IS
BEGIN
GLOBAL := GLOBAL + 1;
RETURN BLUE;
END GREEN;
BEGIN
NULL;
END P;
USE P;
BEGIN
GREEN:
DECLARE
COLOR : PRIV := C83033A.B4.P.GREEN;
BEGIN
IF GREEN.COLOR /= C83033A.B4.P.GREEN OR ELSE GLOBAL /= 3 THEN
FAILED("BLOCK NAME");
END IF;
END GREEN;
END B4;
RESULT;
END C83033A;