3 <ENTRY TRACE UNTRACE TRACE-LIST TRACE-PRINTER
4 IN-PRINT OUT-PRINT IN-BREAK OUT-BREAK
9 <NEWSTRUC TAPPLICABLE LIST
10 TAPP <OR MSUBR FUNCTION>
18 <SETG TRACE-PRINTER PRIN1>
19 <GDECL (TRACE-PRINTER) ATOM>
21 <DEFINE TRACE ("ARGS" ARGL)
22 #DECL ((ARGL) LIST (A) ATOM (VAL) ANY (APP) TAPPLICABLE)
23 <COND (<EMPTY? .ARGL> <>)
24 (<TYPE? <1 .ARGL> ATOM>
27 <MAPF <> ,TRACE-SPEC .ARGL>)>>
29 <DEFINE TRACE-SPEC (ARGL "AUX" A VAL APP (IP <>) (IB <>) (TEST T))
30 #DECL ((ARGL) LIST (A) ATOM (VAL) ANY (APP) TAPPLICABLE)
34 <COND (<OR .IP .IB <OUT-PRINT .APP> <OUT-BREAK .APP>>)
38 <RETURN <COND (<ASSIGNED? APP> .APP)>>)
39 (<TYPE? <1 .ARGL> ATOM>
41 <COND (<AND <NOT <EMPTY? <REST .ARGL>>>
42 <TYPE? <2 .ARGL> FORM LVAL GVAL>>
43 <SET TEST <2 .ARGL>>)>
44 <COND (<=? <SPNAME .A> "BOTH">
45 <COND (<ASSIGNED? APP> <OUT-PRINT .APP .TEST>)
46 (ELSE <SET IP .TEST>)>
47 <COND (<ASSIGNED? APP> <OUT-BREAK .APP .TEST>)
48 (ELSE <SET IB .TEST>)>)
49 (<=? <SPNAME .A> "PRINT">
50 <COND (<ASSIGNED? APP> <OUT-PRINT .APP .TEST>)
51 (ELSE <SET IP .TEST>)>)
52 (<=? <SPNAME .A> "BREAK">
53 <COND (<ASSIGNED? APP> <OUT-BREAK .APP .TEST>)
54 (ELSE <SET IB .TEST>)>)
56 <COND (<GASSIGNED? .A>
57 <COND (<TYPE? <SET VAL ,.A> TAPPLICABLE>
63 <TPRINTER .APP ,TRACE-PRINTER>
65 (<TYPE? .VAL MSUBR FUNCTION>
81 <ERROR CANT-TRACE!-ERRORS .A .VAL>
84 <ERROR NO-VALUE!-ERRORS .A>
87 <ERROR BAD-TRACE-SPECIFICATION!-ERRORS <1 .ARGL>>
89 <COND (<AND <NOT <EMPTY? <SET ARGL <REST .ARGL>>>>
90 <NOT <TYPE? <1 .ARGL> ATOM>>
91 <==? .TEST <1 .ARGL>>>
92 <SET ARGL <REST .ARGL>>)>>>
94 <DEFINE UNTRACE ("TUPLE" AA "AUX" A)
99 #DECL ((TA) TAPPLICABLE)
100 <SETG <TATOM .TA> <TAPP .TA>>
103 <SETG TRACE-LIST ()>)
106 <COND (<EMPTY? .AA> <RETURN>)>
107 <COND (<GASSIGNED? <SET A <1 .AA>>>
108 <REPEAT ((TL ,TRACE-LIST))
109 #DECL ((TL) <LIST [REST TAPPLICABLE]>)
111 <COND (<TYPE? ,.A TAPPLICABLE>
113 <SETG .A <TAPP ,.A>>)>
115 (<==? .A <TATOM <1 .TL>>>
116 <COND (<TYPE? ,.A TAPPLICABLE>
117 <SETG .A <TAPP <1 .TL>>>)>
119 <SETG TRACE-LIST <REST .TL>>
121 (<LENGTH? .TL 1> ;"not in list"
122 <COND (<TYPE? ,.A TAPPLICABLE>
126 (<==? .A <TATOM <2 .TL>>>
127 <COND (<TYPE? ,.A TAPPLICABLE>
128 <SETG .A <TAPP <2 .TL>>>)>
130 <PUTREST .TL <REST .TL 2>>
132 (ELSE <SET TL <REST .TL>>)>>)>
133 <SET AA <REST .AA>>>)>>
135 <DEFINE DETRACE (TAPP)
136 #DECL ((TAPP) TAPPLICABLE)
140 <OUT-BREAK .TAPP <>>>
143 <GDECL (TRACE-LEVEL) FIX>
145 <DEFINE TRACER (APP "TUPLE" ARGS
146 "AUX" (TFUNCT <TAPP .APP>) (TARGS .ARGS) TVALUE
148 #DECL ((APP) TAPPLICABLE (VAL) ANY
149 (TARGS) <SPECIAL TUPLE> (TFUNCT TVALUE) <SPECIAL ANY> (TR) FIX)
151 <COND (<EVAL <IN-PRINT .APP>>
152 <PROG LERR!-INTERRUPTS
153 ((RUN 0) (OUTCHAN ,DEBUG-CHANNEL))
154 #DECL ((OUTCHAN) <SPECIAL CHANNEL>
155 (LERR!-INTERRUPTS) <SPECIAL FRAME>)
158 <CHANNEL-OP .OUTCHAN FRESH-LINE>
159 <AND <G? .TR 0> <INDENT-TO .TR>>
165 <APPLY ,<TPRINTER .APP> .A>>
167 <COND (<EVAL <IN-BREAK .APP>>
168 <PROG LERR!-INTERRUPTS ((OUTCHAN ,DEBUG-CHANNEL)
170 #DECL ((OUTCHAN) <SPECIAL CHANNEL>
171 (LERR!-INTERRUPTS) <SPECIAL FRAME>)
174 <LISTEN IN-BREAK <TATOM .APP> .TARGS>)
176 <LISTEN IN-BREAK <TATOM .APP>>)>>)>
177 <SETG TRACE-LEVEL <+ .TR 1>>
178 <SET TVALUE <APPLY .TFUNCT !.TARGS>>
179 <SETG TRACE-LEVEL .TR>
180 <COND (<EVAL <OUT-PRINT .APP>>
181 <PROG LERR!-INTERRUPTS
182 ((RUN 0) (OUTCHAN ,DEBUG-CHANNEL))
183 #DECL ((OUTCHAN) <SPECIAL CHANNEL>
184 (LERR!-INTERRUPTS) <SPECIAL FRAME>)
187 <CHANNEL-OP .OUTCHAN FRESH-LINE>
188 <AND <G? .TR 0> <INDENT-TO .TR>>
192 <APPLY ,<TPRINTER .APP> .TVALUE>
194 <COND (<EVAL <OUT-BREAK .APP>>
195 <PROG LERR!-INTERRUPTS ((OUTCHAN ,DEBUG-CHANNEL)
197 #DECL ((OUTCHAN) <SPECIAL CHANNEL>
198 (LERR!-INTERRUPTS) <SPECIAL FRAME>)
201 <LISTEN OUT-BREAK <TATOM .APP> .TVALUE>)
203 <LISTEN OUT-BREAK <TATOM .APP>>)>>)>
205 <SETG TRACE-LEVEL .TR>>>
207 <COND (<NOT <FEATURE? "COMPILER">> <APPLYTYPE TAPPLICABLE ,TRACER>)>
210 <GDECL (TRACE-LIST) <LIST [REST TAPPLICABLE]>>
212 <DEFINE TAPPLICABLE-PRINT (TAPP "OPTIONAL" (OUTCHAN .OUTCHAN))
213 #DECL ((TAPP) TAPPLICABLE (OUTCHAN) CHANNEL)
215 <COND (<AND <TYPE? <IN-PRINT .TAPP> ATOM>
216 <TYPE? <OUT-PRINT .TAPP> ATOM>
217 <NOT <IN-BREAK .TAPP>>
218 <NOT <OUT-BREAK .TAPP>>>
220 <PRIN1 <TATOM .TAPP>>)
222 <COND (<IN-PRINT .TAPP>
224 <COND (<NOT <TYPE? <IN-PRINT .TAPP> ATOM>>
226 <PRIN1 <IN-PRINT .TAPP>>)>)>
227 <COND (<IN-BREAK .TAPP>
229 <COND (<NOT <TYPE? <IN-BREAK .TAPP> ATOM>>
231 <PRIN1 <IN-BREAK .TAPP>>)>)>
233 <PRIN1 <TATOM .TAPP>>
234 <COND (<OUT-PRINT .TAPP>
236 <COND (<NOT <TYPE? <OUT-PRINT .TAPP> ATOM>>
238 <PRIN1 <OUT-PRINT .TAPP>>)>)>
239 <COND (<OUT-BREAK .TAPP>
241 <COND (<NOT <TYPE? <OUT-BREAK .TAPP> ATOM>>
243 <PRIN1 <OUT-BREAK .TAPP>>)>)>)>
246 <COND (<NOT <FEATURE? "COMPILER">> <PRINTTYPE TAPPLICABLE ,TAPPLICABLE-PRINT>)>