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