[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
- To: WGD at MIT-MC
- From: Kent M. Pitman <KMP at MIT-MC>
- Date: Mon, 1 Dec 80 02:59:00 GMT
- Cc: BUG-LISP at MIT-MC, ALAN at MIT-MC, CWH at MIT-MC
- Original-date: 30 November 1980 21:59-EST
Date: 26 November 1980 22:58-EST
From: William G. Dubuque <WGD>
(defmacro foo () nil) then do (foo) and you get infinite recursion.
This is the result of a bad interaction between the NIL return value --
which fights with the (OR (MACROFETCH ...) ; NIL falls through!
(MACROMEMO ...)) ; expansion returned
and the fact that the thing being memo-ized isn't CDR'd as it would be
in (DEFMACRO FOO (X) ...) =>
(DEFUN FOO MACRO (FOOMACROARG)
(OR ... (MACROMEMO ... (PROGN ... (LET (((X) (CDR FOOMACROARG))))) ...)))
which ends up displacing the source form returning
(MACROEXPANDED A (0 . 0) (A) (MACROEXPANDED A (0 . 0) (A) (MACROEXPANDED ...)))
which is circular with respect to its expansion... I can't fathom enough of
the code to suggest a fix or even to more precisely characterize the problem.
I will point out that I was expecting (DEFUN FOO (&WHOLE X) NIL) to manifest
the same bug, but it doesn't -- you can't even DEFINE that one without getting
a PDL-OVERFLOW ...
Something in the new DEFMAX is still losing badly.