Fix bug in load/internal by which empty files caused an error in the
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Wed, 31 Jan 1990 02:03:13 +0000 (02:03 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Wed, 31 Jan 1990 02:03:13 +0000 (02:03 +0000)
fasl check.  peek-char returned an eof-object, and char->ascii barfed
on that.

Now, if the file is empty, it is loaded as a source file, whatever
that means.

v7/src/runtime/load.scm
v8/src/runtime/load.scm

index 9ecb908253340efffecea566f748319901a442d8..9591260ec028bff50388f50aaaee999c13aa9fdc 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/load.scm,v 14.10 1989/08/18 19:10:01 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/load.scm,v 14.11 1990/01/31 02:03:13 jinx Exp $
 
 Copyright (c) 1988, 1989 Massachusetts Institute of Technology
 
@@ -160,31 +160,33 @@ MIT in each case. |#
 \f
 (define (load/internal pathname true-pathname environment syntax-table
                       purify? load-noisily?)
-  (let ((true-filename (pathname->string true-pathname)))
-    (let ((port (open-input-file/internal pathname true-filename)))
-      (if (= 250 (char->ascii (peek-char port)))
-         (begin
-           (close-input-port port)
-           (scode-eval
-            (let ((scode
-                   (fasload/internal true-pathname
-                                     load/suppress-loading-message?)))
-              (if purify? (purify (load/purification-root scode)))
-              scode)
-            (if (eq? environment default-object)
-                (nearest-repl/environment)
-                environment)))
-         (let ((value-stream
-                (lambda ()
-                  (eval-stream (read-stream port) environment syntax-table))))
-           (if load-noisily?
-               (write-stream (value-stream)
-                             (lambda (value)
-                               (hook/repl-write (nearest-repl) value)))
-               (loading-message load/suppress-loading-message? true-filename
-                 (lambda ()
-                   (write-stream (value-stream)
-                                 (lambda (value) value false))))))))))
+  (let* ((true-filename (pathname->string true-pathname))
+        (port (open-input-file/internal pathname true-filename))
+        (fasl-marker (peek-char port)))
+    (if (and (not (eof-object? fasl-marker))
+            (= 250 (char->ascii fasl-marker)))
+       (begin
+         (close-input-port port)
+         (scode-eval
+          (let ((scode
+                 (fasload/internal true-pathname
+                                   load/suppress-loading-message?)))
+            (if purify? (purify (load/purification-root scode)))
+            scode)
+          (if (eq? environment default-object)
+              (nearest-repl/environment)
+              environment)))
+       (let ((value-stream
+              (lambda ()
+                (eval-stream (read-stream port) environment syntax-table))))
+         (if load-noisily?
+             (write-stream (value-stream)
+                           (lambda (value)
+                             (hook/repl-write (nearest-repl) value)))
+             (loading-message load/suppress-loading-message? true-filename
+                              (lambda ()
+                                (write-stream (value-stream)
+                                              (lambda (value) value false)))))))))
 
 (define (load/purification-root scode)
   (or (and (comment? scode)
index 57fd4ad81e0ff89fa9c06523993f4fbe2a00158c..8929000b099947403be6ed4c08f25df38419b407 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/runtime/load.scm,v 14.10 1989/08/18 19:10:01 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/runtime/load.scm,v 14.11 1990/01/31 02:03:13 jinx Exp $
 
 Copyright (c) 1988, 1989 Massachusetts Institute of Technology
 
@@ -160,31 +160,33 @@ MIT in each case. |#
 \f
 (define (load/internal pathname true-pathname environment syntax-table
                       purify? load-noisily?)
-  (let ((true-filename (pathname->string true-pathname)))
-    (let ((port (open-input-file/internal pathname true-filename)))
-      (if (= 250 (char->ascii (peek-char port)))
-         (begin
-           (close-input-port port)
-           (scode-eval
-            (let ((scode
-                   (fasload/internal true-pathname
-                                     load/suppress-loading-message?)))
-              (if purify? (purify (load/purification-root scode)))
-              scode)
-            (if (eq? environment default-object)
-                (nearest-repl/environment)
-                environment)))
-         (let ((value-stream
-                (lambda ()
-                  (eval-stream (read-stream port) environment syntax-table))))
-           (if load-noisily?
-               (write-stream (value-stream)
-                             (lambda (value)
-                               (hook/repl-write (nearest-repl) value)))
-               (loading-message load/suppress-loading-message? true-filename
-                 (lambda ()
-                   (write-stream (value-stream)
-                                 (lambda (value) value false))))))))))
+  (let* ((true-filename (pathname->string true-pathname))
+        (port (open-input-file/internal pathname true-filename))
+        (fasl-marker (peek-char port)))
+    (if (and (not (eof-object? fasl-marker))
+            (= 250 (char->ascii fasl-marker)))
+       (begin
+         (close-input-port port)
+         (scode-eval
+          (let ((scode
+                 (fasload/internal true-pathname
+                                   load/suppress-loading-message?)))
+            (if purify? (purify (load/purification-root scode)))
+            scode)
+          (if (eq? environment default-object)
+              (nearest-repl/environment)
+              environment)))
+       (let ((value-stream
+              (lambda ()
+                (eval-stream (read-stream port) environment syntax-table))))
+         (if load-noisily?
+             (write-stream (value-stream)
+                           (lambda (value)
+                             (hook/repl-write (nearest-repl) value)))
+             (loading-message load/suppress-loading-message? true-filename
+                              (lambda ()
+                                (write-stream (value-stream)
+                                              (lambda (value) value false)))))))))
 
 (define (load/purification-root scode)
   (or (and (comment? scode)