X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fboot-extensions.lisp;h=5f0ae6ac93aec8dc9f4db5e64ed16d383c311830;hb=4fc9d21ae1d8a6a2f8ff70f589d5da103203de13;hp=550641169b2a9c3d945a720a05d494a14d22a0b1;hpb=95a6db7329b91dd90d165dd4057b9b5098d34aa2;p=sbcl.git diff --git a/src/code/boot-extensions.lisp b/src/code/boot-extensions.lisp index 5506411..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 @@ -26,7 +26,7 @@ ;;; a helper function for various macros which expect clauses of a ;;; given length, etc. ;;; -;;; KLUDGE: This implementation will hang on circular list structure. +;;; FIXME: This implementation will hang on circular list structure. ;;; Since this is an error-checking utility, i.e. its job is to deal ;;; with screwed-up input, it'd be good style to fix it so that it can ;;; deal with circular list structure. @@ -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))))))))