[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

eval'd macros



    Date: Mon, 3 Feb 1986  20:36 EST
    From: "Scott E. Fahlman" <Fahlman@C.CS.CMU.EDU>


	(defun fn () (mac))            ;==> FN
	(defmacro mac () `'foo)        ;==> MAC
	(fn)                           ;==> ***Error***

    You don't say whether the problem you described occurs in the
    interpreter or the compiler.  Your example certainly is not required to
    work when compiled because the macro definition follows the use.  In my
    opinion, this should work without an error in the interpreter.  Hacking
    in the interpreter would be fairly awkward if it didn't.  However, the
    fourth paragraph on page 143 seems to give implementors permission to do
    compiler-like macro expansion when a defun is first seen.  I wouldn't
    want to use such an implementation, but it probably is legal as the
    manual currently stands.

It should probably still work if compile-like macro expansion is done at
definition time.  If the system goes further and actually DOES compile
the defun, then I would consider it a user-interface bug that the
compiler doesn't tell the user that it couldn't find a function call
MAC.

(defun fn () (mac))
FN
(compile 'fn)
The following functions were referenced but don't seem defined:
 MAC referenced by FN
FN