TYPE(reference) の参照では、次を使用できません。
たとえば、次の宣言は無効です。
DECLARE MYFILE FILE STREAM OUTPUT PRINT;
DECLARE ZZZ TYPE( P -> Q ); /* INVALID -
POINTER-QUALIFIED */
DECLARE URFILE TYPE( MYFILE ); /* INVALID - MYFILE IS
CONSTANT */
DECLARE XXX TYPE( AAA(8) ); /* INVALID - HAS
SUBSCRIPT LIST */
DECLARE YYY TYPE( FUN( ) ); /* INVALID -
HAS ARGUMENT LIST */
型定義では、TYPE 属性を指定できず、次の使用もできません。
たとえば、次の宣言は無効です。
EXPROC: PROCEDURE( XYZ );
DECLARE XYZ FIXED BIN(15),
AAA TYPE( XYZ );/* INVALID - XYZ IS A PARAMETER */
DECLARE INT FIXED BIN(15),
B TYPE(INT),
Y TYPE(B); /* INVALID - B IS TYPED */
DECLARE 1 STRUCA,
2 PROG TYPE (INT),
2 NAMES CHAR(80);
STRUCT1 TYPE(STRUCA),
STRUCT2 TYPE(STRUCT1.NAMES); /* INVALID - NAMES IS
IN TYPED STRUCTURE */
TYPE(reference) の参照では、宣言された変数を直接的にも間接的にも参照できません。そのような参照を行うと、循環定義になります。
たとえば、次の宣言は無効です。
DECLARE 1 PROG,
2 MOD CHAR(80),
2 INT FIXED BIN(15),
2 STRUCZ TYPE(PROG);/* INVALID - DIRECTLY CIRCULAR */
DECLARE 1 STRUCA,
2 MOD CHAR(80),
2 INT FIXED BIN(15),
2 STRUCA TYPE(STRUCB); /* INVALID - INDIRECTLY
CIRCULAR */
DECLARE 1 STRUCB,
2 MOD CHAR(80),
2 INT CHAR(80),
2 STRUCA TYPE(STRUCA); /*INVALID - INDIRECTLY
CIRCULAR */