Hello.
I'm using Chicken 5.4.0. I tried to use read-with-source-info and got
quite strange results. Despite reading from file (by means of
with-input-from-file), subsequent calls to get-line-number report
input file as <stdin> or even #f. The following example demonstrates
the issue:
test.txt:
(a b c d e)
(1 2 3 4 5)
(a b c)

main.scm:
(import (chicken base)
        (chicken syntax))

(define (main)
  (let ((forms
         (with-input-from-file "./test.txt"
           (lambda ()
             (let loop ((acc (list)))
               (let ((r (read-with-source-info)))
                 (if (eof-object? r)
                     (reverse acc)
                     (loop (cons r acc)))))))))
    (map (lambda (x)
           (print x ":" (get-line-number x)))
         forms)
    (newline)))

(main)

The code was compiled like this:
csc main.scm -o main

The program's output:
$ ./main
(a b c d e):<stdin>:1
(1 2 3 4 5):#f
(a b c):<stdin>:3

The result is the same on both Linux and macOS. Replacing
(read-with-source-info) with explicit (read-with-source-info
(current-input-port)) doesn't change anything.
Searching the bugtracker didn't yield any results. Should I file a
report there, by the way?
Brief investigation hadn't produced any conclusion yet. Any help is appreciated.

One more thing, markup in the corresponding section of the manual is
evidently broken (on the wiki too:
https://wiki.call-cc.org/man/5/Module (chicken
syntax)#read-with-source-info/).
Here's the patch:
diff --git a/manual/Module (chicken syntax) b/manual/Module (chicken syntax)
index 19e550be..48127201 100644
--- a/manual/Module (chicken syntax)
+++ b/manual/Module (chicken syntax)
@@ -368,10 +368,10 @@ renamed.

 <procedure>(read-with-source-info [port])</procedure>

-Exactly like {{{read}}} from the {{{scheme}}} module, except it
+Exactly like {{read}} from the {{scheme}} module, except it
 registers the expression it read into the line number database, so
-that if {{{(read-with-source-info)}}} returns {{{OBJ}}},
-{{{(get-line-number OBJ)}}} will return the line number in {{{port}}}.
+that if {{(read-with-source-info)}} returns {{OBJ}},
+{{(get-line-number OBJ)}} will return the line number in {{port}}.

 The port argument may be omitted, in which case it defaults to the
 value returned by {{current-input-port}}. It is an error to read from

--
Best regards.
Alexey Egorov.

Reply via email to