Mercurial > emacs
changeset 72096:74ec3b24ac69
(dolist, dotimes): Use interned symbols for iteration.
(--dotimes-limit--, --dolist-tail--): New defvars.
(looking-back): Doc fix.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 24 Jul 2006 17:01:08 +0000 |
parents | 2a66d3b6c808 |
children | cb84aa5b7913 |
files | lisp/subr.el |
diffstat | 1 files changed, 19 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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