[movitz-cvs] CVS movitz/losp/muerte
ffjeld
ffjeld at common-lisp.net
Sat May 6 20:31:23 UTC 2006
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory clnet:/tmp/cvs-serv14958
Modified Files:
more-macros.lisp
Log Message:
Rewrite more-macros to use adjoin.
--- /project/movitz/cvsroot/movitz/losp/muerte/more-macros.lisp 2006/05/05 20:42:04 1.35
+++ /project/movitz/cvsroot/movitz/losp/muerte/more-macros.lisp 2006/05/06 20:31:23 1.36
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef at acm.org>
;;;; Created at: Fri Jun 7 15:05:57 2002
;;;;
-;;;; $Id: more-macros.lisp,v 1.35 2006/05/05 20:42:04 ffjeld Exp $
+;;;; $Id: more-macros.lisp,v 1.36 2006/05/06 20:31:23 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -62,29 +62,19 @@
(not (typep (movitz::movitz-binding place env) 'movitz::symbol-macro-binding)))
`(setq ,place (cons ,item ,place))
form))
-
-(defmacro pushnew (&environment env item place &key (key nil keyp) (test nil testp) (test-not nil test-notp))
- (let ((testing
- (cond
- (testp (list :test test))
- (test-notp (list :test-not test-not))))
- (keying
- (cond
- (keyp (list :key key)))))
- (multiple-value-bind (tmp-vars tmp-var-init-forms store-vars setter-form getter-form)
- (get-setf-expansion place env)
- (assert (= 1 (length store-vars)) ()
- "Can't pushnew a place with ~D cells." (length store-vars))
- (let ((store-var (first store-vars))
- (item-var (gensym "push-item-")))
- `(let ((,item-var ,item)
- ,@(mapcar #'list tmp-vars tmp-var-init-forms))
- (let ((old-value ,getter-form))
- (if (not (member ,item-var old-value , at keying , at testing))
- (let ((,store-var (cons ,item-var old-value)))
- ,setter-form)
- old-value)))))))
-
+
+(defmacro pushnew (&environment env item place &rest key-test-args)
+ (multiple-value-bind (tmp-vars tmp-var-init-forms store-vars setter-form getter-form)
+ (get-setf-expansion place env)
+ (assert (= 1 (length store-vars)) ()
+ "Can't pushnew a place with ~D cells." (length store-vars))
+ (let ((store-var (first store-vars))
+ (item-var (gensym "push-item-")))
+ `(let ((,item-var ,item)
+ ,@(mapcar #'list tmp-vars tmp-var-init-forms))
+ (let ((,store-var (adjoin ,item-var ,getter-form , at key-test-args)))
+ ,setter-form)))))
+
(defmacro remf (&environment env place indicator)
(multiple-value-bind (tmp-vars tmp-var-init-forms store-vars setter-form getter-form)
(get-setf-expansion place env)
More information about the Movitz-cvs
mailing list