1.0.12.12: sequence optimizations: SUBSEQ, part 2
[sbcl.git] / src / code / defboot.lisp
index b7d3c0f..5035116 100644 (file)
 \f
 ;;;; IN-PACKAGE
 
-(defmacro-mundanely in-package (package-designator)
-  `(eval-when (:compile-toplevel :load-toplevel :execute)
-     (setq *package* (find-undeleted-package-or-lose ',package-designator))))
+(defmacro-mundanely in-package (string-designator)
+  (let ((string (string string-designator)))
+    `(eval-when (:compile-toplevel :load-toplevel :execute)
+       (setq *package* (find-undeleted-package-or-lose ,string)))))
 \f
 ;;;; MULTIPLE-VALUE-FOO
 
     (style-warn "redefining ~S in DEFUN" name))
   (setf (sb!xc:fdefinition name) def)
 
+  (sb!c::note-name-defined name :function)
+
   ;; FIXME: I want to do this here (and fix bug 137), but until the
   ;; breathtaking CMU CL function name architecture is converted into
   ;; something sane, (1) doing so doesn't really fix the bug, and
   #+nil (setf (%fun-name def) name)
 
   (when doc
-    (setf (fdocumentation name 'function) doc))
+    (setf (fdocumentation name 'function) doc)
+    #!+sb-eval
+    (when (typep def 'sb!eval:interpreted-function)
+      (setf (sb!eval:interpreted-function-documentation def)
+            doc)))
   name)
 \f
 ;;;; DEFVAR and DEFPARAMETER
 ;;; destructuring mechanisms.
 (defmacro-mundanely dotimes ((var count &optional (result nil)) &body body)
   (cond ((numberp count)
-         `(do ((,var 0 (1+ ,var)))
-              ((>= ,var ,count) ,result)
-            (declare (type unsigned-byte ,var))
-            ,@body))
-        (t (let ((v1 (gensym)))
-             `(do ((,var 0 (1+ ,var)) (,v1 ,count))
-                  ((>= ,var ,v1) ,result)
-                (declare (type unsigned-byte ,var))
-                ,@body)))))
-
-(defun filter-dolist-declarations (decls)
-  (mapcar (lambda (decl)
-            `(declare ,@(remove-if
-                         (lambda (clause)
-                           (and (consp clause)
-                                (or (eq (car clause) 'type)
-                                    (eq (car clause) 'ignore))))
-                         (cdr decl))))
-          decls))
+        `(do ((,var 0 (1+ ,var)))
+             ((>= ,var ,count) ,result)
+           (declare (type unsigned-byte ,var))
+           ,@body))
+        (t
+         (let ((c (gensym "COUNT")))
+           `(do ((,var 0 (1+ ,var))
+                 (,c ,count))
+                ((>= ,var ,c) ,result)
+              (declare (type unsigned-byte ,var)
+                       (type integer ,c))
+              ,@body)))))
 
 (defmacro-mundanely dolist ((var list &optional (result nil)) &body body)
   ;; We repeatedly bind the var instead of setting it so that we never