[Openmcl-cvs-notifications] r12995 - in /trunk/source/lib: level-2.lisp macros.lisp
gz at clozure.com
gz at clozure.com
Sat Oct 10 18:11:09 EDT 2009
Author: gz
Date: Sat Oct 10 18:11:09 2009
New Revision: 12995
Log:
svn ci -m "Merge r12980, replacing r12646 (which defeated type optimization=
s in addition to being buggy)"
Modified:
trunk/source/lib/level-2.lisp
trunk/source/lib/macros.lisp
Modified: trunk/source/lib/level-2.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lib/level-2.lisp (original)
+++ trunk/source/lib/level-2.lisp Sat Oct 10 18:11:09 2009
@@ -48,7 +48,6 @@
; This is so we can be pedantic about binding &WHOLE/&ENVIRONMENT args
; that have been scarfed out of a macro-like lambda list.
; The returned value is supposed to be suitable for splicing ...
-#+not-used
(defun hoist-special-decls (sym decls)
(when sym
(dolist (decl decls)
Modified: trunk/source/lib/macros.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lib/macros.lisp (original)
+++ trunk/source/lib/macros.lisp Sat Oct 10 18:11:09 2009
@@ -177,68 +177,28 @@
(defmacro %vstack-block (spec &body forms)
`(%stack-block (,spec) , at forms))
=
-
-
-(eval-when (:compile-toplevel :load-toplevel :execute)
-(defun extract-type-decl-for-dolist-var (var decls env)
- (if (null decls)
- (values nil nil nil)
- (let* ((declared-type-p nil))
- (collect ((new-decls)
- (declared-types))
- (dolist (declform decls)
- ;; (assert (eq (car declform) 'declare))
- (dolist (decl (cdr declform))
- (if (atom decl)
- (new-decls decl)
- (let* ((spec (car decl)))
- (if (specifier-type-if-known spec env)
- (setq spec 'type
- decl `(type , at decl)))
- (if (eq spec 'type)
- (destructuring-bind (typespec &rest vars) (cdr decl)
- (cond ((member var vars :test #'eq)
- (setq declared-type-p t)
- (declared-types typespec)
- (new-decls `(type ,typespec ,@(remove var vars)=
)))
- (t (new-decls decl))))
- (new-decls decl))))))
- (if (not declared-type-p)
- (values nil nil (new-decls))
- (values t
- (let* ((declared-type (declared-types)))
- (if (cdr declared-type)
- `(and , at declared-type)
- (car declared-type)))
- (new-decls)))))))
-)
-
-
(defmacro dolist ((varsym list &optional ret) &body body &environment env)
(if (not (symbolp varsym)) (signal-program-error $XNotSym varsym))
(let* ((toplab (gensym))
(tstlab (gensym))
(lstsym (gensym)))
(multiple-value-bind (forms decls) (parse-body body env nil)
- (multiple-value-bind (var-type-p vartype other-decls)
- (extract-type-decl-for-dolist-var varsym decls env)
- (if var-type-p
- (setq forms `((locally (declare (type ,vartype ,varsym)) (tagbod=
y , at forms)))))
- (if other-decls
- (setq other-decls `((declare , at other-decls))))
- `(block nil
- (let* ((,lstsym ,list) ,varsym)
- ,@(if var-type-p `((declare (type (or null ,vartype) ,varsym))=
))
- , at other-decls
- (tagbody
- (go ,tstlab)
- ,toplab
- (setq ,lstsym (cdr (the list ,lstsym)))
- , at forms
- ,tstlab
- (setq ,varsym (car ,lstsym))
- (if ,lstsym (go ,toplab)))
- ,@(if ret `((progn ,ret)))))))))
+ `(block nil
+ (let* ((,lstsym ,list))
+ (tagbody
+ (go ,tstlab)
+ ,toplab
+ (let ((,varsym (car ,lstsym)))
+ , at decls
+ (tagbody
+ , at forms)
+ (setq ,lstsym (cdr (the list ,lstsym))))
+ ,tstlab
+ (if ,lstsym (go ,toplab))))
+ ,@(if ret `((let ((,varsym nil))
+ ,@(hoist-special-decls varsym decls)
+ (declare (ignore-if-unused ,varsym))
+ ,ret)))))))
=
=
(defmacro dovector ((varsym vector &optional ret) &body body &environment =
env)
More information about the Openmcl-cvs-notifications
mailing list