5 <USE "CACS" "CODGEN" "COMCOD" "COMPDEC" "CHKDCL" "STRGEN">
7 <DEFINE ALL-REST-GEN (N W
8 "AUX" (R? <==? <NODE-SUBR .N> ,REST>) SAC NAC TEM STR NUM
9 (K <KIDS .N>) (SS <TYPE-INFO .N>) T1 T2 CAC)
10 #DECL ((N) NODE (K) <LIST NODE NODE> (SAC CAC NAC) AC (STR NUM) DATUM
11 (SS) <LIST LIST LIST LIST>)
14 <COND (.R? <GOODACS .N .W>) (ELSE <DATUM LIST ANY-AC>)>>>
16 <EMIT <INSTRUCTION `JUMPE
17 <ACSYM <CHTYPE <DATVAL .STR> AC>>
19 <COND (<OR <NOT <EMPTY? <1 .SS>>> <NOT <EMPTY? <2 .SS>>>>
20 <SET NUM <DATUM FIX ANY-AC>>)>
22 <SET SAC <DATVAL .STR>>
23 <MUNG-VALS .STR .SAC <3 .SS>>
24 <COND (<ASSIGNED? NUM>
25 <MOVE:ARG <REFERENCE <COND (<EMPTY? <2 .SS>> 1) (ELSE 0)>>
28 <PUT <SET NAC <DATVAL .NUM>> ,ACPROT T>
30 <SET SAC <DATVAL .STR>>
31 <PUT .NAC ,ACPROT <>>)>
32 <COND (.CAREFUL <EMIT '<`MOVEI `O* -1>>)>
33 <SET CAC <COND (.CAREFUL <GETREG <>>) (ELSE ,ACO)>>
34 <LABEL:TAG <SET T1 <MAKE:TAG>>>
35 <EMIT <INSTRUCTION `HRRZ <ACSYM .CAC> (<ADDRSYM .SAC>)>>
36 <EMIT <INSTRUCTION `JUMPE <ACSYM .CAC> <SET T2 <MAKE:TAG>>>>
37 <EMIT <INSTRUCTION `MOVE <ACSYM .SAC> <ADDRSYM .CAC>>>
38 <COND (.CAREFUL <EMIT '<`SOJE `O |COMPERR>>)>
39 <COND (<ASSIGNED? NUM>
40 <EMIT <INSTRUCTION `AOJA <ACSYM .NAC> .T1>>)
41 (ELSE <BRANCH:TAG .T1>)>
43 <COND (<ASSIGNED? NUM>
44 <MUNG-VALS .NUM .NAC <1 .SS>>
45 <COND (<AND <NOT <EMPTY? <2 .SS>>> <NOT <EMPTY? <1 .SS>>>>
47 <EMIT <INSTRUCTION `ADDI <ACSYM .NAC> 1>>)>
48 <MUNG-VALS .NUM .NAC <2 .SS>>
51 (.R? <MOVE:ARG .STR .W>)
53 <SET STR <DEFER-IT .N .STR>>
54 <SET TEM <OFFPTR 0 .STR LIST>>
55 <MOVE:ARG <DATUM <COND (<ISTYPE-GOOD? <RESULT-TYPE .N>>) (ELSE .TEM)>
59 <DEFINE MUNG-VALS (D A L "AUX" (D1 .D))
60 #DECL ((D D1) DATUM (A) AC (L) <LIST [REST NODE]>)
63 "AUX" (S <NODE-NAME .N>)
66 <ISTYPE-GOOD? <1 <TYPE-INFO .N>>>
67 <AND <OR <ARG? .S> <INIT-SYM .S>>
68 <ISTYPE-GOOD? <1 <DECL-SYM .S>>>>>))
70 <COND (<AND <NOT .TY> <==? .D .D1>>
71 <SET D1 <MOVE:ARG .D <DATUM ANY-AC <DATVAL .D>>>>)>
73 <PUT .S ,INACS <DATUM !<COND (.TY .D) (ELSE .D1)>>>
74 <PUT .A ,ACRESIDUE (.S !<ACRESIDUE .A>)>>
76 <COND (<N==? .D .D1> <MOVE:ARG .D1 .D>)>