diff options
| -rw-r--r-- | sb-eval2.lisp | 8 | 
1 files changed, 7 insertions, 1 deletions
| diff --git a/sb-eval2.lisp b/sb-eval2.lisp index f5fb4dd..db4ded3 100644 --- a/sb-eval2.lisp +++ b/sb-eval2.lisp @@ -468,6 +468,12 @@                ,@body))       (,loop-var ,@(mapcar #'second bindings)))) +(defmacro dnlet (loop-var bindings &body body) +  `(labels ((,loop-var ,(mapcar #'first bindings) +              ,@body)) +     (declare (dynamic-extent #',loop-var)) +     (,loop-var ,@(mapcar #'second bindings)))) +  (declaim (ftype (function * eval-closure) prepare-lambda))  (defun prepare-lambda (lambda-form context &key (name nil namep))    (destructuring-bind (lambda-list &rest exprs) lambda-form @@ -536,7 +542,7 @@                   ;; All this ELT and LENGTH stuff is not as                   ;; inefficient as it looks.  SBCL transforms                   ;; &rest into &more here. -                 (nlet iter +                 (dnlet iter                       ((rest                         (when (or restp keyp)                           (loop for i | 
