;----------- macros for the compiler -------------
(declare (special old-top-level compiler-name
readtable original-readtable raw-readtable
vps-include vps-crap vp-sfile
fl-asm fl-macl faslflag fl-inter
k-macros k-lams k-nlams k-free internal-macros
k-fnum k-current k-code k-ptrs k-ftype k-pid
x-con x-asg x-dont ; check on this
w-vars w-labs w-ret w-save
x-spfh x-spfn x-spfq x-spf
w-name w-bv w-locs w-atmt cm-alv v-cnt
(def $pr$ (macro (x) `(patom ,(cadr x) vp-sfile)))
`(progn (putprop ,atm ,arg ,prp) ,atm))
(cadr x) (caddr x) (cadddr x))))
; these are the compiler message producing macros. The form is
; (comp-xxxx val1 val2 val3 ... valn) , all values are printed according
; to this scheme. If vali is an atom, it is patomed, if vali is a
; list, it is evaluated and printed. If vali is N a newline is printed
; the name of the current function is printed first
; after comp-err prints the message, it does a throw to Comp-err .
; errors are preceeded by Error:
; warnings by %Warning: and
; The message is sent to the message file
`( Error: (or k-current) ": " ,@(cdr l) N))
(throw nil Comp-error))))
`( %Warning: (or k-current) ": " ,@(cdr l) N)))))
`( %Note: ,@(cdr l) N)))))
(setq er-fatal (add1 er-fatal)))))
; prints the lst to the given port. The lst is printed in the manner
; described above, that is atoms are patomed, and lists are evaluated
; and printed, and N prints a newline. The output is always drained.
(eval-when (compile eval)
(cond ((null lis) `((drain)))
(t `(,(cond ((atom (car lis))
(t `(patom ',(car lis)))))
,@(comp-msg (cdr lis))))))))