Hi William (or is it Martin?),
On Sat, Jun 26, 2010 at 3:51 PM, William Wadsworth will.wadsworth.10@gmail.com wrote:
Hi,
It appears that the compiler mistakenly optimizes out local functions in, say, definer macros. Below is a transcript of a sample session that clarifies the problem:
CL-USER(1): (defmacro define-fn (name &body body) `(defun ,name () (flet ((%one () 1)) ,@body))) DEFINE-FN CL-USER(2): (defmacro do-add1 () `(%one)) DO-ADD1 CL-USER(3): (define-fn fn1 (do-add1)) ; Note: deleting unused local function FLET %ONE FN1 CL-USER(4): (fn1) #<THREAD "interpreter" {6DDDCF}>: Debugger invoked on condition of type UNDEFINED-FUNCTION The function %ONE is undefined. Restarts: 0: CONTINUE Try again. 1: USE-VALUE Specify a function to call instead. 2: RETURN-VALUE Return one or more values from the call to %ONE. 3: TOP-LEVEL Return to top level. [1] CL-USER(5): :res
Thanks for the nice and small report again!
Just a minute ago, I committed a fix for your error on trunk. If you find more issues, please don't hesitate to report them!
Bye,
Erik.