... until the collector arrives ...

This "blog" is really just a scratchpad of mine. There is not much of general interest here. Most of the content is scribbled down "live" as I discover things I want to remember. I rarely go back to correct mistakes in older entries. You have been warned :)


A few days ago I reported to Franz a problem with the following code:

(defun make-fn (arguments)
   #'(lambda ()
        (labels ((doit (a b c)
                    (try-something-else a b c) )
                 (try-something-else (a b c)
                    (list 666 a b c) ))
           #'(lambda ()
                (apply #'doit arguments) )

(defvar *function* nil)

(setf it (funcall (make-fn '(1 2 3))))
(funcall it)

(compile 'make-fn)
(setf it (funcall (make-fn '(1 2 3))))
(funcall it)

The second FUNCALL, after compiling MAKE-FN, results in a error reporting an invalid object type or some other incongruous message.  Franz acknowledged the bug as a compiler optimization bug and suggested replacing APPLY with a call to our function of this type:

(defun my-apply (function arguments)
   (apply function arguments) )

This fixed it.  Franz promised that the bug will be fixed in "some future version of ACL".

Blog Archive