WITH REPORT; USE REPORT;
PROCEDURE AC3106A IS
SUBTYPE INT IS INTEGER RANGE 0 .. 10;
TYPE REC (D : INT := 0) IS RECORD
A : INTEGER := 5;
CASE D IS
WHEN OTHERS =>
V : INTEGER := 5;
END CASE;
END RECORD;
TYPE AR_REC IS ARRAY (1 .. 10) OF REC;
TYPE R_REC IS RECORD
E : REC;
END RECORD;
TYPE A_STRING IS ACCESS STRING;
TYPE A_REC IS ACCESS REC;
TYPE A_AR_REC IS ACCESS AR_REC;
TYPE A_R_REC IS ACCESS R_REC;
TYPE DIS (L : INT := 1) IS RECORD
S : STRING (1 .. L) := "A";
R : REC (L);
AS : A_STRING (1 .. L) := NEW STRING (1 .. L);
AR : A_REC (L) := NEW REC (1);
RC : REC (3);
ARU : A_REC := NEW REC;
V_AR : AR_REC;
V_R : R_REC;
AC_AR : A_AR_REC := NEW AR_REC;
AC_R : A_R_REC := NEW R_REC;
END RECORD;
TYPE A_DIS IS ACCESS DIS;
AD : A_DIS := NEW DIS;
TYPE DIS2 (L : INT) IS RECORD
S : STRING (1 .. L);
R : REC (L);
AS : A_STRING (1 .. L);
AR : A_REC (L);
END RECORD;
X : DIS;
SUBTYPE REC3 IS REC (3);
GENERIC
GREC3 : IN OUT REC3;
PACKAGE PREC3 IS END PREC3;
SUBTYPE REC0 IS REC (0);
GENERIC
GREC0 : IN OUT REC0;
PACKAGE PREC0 IS END PREC0;
GENERIC
GINT : IN OUT INTEGER;
PACKAGE PINT IS END PINT;
GENERIC
GA_REC : IN OUT A_REC;
PACKAGE PA_REC IS END PA_REC;
GENERIC
GAR_REC : IN OUT AR_REC;
PACKAGE PAR_REC IS END PAR_REC;
GENERIC
GR_REC : IN OUT R_REC;
PACKAGE PR_REC IS END PR_REC;
GENERIC
GA_AR_REC : IN OUT A_AR_REC;
PACKAGE PA_AR_REC IS END PA_AR_REC;
GENERIC
GA_R_REC : IN OUT A_R_REC;
PACKAGE PA_R_REC IS END PA_R_REC;
TYPE BUFFER (SIZE : INT) IS RECORD
POS : NATURAL := 0;
VAL : STRING (1 .. SIZE);
END RECORD;
SUBTYPE BUFF_5 IS BUFFER (5);
GENERIC
Y : IN OUT CHARACTER;
PACKAGE P_CHAR IS END P_CHAR;
SUBTYPE STRING5 IS STRING (1 .. 5);
GENERIC
GSTRING : STRING5;
PACKAGE P_STRING IS END P_STRING;
GENERIC
GA_STRING : A_STRING;
PACKAGE P_A_STRING IS END P_A_STRING;
GENERIC
X : IN OUT BUFF_5;
PACKAGE P_BUFF IS
RX : BUFF_5 RENAMES X;
END P_BUFF;
Z : BUFFER (1) := (SIZE => 1, POS =>82, VAL =>"R");
BEGIN
TEST ("AC3106A", "CHECK THE PERMITTED FORMS OF AN ACTUAL " &
"GENERIC IN OUT PARAMETER");
DECLARE PACKAGE NPINT3 IS NEW PINT (X.RC.A);
PACKAGE NPINT4 IS NEW PINT (X.RC.V);
PACKAGE NPREC3 IS NEW PREC3 (X.RC);
PACKAGE NPA_REC IS NEW PA_REC (X.ARU);
PACKAGE NPINT5 IS NEW PINT (X.ARU.A);
PACKAGE NPINT6 IS NEW PINT (X.ARU.V);
PACKAGE NPAR_REC IS NEW PAR_REC (X.V_AR);
PACKAGE NPREC01 IS NEW PREC0 (X.V_AR (1));
PACKAGE NPR_REC IS NEW PR_REC (X.V_R);
PACKAGE NPREC02 IS NEW PREC0 (X.V_R.E);
PACKAGE NPINT7 IS NEW PINT (X.V_R.E.A);
PACKAGE NP_BUFF IS NEW P_BUFF (Z);
USE NP_BUFF;
PACKAGE NP_CHAR3 IS NEW P_CHAR (RX.VAL (1));
PROCEDURE PROC (X : IN OUT BUFFER) IS
PACKAGE NP_CHAR4 IS NEW P_CHAR (X.VAL (1));
BEGIN
NULL;
END;
BEGIN
NULL;
END;
DECLARE PROCEDURE PROC (Y : IN OUT DIS2) IS
PACKAGE NP_STRING IS NEW P_STRING (Y.S);
PACKAGE NP_CHAR IS NEW P_CHAR (Y.S (1));
PACKAGE NP_A_STRING IS NEW P_A_STRING (Y.AS);
PACKAGE NP_CHAR2 IS NEW P_CHAR (Y.AS (1));
PACKAGE NPINT3 IS NEW PINT (Y.R.A);
PACKAGE NPINT4 IS NEW PINT (Y.R.V);
PACKAGE NPREC3 IS NEW PREC3 (Y.R);
PACKAGE NPA_REC IS NEW PA_REC (Y.AR);
PACKAGE NPINT5 IS NEW PINT (Y.AR.A);
PACKAGE NPINT6 IS NEW PINT (Y.AR.V);
BEGIN
NULL;
END;
BEGIN
NULL;
END;
DECLARE PACKAGE NP_CHAR IS NEW P_CHAR (AD.S (1));
PACKAGE NP_A_STRING IS NEW P_A_STRING (AD.AS);
PACKAGE NP_CHAR2 IS NEW P_CHAR (AD.AS (1));
PACKAGE NPINT3 IS NEW PINT (AD.R.A);
PACKAGE NPINT4 IS NEW PINT (AD.R.V);
PACKAGE NPREC3 IS NEW PREC3 (AD.R);
PACKAGE NPA_REC IS NEW PA_REC (AD.AR);
PACKAGE NPINT5 IS NEW PINT (AD.AR.A);
PACKAGE NPINT6 IS NEW PINT (AD.AR.V);
BEGIN
NULL;
END;
RESULT;
END AC3106A;