[Ecls-list] Detection and handling of compiler conditions
Juan Jose Garcia-Ripoll
juanjose.garciaripoll at googlemail.com
Wed Aug 20 20:56:15 UTC 2008
- WITH-COMPILATION-UNIT allows the user to set up handlers for different
compiler conditions, including errors, warnings and simple notes. The
recommended procedure is to use HANDLER-BIND and _NOT_ to transfer control
out of the handler, but to defer to the default ones.
(use-package :c)
(let ((warnings nil))
(with-compilation-unit ()
(handler-bind ((compiler-error #'(lambda (c)
(push c warnings)
(abort)))
(compiler-message #'(lambda (c)
(push c warnings)
(muffle-warning))))
(let ((*compile-verbose* nil))
(compile-file "foo.lsp"))))
(format t "~&;;; Printing compiler messages")
(loop for m in (nreverse warnings)
for i from 0
do (format t "~&~@<;;; ~@;Message #~D~%~A~:>" i m)))
Applied to this file: foo.lsp
(defun foo (x)
(print x t extra-argument))
Gives the following
;;; Printing messages
;;; Message #0
;;; Variable EXTRA-ARGUMENT was undefined. Compiler assumes it is a global.
;;; Message #1
;;; Invoking external command:
;;; ;;; gcc -g -O2 -fPIC -fno-common -Ddarwin -O
"-I/Users/jjgarcia/include/" -w -c
"/Users/jjgarcia/src/ecl/build/foo.c" -o
"/Users/jjgarcia/src/ecl/build/foo.o"
;;; Message #2
;;; Invoking external command:
;;; ;;; gcc -o "/Users/jjgarcia/src/ecl/build/foo.fas"
-L"/Users/jjgarcia/lib/" "/Users/jjgarcia/src/ecl/build/foo.o"
-bundle -lecl -lm
Comments on the implementation are welcome :-)
--
Instituto de Física Fundamental
CSIC, Serrano, 113, Madrid 28040 (Spain)
http://juanjose.garciaripoll.googlepages.com
More information about the ecl-devel
mailing list