X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=lisp%2Fcl-macs.el;h=6eddb949eac5ca4006cd5b779bf64fae29037bbf;hp=b35f74f38e56b67160c76024ba5d1b0e03327748;hb=98a6e4055a1fa624c592ac06f79287d55196ca37;hpb=77dcef404dc78635f6ffa8f71a803d2bc7cc8921 diff --git a/lisp/cl-macs.el b/lisp/cl-macs.el index b35f74f..6eddb94 100644 --- a/lisp/cl-macs.el +++ b/lisp/cl-macs.el @@ -81,7 +81,7 @@ #'(lambda (n p f) (list 'put (list 'quote n) (list 'quote p) (list 'function (cons 'lambda f)))))) - (car (or features (setq features (list 'cl-kludge)))))) + 'xemacs)) ;;; Initialization. @@ -106,31 +106,6 @@ (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 @@ -572,7 +547,7 @@ This is equivalent to `(return-from nil RESULT)'." ;;;###autoload (defmacro return-from (name &optional res) "(return-from NAME [RESULT]): return from the block named NAME. -This jump out to the innermost enclosing `(block NAME ...)' form, +This jumps out to the innermost enclosing `(block NAME ...)' form, returning RESULT from that form (or nil if RESULT is omitted). This is compatible with Common Lisp, but note that `defun' and `defmacro' do not create implicit blocks as they do in Common Lisp." @@ -1438,10 +1413,10 @@ values. For compatibility, (values A B C) is a synonym for (list A B C)." (cond ((eq (car-safe spec) 'special) (if (boundp 'byte-compile-bound-variables) (setq byte-compile-bound-variables - ;; todo: this should compute correct binding bits vs. 0 - (append (mapcar #'(lambda (v) (cons v 0)) - (cdr spec)) - byte-compile-bound-variables)))) + (append + (mapcar #'(lambda (v) (cons v byte-compile-global-bit)) + (cdr spec)) + byte-compile-bound-variables)))) ((eq (car-safe spec) 'inline) (while (setq spec (cdr spec)) @@ -1647,12 +1622,12 @@ Example: (defsetf nth (n x) (v) (list 'setcar (list 'nthcdr n x) v))." (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) - (list 'progn (list 'set-extent-endpoints store - (list 'extent-end-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)) (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)) @@ -1794,6 +1769,7 @@ Example: (defsetf nth (n x) (v) (list 'setcar (list 'nthcdr n x) v))." (defsetf x-get-cut-buffer x-store-cut-buffer t) ; groan. (defsetf x-get-secondary-selection x-own-secondary-selection t) (defsetf x-get-selection x-own-selection t) +(defsetf get-selection own-selection t) ;;; More complex setf-methods. ;;; These should take &environment arguments, but since full arglists aren't @@ -2458,10 +2434,10 @@ The type name can then be used in `typecase', `check-type', etc." (t (error "Bad type spec: %s" type))))) ;;;###autoload -(defun typep (val type) ; See compiler macro below. +(defun typep (object type) ; See compiler macro below. "Check that OBJECT is of type TYPE. TYPE is a Common Lisp-style type specifier." - (eval (cl-make-type-test 'val type))) + (eval (cl-make-type-test 'object type))) ;;;###autoload (defmacro check-type (form type &optional string) @@ -2744,10 +2720,11 @@ surrounded by (block NAME ...)." (setq form (list 'cons (car args) form))) form)) -(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 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 typep (&whole form val type) (if (cl-const-expr-p type) @@ -2795,7 +2772,7 @@ surrounded by (block NAME ...)." ; abs expt signum last butlast ldiff ; pairlis gcd lcm ; isqrt floor* ceiling* truncate* round* mod* rem* subseq -; list-length get* getf)) +; list-length getf)) ; (put fun 'side-effect-free t)) ;;; Things that are side-effect-and-error-free. Moved to byte-optimize.el