# HG changeset patch # User Stefan Monnier # Date 1111709862 0 # Node ID 9b761ddc6f4bd0ca4ee3097c828b43d6f11ec839 # Parent 6611fdf350495f29fa7f63d2e410f77e91828293 (flymake-get-file-name-mode-and-masks) (flymake-find-buildfile, flymake-find-possible-master-files) (flymake-check-include, flymake-parse-line): Replace loops over the length of lists, by loops over lists, to remove silly O(n?) behavior. diff -r 6611fdf35049 -r 9b761ddc6f4b lisp/progmodes/flymake.el --- a/lisp/progmodes/flymake.el Fri Mar 25 00:06:07 2005 +0000 +++ b/lisp/progmodes/flymake.el Fri Mar 25 00:17:42 2005 +0000 @@ -269,13 +269,12 @@ "Return the corresponding entry from `flymake-allowed-file-name-masks'." (unless (stringp file-name) (error "Invalid file-name")) - (let ((count (length flymake-allowed-file-name-masks)) - (idx 0) + (let ((fnm flymake-allowed-file-name-masks) (mode-and-masks nil)) - (while (and (not mode-and-masks) (< idx count)) - (if (string-match (nth 0 (nth idx flymake-allowed-file-name-masks)) file-name) - (setq mode-and-masks (cdr (nth idx flymake-allowed-file-name-masks)))) - (setq idx (1+ idx))) + (while (and (not mode-and-masks) fnm) + (if (string-match (car (car fnm)) file-name) + (setq mode-and-masks (cdr (car fnm)))) + (setq fnm (cdr fnm))) (flymake-log 3 "file %s, init=%s" file-name (car mode-and-masks)) mode-and-masks)) @@ -323,15 +322,13 @@ (flymake-get-buildfile-from-cache source-dir-name)) (let* ((buildfile-dir nil) (buildfile nil) - (dir-count (length dirs)) - (dir-idx 0) (found nil)) - (while (and (not found) (< dir-idx dir-count)) - (setq buildfile-dir (concat source-dir-name (nth dir-idx dirs))) + (while (and (not found) dirs) + (setq buildfile-dir (concat source-dir-name (car dirs))) (setq buildfile (concat buildfile-dir "/" buildfile-name)) (when (file-exists-p buildfile) (setq found t)) - (setq dir-idx (1+ dir-idx))) + (setq dirs (cdr dirs))) (if found (progn (flymake-log 3 "found buildfile at %s/%s" buildfile-dir buildfile-name) @@ -412,31 +409,29 @@ Master files are .cpp and .c for and .h. Files are searched for starting from the .h directory and max max-level parent dirs. File contents are not checked." - (let* ((dir-idx 0) - (dir-count (length master-file-dirs)) + (let* ((dirs master-file-dirs) (files nil) - (done nil) - (masks-count (length masks))) + (done nil)) - (while (and (not done) (< dir-idx dir-count)) - (let* ((dir (concat (flymake-fix-file-name (file-name-directory file-name)) "/" (nth dir-idx master-file-dirs))) - (masks-idx 0)) - (while (and (file-exists-p dir) (not done) (< masks-idx masks-count)) - (let* ((mask (nth masks-idx masks)) - (dir-files (directory-files dir t mask)) - (file-count (length dir-files)) - (file-idx 0)) + (while (and (not done) dirs) + (let* ((dir (concat (flymake-fix-file-name (file-name-directory file-name)) + "/" (car dirs))) + (masks masks)) + (while (and (file-exists-p dir) (not done) masks) + (let* ((mask (car masks)) + (dir-files (directory-files dir t mask))) - (flymake-log 3 "dir %s, %d file(s) for mask %s" dir file-count mask) - (while (and (not done) (< file-idx file-count)) - (when (not (file-directory-p (nth file-idx dir-files))) - (setq files (cons (nth file-idx dir-files) files)) + (flymake-log 3 "dir %s, %d file(s) for mask %s" + dir (length dir-files) mask) + (while (and (not done) dir-files) + (when (not (file-directory-p (car dir-files))) + (setq files (cons (car dir-files) files)) (when (>= (length files) flymake-master-file-count-limit) (flymake-log 3 "master file count limit (%d) reached" flymake-master-file-count-limit) (setq done t))) - (setq file-idx (1+ file-idx)))) - (setq masks-idx (1+ masks-idx)))) - (setq dir-idx (1+ dir-idx))) + (setq dir-files (cdr dir-files)))) + (setq masks (cdr masks)))) + (setq dirs (cdr dirs))) (when files (let ((flymake-included-file-name (file-name-nondirectory file-name))) (setq files (sort files 'flymake-master-file-compare)))) @@ -540,18 +535,17 @@ Return t if it can be found via include path using INC-PATH and INC-NAME." (if (file-name-absolute-p inc-path) (flymake-same-files source-file-name (concat inc-path "/" inc-name)) - (let* ((count (length include-dirs)) - (idx 0) - (file-name nil) + (let* ((file-name nil) (found nil)) - (while (and (not found) (< idx count)) - (setq file-name (concat (file-name-directory source-file-name) "/" (nth idx include-dirs))) + (while (and (not found) include-dirs) + (setq file-name (concat (file-name-directory source-file-name) + "/" (car include-dirs))) (if (> (length inc-path) 0) (setq file-name (concat file-name "/" inc-path))) (setq file-name (concat file-name "/" inc-name)) (when (flymake-same-files source-file-name file-name) (setq found t)) - (setq idx (1+ idx))) + (setq include-dirs (cdr include-dirs))) found))) (defun flymake-find-buffer-for-file (file-name) @@ -1026,18 +1020,17 @@ (line-no 0) (err-type "e") (err-text nil) - (count (length flymake-err-line-patterns)) - (idx 0) + (patterns flymake-err-line-patterns) (matched nil)) - (while (and (< idx count) (not matched)) - (when (string-match (car (nth idx flymake-err-line-patterns)) line) - (let* ((file-idx (nth 1 (nth idx flymake-err-line-patterns))) - (line-idx (nth 2 (nth idx flymake-err-line-patterns)))) + (while (and patterns (not matched)) + (when (string-match (car (car patterns)) line) + (let* ((file-idx (nth 1 (car patterns))) + (line-idx (nth 2 (car patterns)))) (setq raw-file-name (if file-idx (match-string file-idx line) nil)) (setq line-no (if line-idx (string-to-int (match-string line-idx line)) 0)) - (setq err-text (if (> (length (nth idx flymake-err-line-patterns)) 4) - (match-string (nth 4 (nth idx flymake-err-line-patterns)) line) + (setq err-text (if (> (length (car patterns)) 4) + (match-string (nth 4 (car patterns)) line) (flymake-patch-err-text (substring line (match-end 0))))) (or err-text (setq err-text "")) (if (and err-text (string-match "^[wW]arning" err-text)) @@ -1046,7 +1039,7 @@ (flymake-log 3 "parse line: file-idx=%s line-idx=%s file=%s line=%s text=%s" file-idx line-idx raw-file-name line-no err-text) (setq matched t))) - (setq idx (1+ idx))) + (setq patterns (cdr patterns))) (if matched (flymake-ler-make-ler raw-file-name line-no err-type err-text) ())))