~ chicken-core (chicken-5) 4678db36bee6bea0b2254679625b723ea7b2607b
commit 4678db36bee6bea0b2254679625b723ea7b2607b
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Jan 27 23:36:35 2024 +0100
Commit: Mario Domenech Goulart <mario@parenteses.org>
CommitDate: Sun Jan 28 19:27:15 2024 +0100
Including forms must preserve ##sys#current-source-filename
Found by "Reid": invocation of "k" in ##sys#include-forms-from-file
must be outside the fluid-binding of ##sys#current-source-filename
or later inclusions while expanding a body will not see the original,
outer binding of the var and "include-relative" will refer to the
wrong original source
Signed-off-by: Mario Domenech Goulart <mario@parenteses.org>
diff --git a/eval.scm b/eval.scm
index 6d01e0f8..92244301 100644
--- a/eval.scm
+++ b/eval.scm
@@ -1170,21 +1170,21 @@
(define ##sys#include-forms-from-file
(let ((call-with-input-file call-with-input-file)
- (reverse reverse))
+ (reverse reverse))
(lambda (filename source k)
(let ((path (##sys#resolve-include-filename filename #t #f source))
- (read-with-source-info chicken.syntax#read-with-source-info)) ; OBSOLETE - after bootstrapping we can get rid of this explicit namespacing
- (when (not path)
- (##sys#signal-hook #:file-error 'include "cannot open file" filename))
- (when (load-verbose)
- (print "; including " path " ..."))
- (call-with-input-file path
- (lambda (in)
- (fluid-let ((##sys#current-source-filename path))
- (do ((x (read-with-source-info in) (read-with-source-info in))
- (xs '() (cons x xs)))
- ((eof-object? x)
- (k (reverse xs)))))))))))
+ (read-with-source-info chicken.syntax#read-with-source-info)) ; OBSOLETE - after bootstrapping we can get rid of this explicit namespacing
+ (when (not path)
+ (##sys#signal-hook #:file-error 'include "cannot open file" filename))
+ (when (load-verbose)
+ (print "; including " path " ..."))
+ (call-with-input-file path
+ (lambda (in)
+ (k (fluid-let ((##sys#current-source-filename path))
+ (do ((x (read-with-source-info in) (read-with-source-info in))
+ (xs '() (cons x xs)))
+ ((eof-object? x)
+ (reverse xs)))))))))))
;;; Extensions:
Trap