6 <USE "COMPDEC" "CODGEN" "CHKDCL" "MIMGEN" "ADVMESS" "STRGEN">
9 "OPTIONAL" (NOTF <>) (BRANCH <>) (DIR <>) (SETF <>)
10 "AUX" (STR <2 <KIDS .N>>) (THING <1 <KIDS .N>>)
11 (TYP <RESULT-TYPE .STR>) (TPS <STRUCTYP .TYP>)
12 (FLS <==? .W FLUSHED>) (SDIR .DIR)
13 (TTYP <RESULT-TYPE .THING>) TYPTMP VAL-TEMP
14 (ETY <GET-ELE-TYPE .TYP ALL>)
15 (TWIN <TYPESAME .ETY .TTYP>)
17 <COND (<AND .FLS .BRANCH> .BRANCH) (ELSE <MAKE-TAG>)>)
18 STRD NUMD TEM TY (B3 <MAKE-TAG>) (RW .W)
19 (FC <0? <CHTYPE <MINL .TYP> FIX>>) (LP <MAKE-TAG>) B4
21 #DECL ((N STR THING) NODE (DCOD) FIX (B2 B3 B4) ATOM (TPS) <OR ATOM FALSE>
22 (DEAD) <PRIMTYPE LIST> (NK FLS DIR SDIR NOTF BRANCH) <OR FALSE ATOM>)
23 <AND .NOTF <SET DIR <NOT .DIR>>>
24 <SET TEM <COND (<AND <TYPE? .W TEMP> <L=? <TEMP-REFS .W> 0>> .W)
26 <COND (<AND <NOT <SIDE-EFFECTS .N>>
27 <NOT <MEMQ <NODE-TYPE .STR> ,SNODES>>
28 <MEMQ <NODE-TYPE .THING> ,SNODES>>
29 <SET STRD <GEN .STR .TEM>>
30 <SET NUMD <GEN .THING DONT-CARE>>)
32 <SET NUMD <GEN .THING DONT-CARE>>
33 <SET NUMD <INTERF-CHANGE .NUMD .STR>>
34 <SET STRD <GEN .STR .TEM>>)>
35 <COND (<OR <NOT <TYPE? .STRD TEMP>> <G? <TEMP-REFS .STRD> 1>>
36 <COND (<AND <NOT .FLS> <NOT .NOTF> .TPS <N==? .TPS <ISTYPE? .TYP>>>
38 <IEMIT `CHTYPE .STRD <FORM `TYPE-CODE .TPS> =
39 <SET STRD <GEN-TEMP .TPS>>>)
41 <SET STRD <MOVE-ARG .STRD <GEN-TEMP <>>>>)>)
42 (<AND <NOT .FLS> <NOT .NOTF> .TPS <N==? .TPS <ISTYPE? .TYP>>>
43 <IEMIT `CHTYPE .STRD <FORM `TYPE-CODE .TPS> = .STRD>)>
44 <COND (<AND <NOT .TWIN> <SET TY <ISTYPE? .ETY>>>
45 <GEN-TYPE? .NUMD .TY <COND (.DIR .B3) (ELSE .B2)> <>>
47 <COND (<AND <NOT <SET TTYP <ISTYPE? .TTYP>>> <NOT .TY>>
48 <IEMIT `TYPE .NUMD = <SET TYPTMP <GEN-TEMP>>>)>
49 <COND (<AND .BRANCH <NOT .FLS> .DIR <NOT .NOTF> <=? .W .STRD> <NOT .SETF>>
53 <EMPTY-CHECK .TPS .STRD .TPS T <COND (.DIR .B3) (ELSE .B2)>>)
54 (ELSE <IEMIT `EMPTY? .STRD + <COND (.DIR .B3) (ELSE .B2)>>)>)>
55 <IEMIT `LOOP !<COND (<TYPE? .NUMD TEMP>
56 <COND (<ASSIGNED? TYPTMP>
57 ((<TEMP-NAME .NUMD> VALUE)
58 (<TEMP-NAME .TYPTMP> VALUE)))
59 (ELSE ((<TEMP-NAME .NUMD> VALUE)))>)
60 (<ASSIGNED? TYPTMP> ((<TEMP-NAME .TYPTMP> VALUE)))
62 <COND (<NOT .TPS> (<TEMP-NAME .STRD> LENGTH VALUE TYPE))
63 (<==? .TPS LIST> (<TEMP-NAME .STRD> VALUE))
64 (ELSE (<TEMP-NAME .STRD> LENGTH VALUE))>>
66 <COND (.TPS <NTH-DO .TPS .STRD <SET VAL-TEMP <GEN-TEMP>> 1>)
67 (ELSE <IEMIT `NTH1 .STRD = <SET VAL-TEMP <GEN-TEMP>>>)>
68 <COND (<ASSIGNED? TYPTMP> <GEN-TYPE? .VAL-TEMP .TYPTMP .NXT-TAG <>>)
69 (<NOT .TWIN> <GEN-TYPE? .VAL-TEMP .TTYP .NXT-TAG <>>)>
70 <IEMIT `VEQUAL? .VAL-TEMP <ATOMCHK .NUMD> + <COND (.DIR .B2) (ELSE .B3)>>
73 <COND (.TPS <REST-DO .TPS .STRD .STRD 1>)
74 (ELSE <IEMIT `REST1 .STRD = .STRD>)>
75 <COND (.TPS <EMPTY-CHECK .TPS .STRD .TPS <> .LP>)
76 (ELSE <IEMIT `EMPTY? .STRD - .LP>)>
78 <COND (<ASSIGNED? TYPTMP> <FREE-TEMP .TYPTMP>)>
79 <COND (<AND .BRANCH .FLS>
80 <COND (<NOT .DIR> <BRANCH-TAG .B2> <LABEL-TAG .B3>)
81 (ELSE <LABEL-TAG .B3>)>
83 (<OR .NOTF <AND <NOT .SETF> <NOT <==? <NOT .BRANCH> <NOT .DIR>>>>>
84 <COND (<==? .STRD .W> <DEALLOCATE-TEMP .STRD>)
85 (ELSE <FREE-TEMP .STRD>)>
86 <COND (<AND .NOTF .DIR> <BRANCH-TAG .B3>)>
88 <MOVE-ARG <REFERENCE .SDIR>
90 <COND (<==? .W DONT-CARE> <GEN-TEMP <>>) (ELSE .W)>>>
94 <MOVE-ARG <REFERENCE <NOT .SDIR>> .W>)>
98 <COND (<==? .B2 .BRANCH>
100 <SET W <MOVE-ARG .STRD .W>>)
104 <DEALLOCATE-TEMP <MOVE-ARG <REFERENCE <>> .W>>)>
107 <SET W <MOVE-ARG .STRD .W>>)
111 <SET W <MOVE-ARG .STRD .W>>
116 <MOVE-ARG <REFERENCE <>> .W>)>)>)
118 <DEALLOCATE-TEMP .STRD>
121 <MOVE-ARG <REFERENCE <>>
122 <COND (<==? .W DONT-CARE> .STRD)
124 <COND (<==? .W .STRD>
129 <BRANCH-TAG <SET B4 <MAKE-TAG>>>
131 <SET W <MOVE-ARG .STRD .W>>
132 <LABEL-TAG .B4>)>)>)>