comparison lisp/cl-macs.el @ 5468:a9094f28f9a9

Merge with trunk.
author Mats Lidell <matsl@xemacs.org>
date Wed, 19 Jan 2011 22:35:23 +0100
parents 89331fa1c819 ba62563ec7c7
children 0af042a0c116
comparison
equal deleted inserted replaced
5457:4ed2dedf36a1 5468:a9094f28f9a9
3338 (if (and (cl-simple-expr-p a) (cl-simple-expr-p list) 3338 (if (and (cl-simple-expr-p a) (cl-simple-expr-p list)
3339 (not (memq :key keys))) 3339 (not (memq :key keys)))
3340 (list 'if (list* 'member* a list keys) list (list 'cons a list)) 3340 (list 'if (list* 'member* a list keys) list (list 'cons a list))
3341 form)) 3341 form))
3342 3342
3343 (define-compiler-macro remove (item sequence) 3343 (define-compiler-macro delete (&whole form &rest args)
3344 `(remove* ,item ,sequence :test #'equal)) 3344 (symbol-macrolet
3345 3345 ((not-constant '#:not-constant))
3346 (define-compiler-macro remq (item sequence) 3346 (let ((cl-const-expr-val (cl-const-expr-val (nth 1 form) not-constant)))
3347 `(remove* ,item ,sequence :test #'eq)) 3347 (if (and (cdr form) (not (eq not-constant cl-const-expr-val))
3348 3348 (or (symbolp cl-const-expr-val) (fixnump cl-const-expr-val)
3349 (characterp cl-const-expr-val)))
3350 (cons 'delete* (cdr form))
3351 `(delete* ,@(cdr form) :test #'equal)))))
3352
3353 (define-compiler-macro delq (&whole form &rest args)
3354 (symbol-macrolet
3355 ((not-constant '#:not-constant))
3356 (let ((cl-const-expr-val (cl-const-expr-val (nth 1 form) not-constant)))
3357 (if (and (cdr form) (not (eq not-constant cl-const-expr-val))
3358 (not (cl-non-fixnum-number-p cl-const-expr-val)))
3359 (cons 'delete* (cdr form))
3360 `(delete* ,@(cdr form) :test #'eq)))))
3361
3362 (define-compiler-macro remove (&whole form &rest args)
3363 (symbol-macrolet
3364 ((not-constant '#:not-constant))
3365 (let ((cl-const-expr-val (cl-const-expr-val (nth 1 form) not-constant)))
3366 (if (and (cdr form) (not (eq not-constant cl-const-expr-val))
3367 (or (symbolp cl-const-expr-val) (fixnump cl-const-expr-val)
3368 (characterp cl-const-expr-val)))
3369 (cons 'remove* (cdr form))
3370 `(remove* ,@(cdr form) :test #'equal)))))
3371
3372 (define-compiler-macro remq (&whole form &rest args)
3373 (symbol-macrolet
3374 ((not-constant '#:not-constant))
3375 (let ((cl-const-expr-val (cl-const-expr-val (nth 1 form) not-constant)))
3376 (if (and (cdr form) (not (eq not-constant cl-const-expr-val))
3377 (not (cl-non-fixnum-number-p cl-const-expr-val)))
3378 (cons 'remove* (cdr form))
3379 `(remove* ,@(cdr form) :test #'eq)))))
3380
3349 (macrolet 3381 (macrolet
3350 ((define-foo-if-compiler-macros (&rest alist) 3382 ((define-foo-if-compiler-macros (&rest alist)
3351 "Avoid the funcall, variable binding and keyword parsing overhead 3383 "Avoid the funcall, variable binding and keyword parsing overhead
3352 for the FOO-IF and FOO-IF-NOT functions, transforming to forms using the 3384 for the FOO-IF and FOO-IF-NOT functions, transforming to forms using the
3353 non-standard :if and :if-not keywords at compile time." 3385 non-standard :if and :if-not keywords at compile time."
3795 (cadaar car cdaar) (cadadr car cdadr) (caddar car cddar) 3827 (cadaar car cdaar) (cadadr car cdadr) (caddar car cddar)
3796 (cadddr car cdddr) (cdaaar cdr caaar) (cdaadr cdr caadr) 3828 (cadddr car cdddr) (cdaaar cdr caaar) (cdaadr cdr caadr)
3797 (cdadar cdr cadar) (cdaddr cdr caddr) (cddaar cdr cdaar) 3829 (cdadar cdr cadar) (cdaddr cdr caddr) (cddaar cdr cdaar)
3798 (cddadr cdr cdadr) (cdddar cdr cddar) (cddddr cdr cdddr))) 3830 (cddadr cdr cdadr) (cdddar cdr cddar) (cddddr cdr cdddr)))
3799 3831
3800 ;;; Things that are inline. 3832 ;;; Things that are inline. XEmacs; the functions that used to be here have
3801 (proclaim '(inline acons map concatenate 3833 ;;; compiler macros or are built-in.
3802 ;; XEmacs omission: gethash is builtin 3834 (proclaim '(inline cl-set-elt))
3803 cl-set-elt revappend nreconc))
3804 3835
3805 ;;; Things that are side-effect-free. Moved to byte-optimize.el 3836 ;;; Things that are side-effect-free. Moved to byte-optimize.el
3806 ;(mapcar (function (lambda (x) (put x 'side-effect-free t))) 3837 ;(mapcar (function (lambda (x) (put x 'side-effect-free t)))
3807 ; '(oddp evenp signum last butlast ldiff pairlis gcd lcm 3838 ; '(oddp evenp signum last butlast ldiff pairlis gcd lcm
3808 ; isqrt floor* ceiling* truncate* round* mod* rem* subseq 3839 ; isqrt floor* ceiling* truncate* round* mod* rem* subseq