diff options
Diffstat (limited to 'lisp/emacs-lisp/bytecomp.el')
-rw-r--r-- | lisp/emacs-lisp/bytecomp.el | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index f74e48c4635..f1761c125ac 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -2341,7 +2341,7 @@ list that represents a doc string reference. (eq (car (car (cdr tail))) 'declare)) (let ((declaration (car (cdr tail)))) (setcdr tail (cdr (cdr tail))) - (princ `(if macro-declaration-function + (prin1 `(if macro-declaration-function (funcall macro-declaration-function ',name ',declaration)) outbuffer))))) @@ -3148,6 +3148,9 @@ That command is designed for interactive use only" fn)) ;; more complicated compiler macros +(byte-defop-compiler char-before) +(byte-defop-compiler backward-char) +(byte-defop-compiler backward-word) (byte-defop-compiler list) (byte-defop-compiler concat) (byte-defop-compiler fset) @@ -3159,6 +3162,34 @@ That command is designed for interactive use only" fn)) (byte-defop-compiler19 (/ byte-quo) byte-compile-quo) (byte-defop-compiler19 nconc) +(defun byte-compile-char-before (form) + (cond ((= 2 (length form)) + (byte-compile-form (list 'char-after (if (numberp (nth 1 form)) + (1- (nth 1 form)) + `(1- ,(nth 1 form)))))) + ((= 1 (length form)) + (byte-compile-form '(char-after (1- (point))))) + (t (byte-compile-subr-wrong-args form "0-1")))) + +;; backward-... ==> forward-... with negated argument. +(defun byte-compile-backward-char (form) + (cond ((= 2 (length form)) + (byte-compile-form (list 'forward-char (if (numberp (nth 1 form)) + (- (nth 1 form)) + `(- ,(nth 1 form)))))) + ((= 1 (length form)) + (byte-compile-form '(forward-char -1))) + (t (byte-compile-subr-wrong-args form "0-1")))) + +(defun byte-compile-backward-word (form) + (cond ((= 2 (length form)) + (byte-compile-form (list 'forward-word (if (numberp (nth 1 form)) + (- (nth 1 form)) + `(- ,(nth 1 form)))))) + ((= 1 (length form)) + (byte-compile-form '(forward-word -1))) + (t (byte-compile-subr-wrong-args form "0-1")))) + (defun byte-compile-list (form) (let ((count (length (cdr form)))) (cond ((= count 0) |