]> git.eshelyaron.com Git - emacs.git/commitdiff
Markus Triska <markus.triska at gmx.at>:
authorGlenn Morris <rgm@gnu.org>
Wed, 11 Apr 2007 03:59:20 +0000 (03:59 +0000)
committerGlenn Morris <rgm@gnu.org>
Wed, 11 Apr 2007 03:59:20 +0000 (03:59 +0000)
(byte-compile-char-before): Improve numeric argument case.
(byte-compile-backward-char, byte-compile-backward-word): New
functions, performing rewriting previously done in byte-opt.el.
Fix their "Fixme" item (restriction to numeric arguments).

lisp/emacs-lisp/bytecomp.el

index de749e1d0c89f7767300429fbef04a0900b88921..f1761c125ac1249d230e4a530a4c07eb1d8affa3 100644 (file)
@@ -3149,6 +3149,8 @@ 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)
@@ -3162,10 +3164,31 @@ That command is designed for interactive use only" fn))
 
 (defun byte-compile-char-before (form)
   (cond ((= 2 (length form))
-         (byte-compile-form `(char-after (1- ,(nth 1 form)))))
-        ((= 1 (length form))
-         (byte-compile-form '(char-after (1- (point)))))
-        (t (byte-compile-subr-wrong-args form "0-1"))))
+        (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))))