0.6.10.13:
[sbcl.git] / src / code / boot-extensions.lisp
index 5506411..5f0ae6a 100644 (file)
@@ -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.
 ;;; 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))
          (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))))))))
 \f