Pascal J.Bourguignon <pjb@...> writes:
> Wrote file /local/src/sbcl/sbcl/obj/from-host/src/compiler/node.lisp-obj-tmp
> The following functions were used but not defined:
> SB!C::CONT-NUM SB!C::MAKE-LOOP SB!KERNEL:SPECIFIER-TYPE
> SB!KERNEL:MAKE-SINGLE-VALUE-TYPE SB!C::LEXENV-POLICY
> The following special variables were not defined:
> SB!C::HEAD
> 0 errors, 1 warning
This is coming from, I think, the slot initform for OUTER-LOOP in
DEFSTRUCT COMPONENT. If you change that defstruct to use instead an
&aux variable for OUTER-LOOP
(:constructor make-component
(head tail &aux (last-block tail)
(outer-loop (make-loop :kind :outer :head head))))
... some lines later ...
(outer-loop (missing-arg) :type cloop)
this should solve the problem.
-devel: this really ought to have been caught by sbcl itself. Any
ideas why it wasn't? There's a paragraph under DEFSTRUCT in the CLHS
which specifically says that automatically constructed constructors
shouldn't use slot names as lambda variables, but what happens for
explicitly-constructed ones... in any case, I'm pretty sure that the
CLHS implies that the initform should be executed in the lexical
environment of the defstruct form, not of the constructor...
Cheers,
Christophe
|