aboutsummaryrefslogtreecommitdiffhomepage
path: root/isar/isar.el
diff options
context:
space:
mode:
authorGravatar David Aspinall <da@inf.ed.ac.uk>2010-08-04 00:15:47 +0000
committerGravatar David Aspinall <da@inf.ed.ac.uk>2010-08-04 00:15:47 +0000
commit5e9b093e19440a47e64a0d15904537dd2b16f3d3 (patch)
tree7d64af6b3917f6e41d321aaf4cc6e232ea8ad747 /isar/isar.el
parent52096babd73fdefd3791b9351cb8cf055f096ee3 (diff)
isar-remove-file: remove (tail) recursion, leads to stack overflow
Diffstat (limited to 'isar/isar.el')
-rw-r--r--isar/isar.el24
1 files changed, 13 insertions, 11 deletions
diff --git a/isar/isar.el b/isar/isar.el
index 479e4c34..bfabb6d3 100644
--- a/isar/isar.el
+++ b/isar/isar.el
@@ -268,15 +268,17 @@ See -k option for Isabelle interface script."
;; Theory loader operations
;;
-(defun isar-remove-file (name files cmp-base result)
- (if (not files) (reverse result)
- (let*
- ((file (car files))
- (rest (cdr files))
- (same (if cmp-base (string= name (file-name-nondirectory file))
- (string= name file))))
- (if same (isar-remove-file name rest cmp-base result)
- (isar-remove-file name rest cmp-base (cons file result))))))
+(defun isar-remove-file (name files cmp-base)
+ (let (result)
+ (while files
+ (let*
+ ((file (car files))
+ (same (if cmp-base (string= name (file-name-nondirectory file))
+ (string= name file))))
+ (unless same
+ (setq result (cons file result)))
+ (setq files (cdr files))))
+ result))
(defun isar-shell-compute-new-files-list ()
"Compute the new list of files read by the proof assistant.
@@ -286,9 +288,9 @@ This is called when Proof General spots output matching
((name (match-string 1))
(base-name (file-name-nondirectory name)))
(if (string= name base-name)
- (isar-remove-file name proof-included-files-list t nil)
+ (isar-remove-file name proof-included-files-list t)
(isar-remove-file
- (file-truename name) proof-included-files-list nil nil))))
+ (file-truename name) proof-included-files-list nil))))
;;