changeset 77119:8e8844e56964

Markus Triska <markus.triska at gmx.at>: (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).
author Glenn Morris <rgm@gnu.org>
date Wed, 11 Apr 2007 03:59:20 +0000
parents c7fe4de39577
children f885dba5a6af
files lisp/emacs-lisp/bytecomp.el
diffstat 1 files changed, 27 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/bytecomp.el	Wed Apr 11 03:57:11 2007 +0000
+++ b/lisp/emacs-lisp/bytecomp.el	Wed Apr 11 03:59:20 2007 +0000
@@ -3149,6 +3149,8 @@
 ;; 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 @@
 
 (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))))