Otherwise, the macro is expanded and the expansion is considered
in place of FORM. When a non-macro-call results, it is returned.
-The second optional arg ENVIRONMENT species an environment of macro
+The second optional arg ENVIRONMENT specifies an environment of macro
definitions to shadow the loaded ones for use in file byte-compilation."
(let ((cl-macro-environment cl-env))
(while (progn (setq cl-macro (funcall cl-old-macroexpand cl-macro cl-env))
(defvar *gensym-counter* (* (logand (cl-random-time) 1023) 100))
+(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))))
+
+(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)))
;;; Numbers.
-(defun floatp-safe (x)
- "Return t if OBJECT is a floating point number.
-On Emacs versions that lack floating-point support, this function
-always returns nil."
- ;;(and (numberp x) (not (integerp x)))
- ;; XEmacs: use floatp. XEmacs is always compiled with
- ;; floating-point, anyway.
- (floatp x))
+(defun floatp-safe (object)
+ "Return t if OBJECT is a floating point number."
+ (floatp object))
-(defun plusp (x)
+(defun plusp (number)
"Return t if NUMBER is positive."
- (> x 0))
+ (> number 0))
-(defun minusp (x)
+(defun minusp (number)
"Return t if NUMBER is negative."
- (< x 0))
+ (< number 0))
-(defun oddp (x)
+(defun oddp (integer)
"Return t if INTEGER is odd."
- (eq (logand x 1) 1))
+ (eq (logand integer 1) 1))
-(defun evenp (x)
+(defun evenp (integer)
"Return t if INTEGER is even."
- (eq (logand x 1) 0))
+ (eq (logand integer 1) 0))
-(defun cl-abs (x)
- "Return the absolute value of ARG."
- (if (>= x 0) x (- x)))
+(defun cl-abs (number)
+ "Return the absolute value of NUMBER."
+ (if (>= number 0) number (- number)))
(or (fboundp 'abs) (defalias 'abs 'cl-abs)) ; This is built-in to Emacs 19
(defvar *random-state* (vector 'cl-random-state-tag -1 30 (cl-random-time)))
(defun cl-hack-byte-compiler ()
(if (and (not cl-hacked-flag) (fboundp 'byte-compile-file-form))
(progn
+ (when (not (fboundp 'cl-compile-time-init))
+ (load "cl-macs" nil t))
(cl-compile-time-init) ; in cl-macs.el
(setq cl-hacked-flag t))))