# HG changeset patch # User Richard M. Stallman # Date 1153760468 0 # Node ID 74ec3b24ac6922bca56823243713688ac6b482f9 # Parent 2a66d3b6c808c322b84e46e7c0e2c5aecbbdbcee (dolist, dotimes): Use interned symbols for iteration. (--dotimes-limit--, --dolist-tail--): New defvars. (looking-back): Doc fix. diff -r 2a66d3b6c808 -r 74ec3b24ac69 lisp/subr.el --- a/lisp/subr.el Mon Jul 24 16:52:57 2006 +0000 +++ b/lisp/subr.el Mon Jul 24 17:01:08 2006 +0000 @@ -108,6 +108,9 @@ (declare (indent 1) (debug t)) (cons 'if (cons cond (cons nil body)))) +(defvar --dolist-tail-- nil + "Temporary variable used in `dolist' expansion.") + (defmacro dolist (spec &rest body) "Loop over a list. Evaluate BODY with VAR bound to each car from LIST, in turn. @@ -115,16 +118,22 @@ \(fn (VAR LIST [RESULT]) BODY...)" (declare (indent 1) (debug ((symbolp form &optional form) body))) - (let ((temp (make-symbol "--dolist-temp--"))) + ;; It would be cleaner to create an uninterned symbol, + ;; but that uses a lot more space when many functions in many files + ;; use dolist. + (let ((temp '--dolist-tail--)) `(let ((,temp ,(nth 1 spec)) ,(car spec)) (while ,temp (setq ,(car spec) (car ,temp)) - (setq ,temp (cdr ,temp)) - ,@body) + ,@body + (setq ,temp (cdr ,temp))) ,@(if (cdr (cdr spec)) `((setq ,(car spec) nil) ,@(cdr (cdr spec))))))) +(defvar --dotimes-limit-- nil + "Temporary variable used in `dotimes' expansion.") + (defmacro dotimes (spec &rest body) "Loop a certain number of times. Evaluate BODY with VAR bound to successive integers running from 0, @@ -133,7 +142,10 @@ \(fn (VAR COUNT [RESULT]) BODY...)" (declare (indent 1) (debug dolist)) - (let ((temp (make-symbol "--dotimes-temp--")) + ;; It would be cleaner to create an uninterned symbol, + ;; but that uses a lot more space when many functions in many files + ;; use dotimes. + (let ((temp '--dotimes-limit--) (start 0) (end (nth 1 spec))) `(let ((,temp ,end) @@ -2531,8 +2543,9 @@ (defun looking-back (regexp &optional limit greedy) "Return non-nil if text before point matches regular expression REGEXP. Like `looking-at' except matches before point, and is slower. -LIMIT if non-nil speeds up the search by specifying how far back the -match can start. +LIMIT if non-nil speeds up the search by specifying a minimum +starting position, to avoid checking matches that would start +before LIMIT. If GREEDY is non-nil, extend the match backwards as far as possible, stopping when a single additional previous character cannot be part