@@ -17,3 +17,169 @@ AT_CHECK([${COBJ} -conf=hello.conf prog.cbl], [1], [],
1717])
1818
1919AT_CLEANUP
20+
21+
22+ AT_SETUP([allow search key in rhs])
23+
24+ # without SEARCH ALL
25+ AT_DATA([prog.cbl], [
26+ IDENTIFICATION DIVISION.
27+ PROGRAM-ID. prog.
28+ DATA DIVISION.
29+ WORKING-STORAGE SECTION.
30+ PROCEDURE DIVISION.
31+ MAIN-RTN.
32+ DISPLAY "HELLO, WORLD!!".
33+ STOP RUN.
34+ ])
35+ AT_CHECK([${COBJ} prog.cbl], [0])
36+ AT_CHECK([${COBJ} -conf=../../command-line-options.src/allow-key-in-rhs.conf prog.cbl], [0])
37+
38+
39+ # key item of OCCURS is LEFT hand side on WHEN condition
40+ AT_DATA([prog.cbl], [
41+ IDENTIFICATION DIVISION.
42+ PROGRAM-ID. prog.
43+ DATA DIVISION.
44+ WORKING-STORAGE SECTION.
45+ 01 ELEMENT_COUNT PIC 9(03) VALUE 3.
46+ 01 RECORD_ARRAY.
47+ 02 FILLER OCCURS 3.
48+ 03 METRIC_COUNT PIC 9(03).
49+ 01 RECORD_ID PIC X(02).
50+ 01 RECORD_KEY.
51+ 02 RECORD_STRUCT.
52+ 03 RECORD_CODE PIC X(04).
53+ 03 RECORD_TYPE PIC X(02).
54+ 02 SERIAL_NO PIC 9(02).
55+ 01 DATA_TABLE.
56+ 02 ELEMENT OCCURS 1 TO 150
57+ DEPENDING ON ELEMENT_COUNT
58+ ASCENDING KEY TABLE_KEY INDEXED BY INDEX_K.
59+ 03 TABLE_KEY.
60+ 04 KEY_CODE.
61+ 05 RECORD_CODE_KEY PIC X(04).
62+ 05 RECORD_TYPE_KEY PIC X(02).
63+ 04 SERIAL_NO_KEY PIC 9(02).
64+ 03 FILLER PIC X(02).
65+ 03 METRIC_DATA.
66+ 04 METRIC_ELEMENT OCCURS 10 INDEXED BY INDEX_J.
67+ 05 METER_NO PIC X(08).
68+ 05 ADDITION_FLAG PIC X(01).
69+ 03 FILLER PIC X(02).
70+ *
71+ PROCEDURE DIVISION.
72+ MAIN_ROUTINE.
73+ SEARCH ALL ELEMENT
74+ AT END
75+ MOVE ZERO TO METRIC_COUNT(1)
76+ GO TO EXIT_ROUTINE
77+ WHEN TABLE_KEY(INDEX_K) = RECORD_KEY
78+ MOVE KEY_CODE(INDEX_K) TO RECORD_ID
79+ SET METRIC_COUNT(1) TO INDEX_K.
80+ EXIT_ROUTINE.
81+ MAIN_EXIT.
82+ STOP RUN.
83+ ])
84+ AT_CHECK([${COBJ} prog.cbl], [0])
85+ AT_CHECK([${COBJ} -conf=../../command-line-options.src/allow-key-in-rhs.conf prog.cbl], [0])
86+
87+
88+ # key item of OCCURS is RIGHT hand side on WHEN condition
89+ AT_DATA([prog.cbl], [
90+ IDENTIFICATION DIVISION.
91+ PROGRAM-ID. prog.
92+ DATA DIVISION.
93+ WORKING-STORAGE SECTION.
94+ 01 ELEMENT_COUNT PIC 9(03) VALUE 3.
95+ 01 RECORD_ARRAY.
96+ 02 FILLER OCCURS 3.
97+ 03 METRIC_COUNT PIC 9(03).
98+ 01 RECORD_ID PIC X(02).
99+ 01 RECORD_KEY.
100+ 02 RECORD_STRUCT.
101+ 03 RECORD_CODE PIC X(04).
102+ 03 RECORD_TYPE PIC X(02).
103+ 02 SERIAL_NO PIC 9(02).
104+ 01 DATA_TABLE.
105+ 02 ELEMENT OCCURS 1 TO 150
106+ DEPENDING ON ELEMENT_COUNT
107+ ASCENDING KEY TABLE_KEY INDEXED BY INDEX_K.
108+ 03 TABLE_KEY.
109+ 04 KEY_CODE.
110+ 05 RECORD_CODE_KEY PIC X(04).
111+ 05 RECORD_TYPE_KEY PIC X(02).
112+ 04 SERIAL_NO_KEY PIC 9(02).
113+ 03 FILLER PIC X(02).
114+ 03 METRIC_DATA.
115+ 04 METRIC_ELEMENT OCCURS 10 INDEXED BY INDEX_J.
116+ 05 METER_NO PIC X(08).
117+ 05 ADDITION_FLAG PIC X(01).
118+ 03 FILLER PIC X(02).
119+ *
120+ PROCEDURE DIVISION.
121+ MAIN_ROUTINE.
122+ SEARCH ALL ELEMENT
123+ AT END
124+ MOVE ZERO TO METRIC_COUNT(1)
125+ GO TO EXIT_ROUTINE
126+ WHEN RECORD_KEY = TABLE_KEY(INDEX_K)
127+ MOVE KEY_CODE(INDEX_K) TO RECORD_ID
128+ SET METRIC_COUNT(1) TO INDEX_K.
129+ EXIT_ROUTINE.
130+ MAIN_EXIT.
131+ STOP RUN.
132+ ])
133+ AT_CHECK([(${COBJ} prog.cbl | grep "Undeclared key") > a.txt 2>&1], [1])
134+ AT_CHECK([${COBJ} -conf=../../command-line-options.src/allow-key-in-rhs.conf prog.cbl], [0])
135+
136+
137+ # only key item on WHEN condition
138+ AT_DATA([prog.cbl], [
139+ IDENTIFICATION DIVISION.
140+ PROGRAM-ID. prog.
141+ DATA DIVISION.
142+ WORKING-STORAGE SECTION.
143+ 01 ELEMENT_COUNT PIC 9(03) VALUE 3.
144+ 01 RECORD_ARRAY.
145+ 02 FILLER OCCURS 3.
146+ 03 METRIC_COUNT PIC 9(03).
147+ 01 RECORD_ID PIC X(02).
148+ 01 RECORD_KEY.
149+ 02 RECORD_STRUCT.
150+ 03 RECORD_CODE PIC X(04).
151+ 03 RECORD_TYPE PIC X(02).
152+ 02 SERIAL_NO PIC 9(02).
153+ 01 DATA_TABLE.
154+ 02 ELEMENT OCCURS 1 TO 150
155+ DEPENDING ON ELEMENT_COUNT
156+ ASCENDING KEY TABLE_KEY INDEXED BY INDEX_K.
157+ 03 TABLE_KEY.
158+ 04 KEY_CODE.
159+ 05 RECORD_CODE_KEY PIC X(04).
160+ 05 RECORD_TYPE_KEY PIC X(02).
161+ 04 SERIAL_NO_KEY PIC 9(02).
162+ 03 FILLER PIC X(02).
163+ 03 METRIC_DATA.
164+ 04 METRIC_ELEMENT OCCURS 10 INDEXED BY INDEX_J.
165+ 05 METER_NO PIC X(08).
166+ 05 ADDITION_FLAG PIC X(01).
167+ 03 FILLER PIC X(02).
168+ *
169+ PROCEDURE DIVISION.
170+ MAIN_ROUTINE.
171+ SEARCH ALL ELEMENT
172+ AT END
173+ MOVE ZERO TO METRIC_COUNT(1)
174+ GO TO EXIT_ROUTINE
175+ WHEN TABLE_KEY(INDEX_K)
176+ MOVE KEY_CODE(INDEX_K) TO RECORD_ID
177+ SET METRIC_COUNT(1) TO INDEX_K.
178+ EXIT_ROUTINE.
179+ MAIN_EXIT.
180+ STOP RUN.
181+ ])
182+ AT_CHECK([(${COBJ} prog.cbl | grep "Invalid type cast") > a.txt 2>&1], [1])
183+ AT_CHECK([(${COBJ} -conf=../../command-line-options.src/allow-key-in-rhs.conf prog.cbl | grep "Invalid type cast") > a.txt 2>&1], [1])
184+
185+ AT_CLEANUP
0 commit comments