[armedbear-devel] Compiler loses lexical macro in (eval-when (:compile-toplevel ...))
Douglas Katzman
dougk at google.com
Fri Mar 21 03:48:31 UTC 2014
Hi.
This code fragment works with (LOAD "/tmp/foo.lisp") but not (COMPILE-FILE
"/tmp/foo.lisp")
(eval-when (:compile-toplevel :load-toplevel :execute)
(defvar *count* 0)
(macrolet ((something (sym) `(setf (get ,sym 'uniqueid) (incf *count*))))
(defun register-it (x) (something x))))
(eval-when (:compile-toplevel :execute)
(format t "~&OK so far~%")
(register-it :foo))
(eval-when (:compile-toplevel :execute)
(format t "~&Got ~D~%" (symbol-plist :foo)))
Armed Bear Common Lisp 1.3.0
Java 1.7.0_51 Oracle Corporation
Java HotSpot(TM) 64-Bit Server VM
Low-level initialization completed in 0.258 seconds.
Startup completed in 1.231 seconds.
Type ":help" for a list of available commands.
CL-USER(1): (compile-file "/tmp/foo.lisp")
; Compiling /private/tmp/foo.lisp ...
; (DEFVAR *COUNT* ...)
; (DEFUN REGISTER-IT ...)
OK so far
#<THREAD "interpreter" {3A284BEE}>: Debugger invoked on condition of type
UNDEFINED-FUNCTION
The function SOMETHING is undefined.
Restarts:
...
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/armedbear-devel/attachments/20140320/d72a2393/attachment.html>
More information about the armedbear-devel
mailing list