scsh-0.6/scheme/bcomp/read-form.scm

39 lines
1.2 KiB
Scheme

; Copyright (c) 1993-1999 by Richard Kelsey and Jonathan Rees. See file COPYING.
; The value of $NOTE-FILE-PACKAGE is called whenever a file is loaded into
; a package. env/debug.scm uses this to associate packages with files so
; that code stuffed to the REPL will be eval'ed in the correct package.
;
; Is there any point in having this be a fluid?
(define $note-file-package
(make-fluid (lambda (filename package)
(values))))
(define (read-forms pathname package)
(let* ((filename (namestring pathname #f *scheme-file-type*))
(truename (translate filename))
(port (open-input-file truename)))
(dynamic-wind
(lambda ()
(if (not port)
(error "attempt to throw back into a file read"))) ; message needs work
(lambda ()
((fluid $note-file-package) filename package)
(let ((o-port (current-noise-port)))
(display truename o-port)
(force-output o-port)
(read-forms-from-port port)))
(lambda ()
(close-input-port port)
(set! port #f)))))
(define (read-forms-from-port port)
(let loop ((forms '()))
(let ((form (read port)))
(if (eof-object? form)
(reverse forms)
(loop (cons form forms))))))