6 <USE "COMPDEC" "CODGEN" "CHKDCL" "ADVMESS" "STRGEN" "MIMGEN">
9 <GFCN
\1aLENGTH?-GEN ("VALUE" ANY NODE ANY "OPTIONAL" <OR FALSE ATOM> <OR FALSE ATOM> <OR FALSE ATOM> ANY) N9 W10 NOTF11 BRANCH12 DIR13 SETF14>
10 <OPT-DISPATCH 2 %<> OPT4 OPT5 OPT6 OPT7 OPT8>
20 <TEMP (TEMP36 %<>) STR16 NUM18:NODE TYP19 TPS20:ATOM FLS22 SDIR23 B324:ATOM ANUM27 B229 RW34 NK25 NN26:FIX>
22 <NTHUV N9 5 = TEMP36 (TYPE LIST)>
23 <NTHL TEMP36 1 = STR16 (TYPE NODE)>
25 <NTHUV N9 5 = TEMP36 (TYPE LIST)>
26 <RESTL TEMP36 1 = TEMP36 (TYPE LIST)>
27 <NTHL TEMP36 1 = NUM18 (TYPE NODE)>
29 <NTHUV STR16 3 = TYP19>
32 <CALL '
\1aSTRUCTYP 1 = TPS20>
36 <EQUAL? W10 'FLUSHED - TAG41>
37 <SET FLS22 'T (TYPE ATOM)>
40 <SET FLS22 %<> (TYPE FALSE)>
44 <CALL '
\1aMAKE-TAG 0 = B324>
45 <VEQUAL? FLS22 0 + PHRASE45>
46 <TYPE? BRANCH12 <TYPE-CODE FALSE> + PHRASE45>
51 <CALL '
\1aMAKE-TAG 0 = TEMP36>
56 <NTHUV NUM18 1 = TEMP36 (TYPE FIX)>
57 <VEQUAL? TEMP36 2 - PHRASE50 (TYPE FIX)>
59 <SET NK25 'T (TYPE ATOM)>
60 <NTHUV NUM18 4 = NN26 (TYPE FIX)>
61 <LESS? NN26 0 + BOOL53 (TYPE FIX)>
62 <GRTR? NN26 262144 - PHRASE57 (TYPE FIX)>
64 <FRAME '
\1aCOMPILE-ERROR>
65 <PUSH "Argument out of range to LENGTH? ">
69 <CALL '
\1aCOMPILE-ERROR 3>
72 <SET NK25 %<> (TYPE FALSE)>
74 <TYPE? NOTF11 <TYPE-CODE FALSE> + TAG61>
75 <TYPE? DIR13 <TYPE-CODE FALSE> - TAG60>
77 <SET DIR13 'T (TYPE ATOM)>
80 <SET DIR13 %<> (TYPE FALSE)>
82 <TYPE? SETF14 <TYPE-CODE FALSE> + PHRASE63>
84 <FRAME '
\1aDEALLOCATE-TEMP>
87 <TYPE? SDIR23 <TYPE-CODE FALSE> - TAG67>
88 <SET TEMP36 'T (TYPE ATOM)>
91 <SET TEMP36 %<> (TYPE FALSE)>
95 <CALL '
\1aREFERENCE 1 = STACK>
97 <CALL '
\1aMOVE-ARG 2 = STACK>
98 <CALL '
\1aDEALLOCATE-TEMP 1>
100 <VEQUAL? TPS20 'LIST - PHRASE70>
105 <CALL '
\1aGEN 2 = STR16>
106 <TYPE? STR16 <TYPE-CODE TEMP> - BOOL74>
107 <NTHUV STR16 2 = TEMP36 (TYPE FIX)>
108 <GRTR? TEMP36 1 - PHRASE73 (TYPE FIX)>
116 <CALL '
\1aGEN-TEMP 1 = STACK>
117 <CALL '
\1aMOVE-ARG 2 = STR16>
123 <CALL '
\1aGEN 2 = TYP19>
124 <TYPE? TYP19 <TYPE-CODE TEMP> - BOOL82>
125 <NTHUV TYP19 2 = TEMP36 (TYPE FIX)>
126 <GRTR? TEMP36 1 - PHRASE81 (TYPE FIX)>
134 <CALL '
\1aGEN-TEMP 1 = STACK>
135 <CALL '
\1aMOVE-ARG 2 = TYP19>
137 <TYPE? NOTF11 <TYPE-CODE FALSE> - BOOL89>
138 <TYPE? BRANCH12 <TYPE-CODE FALSE> - TAG90>
139 <SET TEMP36 'T (TYPE ATOM)>
142 <SET TEMP36 %<> (TYPE FALSE)>
144 <TYPE? DIR13 <TYPE-CODE FALSE> - TAG92>
145 <SET NK25 'T (TYPE ATOM)>
148 <SET NK25 %<> (TYPE FALSE)>
150 <VEQUAL? TEMP36 NK25 - BOOL89>
152 <TYPE? BRANCH12 <TYPE-CODE FALSE> + PHRASE88>
153 <VEQUAL? FLS22 0 + PHRASE88>
157 <CONS 'VALUE () = NK25>
158 <NTHUV STR16 1 = TEMP36 (TYPE ATOM)>
159 <CONS TEMP36 NK25 = STACK>
161 <CONS 'VALUE () = NK25>
162 <NTHUV TYP19 1 = TEMP36 (TYPE ATOM)>
163 <CONS TEMP36 NK25 = STACK>
169 <TYPE? W10 <TYPE-CODE TEMP> - PHRASE100>
170 <NTHUV W10 2 = NK25 (TYPE FIX)>
171 <VEQUAL? NK25 0 - PHRASE100 (TYPE FIX)>
175 <CALL '
\1aUSE-TEMP 1>
180 <CALL '
\1aGEN-TEMP 0 = W10>
186 <CALL '
\1aSET-TEMP 3>
189 <CONS 'VALUE () = NK25>
190 <NTHUV STR16 1 = TEMP36 (TYPE ATOM)>
191 <CONS TEMP36 NK25 = STACK>
193 <CONS 'VALUE () = NK25>
194 <NTHUV TYP19 1 = TEMP36 (TYPE ATOM)>
195 <CONS TEMP36 NK25 = STACK>
197 <CONS 'VALUE () = NK25>
198 <NTHUV ANUM27 1 = TEMP36 (TYPE ATOM)>
199 <CONS TEMP36 NK25 = STACK>
203 <FRAME '
\1aLABEL-TAG>
205 <CALL '
\1aMAKE-TAG 0 = TEMP36>
207 <CALL '
\1aLABEL-TAG 1>
208 <FRAME '
\1aEMPTY-CHECK>
213 <TYPE? DIR13 <TYPE-CODE FALSE> + PHRASE112>
221 <CALL '
\1aEMPTY-CHECK 5>
230 <TYPE? ANUM27 <TYPE-CODE UNBOUND> + PHRASE116>
246 <CALL '
\1aMAKE-TAG 0 = NK25>
255 <FRAME '
\1aBRANCH-TAG>
258 <CALL '
\1aBRANCH-TAG 1>
259 <FRAME '
\1aLABEL-TAG>
262 <CALL '
\1aLABEL-TAG 1>
263 <FRAME '
\1aFREE-TEMP>
266 <CALL '
\1aFREE-TEMP 1>
267 <FRAME '
\1aFREE-TEMP>
270 <CALL '
\1aFREE-TEMP 1>
271 <EQUAL? W10 'DONT-CARE - PHRASE126>
274 <CALL '
\1aGEN-TEMP 1 = W10>
276 <TYPE? BRANCH12 <TYPE-CODE FALSE> + PHRASE129>
277 <VEQUAL? FLS22 0 + PHRASE129>
279 <TYPE? DIR13 <TYPE-CODE FALSE> - PHRASE229>
281 <FRAME '
\1aBRANCH-TAG>
284 <CALL '
\1aBRANCH-TAG 1>
285 <FRAME '
\1aLABEL-TAG>
288 <CALL '
\1aLABEL-TAG 1>
291 <TYPE? NOTF11 <TYPE-CODE FALSE> - BOOL136>
292 <TYPE? BRANCH12 <TYPE-CODE FALSE> - TAG137>
293 <SET NK25 'T (TYPE ATOM)>
296 <SET NK25 %<> (TYPE FALSE)>
298 <TYPE? DIR13 <TYPE-CODE FALSE> - TAG139>
299 <SET TEMP36 'T (TYPE ATOM)>
302 <SET TEMP36 %<> (TYPE FALSE)>
304 <VEQUAL? NK25 TEMP36 + PHRASE135>
307 <TYPE? NOTF11 <TYPE-CODE FALSE> + PHRASE142>
309 <TYPE? DIR13 <TYPE-CODE FALSE> + PHRASE142>
311 <FRAME '
\1aBRANCH-TAG>
313 <CALL '
\1aBRANCH-TAG 1>
314 <FRAME '
\1aLABEL-TAG>
317 <CALL '
\1aLABEL-TAG 1>
320 <FRAME '
\1aREFERENCE>
323 <CALL '
\1aREFERENCE 1 = STACK>
325 <CALL '
\1aMOVE-ARG 2>
326 <FRAME '
\1aBRANCH-TAG>
329 <CALL '
\1aBRANCH-TAG 1>
330 <FRAME '
\1aLABEL-TAG>
333 <CALL '
\1aLABEL-TAG 1>
336 <TYPE? BRANCH12 <TYPE-CODE FALSE> + PHRASE152>
337 <FRAME '
\1aBRANCH-TAG>
339 <CALL '
\1aBRANCH-TAG 1>
340 <FRAME '
\1aLABEL-TAG>
343 <CALL '
\1aLABEL-TAG 1>
349 <CALL '
\1aMOVE-ARG 2 = W10>
350 <FRAME '
\1aBRANCH-TAG>
353 <CALL '
\1aBRANCH-TAG 1>
354 <FRAME '
\1aLABEL-TAG>
357 <CALL '
\1aLABEL-TAG 1>
360 <FRAME '
\1aRET-TMP-AC>
362 <FRAME '
\1aREFERENCE>
364 <CALL '
\1aREFERENCE 1 = STACK>
366 <CALL '
\1aMOVE-ARG 2 = STACK>
367 <CALL '
\1aRET-TMP-AC 1>
368 <FRAME '
\1aBRANCH-TAG>
370 <CALL '
\1aBRANCH-TAG 1>
371 <FRAME '
\1aLABEL-TAG>
374 <CALL '
\1aLABEL-TAG 1>
380 <CALL '
\1aMOVE-ARG 2 = W10>
381 <FRAME '
\1aLABEL-TAG>
384 <CALL '
\1aLABEL-TAG 1>
387 <FRAME '
\1aFREE-TEMP>
392 <CALL '
\1aGEN 2 = STR16>
395 <CALL '
\1aFREE-TEMP 2>
397 <CALL '
\1aGEN-TEMP 0 = ANUM27>
398 <VEQUAL? TPS20 'VECTOR + BOOL172>
399 <VEQUAL? TPS20 'TUPLE - PHRASE171>
401 <FRAME '
\1aLENGTH-VECTOR>
405 <CALL '
\1aLENGTH-VECTOR 2>
408 <VEQUAL? TPS20 'LIST - PHRASE174>
409 <FRAME '
\1aLENGTH-LIST>
413 <CALL '
\1aLENGTH-LIST 2>
416 <VEQUAL? TPS20 'UVECTOR - PHRASE176>
417 <FRAME '
\1aLENGTH-UVECTOR>
421 <CALL '
\1aLENGTH-UVECTOR 2>
424 <VEQUAL? TPS20 'STRING - PHRASE178>
426 <FRAME '
\1aLENGTH-STRING>
430 <CALL '
\1aLENGTH-STRING 2>
433 <FRAME '
\1aLENGTH-RECORD>
440 <CALL '
\1aRECTYPE? 1 = STACK>
441 <CALL '
\1aLENGTH-RECORD 3>
443 <VEQUAL? NK25 0 + PHRASE184>
450 <VEQUAL? FLS22 0 - BOOL188>
451 <TYPE? BRANCH12 <TYPE-CODE FALSE> - PHRASE187>
453 <TYPE? DIR13 <TYPE-CODE FALSE> + PHRASE190>
454 <SET TEMP36 '- (TYPE ATOM)>
457 <SET TEMP36 '+ (TYPE ATOM)>
460 <TYPE? DIR13 <TYPE-CODE FALSE> + PHRASE194>
461 <SET TEMP36 '+ (TYPE ATOM)>
464 <SET TEMP36 '- (TYPE ATOM)>
476 <CALL '
\1aGEN 2 = TYP19>
481 <TYPE? DIR13 <TYPE-CODE FALSE> + PHRASE200>
482 <SET TEMP36 '- (TYPE ATOM)>
485 <SET TEMP36 '+ (TYPE ATOM)>
491 <FRAME '
\1aFREE-TEMP>
494 <CALL '
\1aFREE-TEMP 1>
496 <EQUAL? W10 'DONT-CARE - PHRASE204>
499 <CALL '
\1aGEN-TEMP 1 = W10>
501 <TYPE? BRANCH12 <TYPE-CODE FALSE> + PHRASE207>
502 <VEQUAL? FLS22 0 + PHRASE207>
504 <FRAME '
\1aFREE-TEMP>
507 <CALL '
\1aFREE-TEMP 1>
510 <TYPE? NOTF11 <TYPE-CODE FALSE> - BOOL211>
512 <TYPE? BRANCH12 <TYPE-CODE FALSE> - TAG212>
513 <SET TEMP36 'T (TYPE ATOM)>
516 <SET TEMP36 %<> (TYPE FALSE)>
518 <TYPE? DIR13 <TYPE-CODE FALSE> - TAG214>
520 <SET NK25 'T (TYPE ATOM)>
523 <SET NK25 %<> (TYPE FALSE)>
525 <VEQUAL? TEMP36 NK25 + PHRASE210>
528 <FRAME '
\1aFREE-TEMP>
531 <CALL '
\1aFREE-TEMP 1>
532 <TYPE? BRANCH12 <TYPE-CODE FALSE> + PHRASE229>
534 <FRAME '
\1aREFERENCE>
537 <CALL '
\1aREFERENCE 1 = STACK>
539 <CALL '
\1aMOVE-ARG 2>
540 <FRAME '
\1aBRANCH-TAG>
543 <CALL '
\1aBRANCH-TAG 1>
544 <FRAME '
\1aLABEL-TAG>
547 <CALL '
\1aLABEL-TAG 1>
550 <TYPE? BRANCH12 <TYPE-CODE FALSE> + PHRASE225>
555 <CALL '
\1aMOVE-ARG 2>
556 <FRAME '
\1aBRANCH-TAG>
559 <CALL '
\1aBRANCH-TAG 1>
560 <FRAME '
\1aLABEL-TAG>
563 <CALL '
\1aLABEL-TAG 1>
570 <CALL '
\1aMOVE-ARG 2>
571 <FRAME '
\1aBRANCH-TAG>
573 <CALL '
\1aBRANCH-TAG 1>
574 <FRAME '
\1aLABEL-TAG>
577 <CALL '
\1aLABEL-TAG 1>
579 <FRAME '
\1aREFERENCE>
581 <CALL '
\1aREFERENCE 1 = STACK>
583 <CALL '
\1aMOVE-ARG 2>
584 <FRAME '
\1aLABEL-TAG>
587 <CALL '
\1aLABEL-TAG 1>
594 <CALL '
\1aMOVE-ARG 2 = NK25>