Mercurial > hg > xemacs-beta
diff lisp/cl-macs.el @ 412:697ef44129c6 r21-2-14
Import from CVS: tag r21-2-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:20:41 +0200 |
parents | de805c49cfc1 |
children | 11054d720c21 |
line wrap: on
line diff
--- a/lisp/cl-macs.el Mon Aug 13 11:19:22 2007 +0200 +++ b/lisp/cl-macs.el Mon Aug 13 11:20:41 2007 +0200 @@ -81,7 +81,7 @@ #'(lambda (n p f) (list 'put (list 'quote n) (list 'quote p) (list 'function (cons 'lambda f)))))) - 'xemacs)) + (car (or features (setq features (list 'cl-kludge)))))) ;;; Initialization. @@ -106,6 +106,31 @@ (run-hooks 'cl-hack-bytecomp-hook)) +;;; Symbols. + +(defvar *gensym-counter*) + +;;;###autoload +(defun gensym (&optional arg) + "Generate a new uninterned symbol. +The name is made by appending a number to PREFIX, default \"G\"." + (let ((prefix (if (stringp arg) arg "G")) + (num (if (integerp arg) arg + (prog1 *gensym-counter* + (setq *gensym-counter* (1+ *gensym-counter*)))))) + (make-symbol (format "%s%d" prefix num)))) + +;;;###autoload +(defun gentemp (&optional arg) + "Generate a new interned symbol with a unique name. +The name is made by appending a number to PREFIX, default \"G\"." + (let ((prefix (if (stringp arg) arg "G")) + name) + (while (intern-soft (setq name (format "%s%d" prefix *gensym-counter*))) + (setq *gensym-counter* (1+ *gensym-counter*))) + (intern name))) + + ;;; Program structure. ;;;###autoload @@ -1622,12 +1647,12 @@ (defsetf extent-priority set-extent-priority) (defsetf extent-property (x y &optional ignored-arg) (arg) (list 'set-extent-property x y arg)) +(defsetf extent-end-position (ext) (store) + (list 'progn (list 'set-extent-endpoints (list 'extent-start-position ext) + store) store)) (defsetf extent-start-position (ext) (store) - `(progn (set-extent-endpoints ,ext ,store (extent-end-position ,ext)) - ,store)) -(defsetf extent-end-position (ext) (store) - `(progn (set-extent-endpoints ,ext (extent-start-position ,ext) ,store) - ,store)) + (list 'progn (list 'set-extent-endpoints store + (list 'extent-end-position ext)) store)) (defsetf face-background (f &optional s) (x) (list 'set-face-background f x s)) (defsetf face-background-pixmap (f &optional s) (x) (list 'set-face-background-pixmap f x s)) @@ -2719,11 +2744,10 @@ (setq form (list 'cons (car args) form))) form)) -(define-compiler-macro get* (sym prop &optional default) - (list 'get sym prop default)) - -(define-compiler-macro getf (sym prop &optional default) - (list 'plist-get sym prop default)) +(define-compiler-macro get* (sym prop &optional def) + (if def + (list 'getf (list 'symbol-plist sym) prop def) + (list 'get sym prop))) (define-compiler-macro typep (&whole form val type) (if (cl-const-expr-p type) @@ -2771,7 +2795,7 @@ ; abs expt signum last butlast ldiff ; pairlis gcd lcm ; isqrt floor* ceiling* truncate* round* mod* rem* subseq -; list-length getf)) +; list-length get* getf)) ; (put fun 'side-effect-free t)) ;;; Things that are side-effect-and-error-free. Moved to byte-optimize.el