then requesting a BACKTRACE at the debugger prompt gives no information
about where in the user program the problem occurred.
-63:
- Paul Werkowski wrote on cmucl-imp@cons.org 2000-11-15
- I am looking into this problem that showed up on the cmucl-help
- list. It seems to me that the "implementation specific environment
- hacking functions" found in pcl/walker.lisp are completely messed
- up. The good thing is that they appear to be barely used within
- PCL and the munged environment object is passed to cmucl only
- in calls to macroexpand-1, which is probably why this case fails.
- SBCL uses essentially the same code, so if the environment hacking
- is screwed up, it affects us too.
-
64:
Using the pretty-printer from the command prompt gives funny
results, apparently because the pretty-printer doesn't know
SB-EXT:DEFCONSTANT-UNEQL if it is being asked to redefine a
constant to a non-EQL value; CONTINUE and ABORT restarts
respectively change and preserve the value.
+ * fixed bug 63: the code walker, part of the implementation of CLOS,
+ is better at handling symbol macros.
* fixed some bugs revealed by Paul Dietz' test suite:
** NIL is now allowed as a structure slot name.
** arbitrary numbers, not just reals, are allowed in certain
--- /dev/null
+test-passed
(foo 1))))))
(remove-duplicates *expansions*))
(1))
+
+(defun smv (env)
+ (multiple-value-bind (expansion macro-p)
+ (macroexpand 'srlt env)
+ (when macro-p (eval expansion))))
+(defmacro testr (&environment env)
+ `',(getf (smv env) nil))
+
+(deftest macroexpand-all.4
+ (macroexpand-all '(symbol-macrolet ((srlt '(nil zool))) (testr)))
+ (symbol-macrolet ((srlt '(nil zool))) 'zool))
(let ((lexenv (sb!kernel::coerce-to-lexenv env)))
(sb!c::make-lexenv
:default lexenv
+ :vars (when (eql (caar macros) *key-to-walker-environment*)
+ (copy-tree (remove :lexical-var (fourth (cadar macros))
+ :key #'cadr)))
:funs (append (mapcar (lambda (f)
(cons (car f)
(sb!c::make-functional :lexenv lexenv)))
(defun walker-environment-bind-1 (env &key (walk-function nil wfnp)
(walk-form nil wfop)
(declarations nil decp)
- (lexical-variables nil lexp))
- (let ((lock (environment-macro env *key-to-walker-environment*)))
+ (lexical-vars nil lexp))
+ (let ((lock (env-lock env)))
(list
(list *key-to-walker-environment*
- (list (if wfnp walk-function (car lock))
- (if wfop walk-form (cadr lock))
- (if decp declarations (caddr lock))
- (if lexp lexical-variables (cadddr lock)))))))
+ (list (if wfnp walk-function (car lock))
+ (if wfop walk-form (cadr lock))
+ (if decp declarations (caddr lock))
+ (if lexp lexical-vars (cadddr lock)))))))
(defun env-walk-function (env)
(car (env-lock env)))
;;; SBCL-only special forms
(define-walker-template sb!ext:truly-the (nil quote eval))
+;;; FIXME: maybe we don't need this one any more, given that
+;;; NAMED-LAMBDA now expands into (FUNCTION (NAMED-LAMBDA ...))?
(define-walker-template named-lambda walk-named-lambda)
\f
(defvar *walk-form-expand-macros-p* nil)
(body (cddr form)))
(walker-environment-bind
(new-env old-env
- :lexical-variables
+ :lexical-vars
(append (mapcar (lambda (binding)
`(,(car binding)
sb!sys:macro . ,(cadr binding)))
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.0.42"
+"0.8.0.43"