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: ...
On 3/21/14, 4:48, Douglas Katzman wrote:
(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)))
Confirmed and filed as [ticket-351][]. Thanks for the bug report.
[ticket-351]: http://abcl.org/trac/ticket/351
armedbear-devel@common-lisp.net