diff --git a/code/defmacro.lisp b/code/defmacro.lisp index 6dac5ce38d9e4e064577f83746dece5cd9293b94..5d8c370838eeb4ff05d9501e0076a9ea54d7b075 100644 --- a/code/defmacro.lisp +++ b/code/defmacro.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/defmacro.lisp,v 1.26 2003/05/03 21:15:38 gerd Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/defmacro.lisp,v 1.27 2003/05/04 13:39:19 gerd Exp $") ;;; ;;; ********************************************************************** ;;; @@ -144,7 +144,7 @@ "&environment only valid at top level of lambda-list."))) (cond ((and (cdr rest-of-args) (symbolp (cadr rest-of-args))) (setf rest-of-args (cdr rest-of-args)) - (push-let-binding (car rest-of-args) env-arg-name nil) + (append-let-binding (car rest-of-args) env-arg-name nil) (setf env-arg-used t)) (t (defmacro-error "&ENVIRONMENT" error-kind name)))) @@ -341,7 +341,7 @@ *system-lets*))) (defun push-let-binding (variable path systemp &optional condition - (init-form *default-default*)) + (init-form *default-default*)) (let ((let-form (if condition `(,variable (if ,condition ,path ,init-form)) `(,variable ,path)))) @@ -349,6 +349,15 @@ (push let-form *system-lets*) (push let-form *user-lets*)))) +(defun append-let-binding (variable path systemp &optional condition + (init-form *default-default*)) + (let ((let-form (if condition + `(,variable (if ,condition ,path ,init-form)) + `(,variable ,path)))) + (if systemp + (setq *system-lets* (nconc *system-lets* (list let-form))) + (setq *user-lets* (nconc *user-lets* (list let-form)))))) + (defun push-optional-binding (value-var init-form supplied-var condition path name error-kind error-fun) (unless supplied-var