X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fprimordial-extensions.lisp;h=2677f6c6abc8c15ab9dda6df26e9bd1adf855236;hb=2c5a710f4da100f8aa9c7262fa76395f73ee4307;hp=95a70940787255f4d2843dada1cf7e861485e385;hpb=08d05510b51708853ca998154d8096b21d85edab;p=sbcl.git diff --git a/src/code/primordial-extensions.lisp b/src/code/primordial-extensions.lisp index 95a7094..2677f6c 100644 --- a/src/code/primordial-extensions.lisp +++ b/src/code/primordial-extensions.lisp @@ -145,7 +145,9 @@ (declare (inline ,fun)) (etypecase ,var ,@(loop for type in types - collect `(,type (,fun (the ,type ,var)))))))) + ;; TRULY-THE allows transforms to take advantage of the type + ;; information without need for constraint propagation. + collect `(,type (,fun (truly-the ,type ,var)))))))) ;;; Automate an idiom often found in macros: ;;; (LET ((FOO (GENSYM "FOO")) @@ -259,7 +261,7 @@ dfd)) ;;; Give names to elements of a numeric sequence. -(defmacro defenum ((&key (prefix "") (suffix "") (start 0) (step 1)) +(defmacro defenum ((&key (start 0) (step 1)) &rest identifiers) (let ((results nil) (index 0) @@ -267,11 +269,11 @@ (step (eval step))) (dolist (id identifiers) (when id - (multiple-value-bind (root docs) + (multiple-value-bind (sym docs) (if (consp id) (values (car id) (cdr id)) (values id nil)) - (push `(def!constant ,(symbolicate prefix root suffix) + (push `(def!constant ,sym ,(+ start (* step index)) ,@docs) results)))