X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcode%2Fboot-extensions.lisp;h=5f0ae6ac93aec8dc9f4db5e64ed16d383c311830;hb=4fc9d21ae1d8a6a2f8ff70f589d5da103203de13;hp=b4eabcc733a9729bceada08619c6e2ce1cb682de;hpb=b1de52969f584c63d43fb35da4a8a6a4e0e619f0;p=sbcl.git diff --git a/src/code/boot-extensions.lisp b/src/code/boot-extensions.lisp index b4eabcc..5f0ae6a 100644 --- a/src/code/boot-extensions.lisp +++ b/src/code/boot-extensions.lisp @@ -9,7 +9,7 @@ ;;;; provided with absolutely no warranty. See the COPYING and CREDITS ;;;; files for more information. -(in-package "SB!EXT") +(in-package "SB!IMPL") ;;; Lots of code wants to get to the KEYWORD package or the ;;; COMMON-LISP package without a lot of fuss, so we cache them in @@ -155,13 +155,12 @@ ;;; ONCE-ONLY is a utility useful in writing source transforms and ;;; macros. It provides a concise way to wrap a LET around some code ;;; to ensure that some forms are only evaluated once. +;;; +;;; Create a LET* which evaluates each value expression, binding a +;;; temporary variable to the result, and wrapping the LET* around the +;;; result of the evaluation of BODY. Within the body, each VAR is +;;; bound to the corresponding temporary variable. (defmacro once-only (specs &body body) - #!+sb-doc - "Once-Only ({(Var Value-Expression)}*) Form* - Create a Let* which evaluates each Value-Expression, binding a temporary - variable to the result, and wrapping the Let* around the result of the - evaluation of Body. Within the body, each Var is bound to the corresponding - temporary variable." (iterate frob ((specs specs) (body body)) @@ -174,7 +173,7 @@ (let* ((name (first spec)) (exp-temp (gensym (symbol-name name)))) `(let ((,exp-temp ,(second spec)) - (,name (gensym "OO-"))) + (,name (gensym "ONCE-ONLY-"))) `(let ((,,name ,,exp-temp)) ,,(frob (rest specs) body))))))))