From: Kevin M. Rosenberg Date: Thu, 7 Nov 2002 04:08:36 +0000 (+0000) Subject: r3327: *** empty log message *** X-Git-Tag: v1.96~298 X-Git-Url: http://git.kpe.io/?p=kmrcl.git;a=commitdiff_plain;h=7249fcd884a04be929dc6895c91e82be747c9533 r3327: *** empty log message *** --- diff --git a/debian/changelog b/debian/changelog index 276afb7..f85fa45 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +cl-kmrcl (1.20-1) unstable; urgency=low + + * Add with-each-stream-line, with-each-file-line + * Use gensyms in other functions to avoid variable capture + + -- Kevin M. Rosenberg Wed, 6 Nov 2002 13:33:39 -0700 + cl-kmrcl (1.19.1-1) unstable; urgency=low * Made indent-spaces reslient to non-numeric parameter diff --git a/genutils.lisp b/genutils.lisp index 55751ff..6125aba 100644 --- a/genutils.lisp +++ b/genutils.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: genutils.lisp,v 1.7 2002/11/04 19:19:04 kevin Exp $ +;;;; $Id: genutils.lisp,v 1.8 2002/11/07 04:07:02 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -216,7 +216,21 @@ ((> ,var ,gstop)) ,@body))) - +(defmacro with-each-stream-line ((var stream) &body body) + (let ((eof (gensym)) + (strm (gensym))) + `(let ((,strm ,stream)) + (do ((,var (read-line stream nil ,eof) (read-line stream nil ,eof))) + (eq ,var ,eof) + ,@body)))) + +(defmacro with-each-file-line ((var file) &body body) + (let ((stream (gensym))) + `(with-open-file (,stream file :direction :input) + (with-each-stream-line (,var ,stream) + ,@body)))) + + ;;; Keyword functions (defun remove-keyword (key arglist) @@ -444,30 +458,32 @@ "Opens a reads a file. Returns the contents as a single string" (when (probe-file file) (with-open-file (in file :direction :input) - (do ((line (read-line in nil 'eof) - (read-line in nil 'eof))) - ((eql line 'eof)) - (format strm "~A~%" line))))) + (let ((eof (gensym))) + (do ((line (read-line in nil eof) + (read-line in nil eof))) + ((eq line eof)) + (format strm "~A~%" line)))))) (defun read-file-to-string (file) "Opens a reads a file. Returns the contents as a single string" (with-output-to-string (out) (with-open-file (in file :direction :input) - (do ((line (read-line in nil 'eof) - (read-line in nil 'eof))) - ((eql line 'eof)) - (format out "~A~%" line))))) + (let ((eof (gensym))) + (do ((line (read-line in nil eof) + (read-line in nil eof))) + ((eq line eof)) + (format out "~A~%" line)))))) (defun read-file-to-strings (file) "Opens a reads a file. Returns the contents as a list of strings" (let ((lines '())) (with-open-file (in file :direction :input) - (do ((line (read-line in nil 'eof) - (read-line in nil 'eof))) - ((eql line 'eof)) - (push line lines))) - (nreverse lines))) - + (let ((eof (gensym))) + (do ((line (read-line in nil eof) + (read-line in nil eof))) + ((eq line eof)) + (push line lines))) + (nreverse lines)))) ;;; Formatting functions