Have `read' update line/column numbers when reading SCSH block comments.
authorLudovic Courtès <ludo@gnu.org>
Mon, 28 Feb 2011 22:33:47 +0000 (23:33 +0100)
committerLudovic Courtès <ludo@gnu.org>
Mon, 28 Feb 2011 22:33:47 +0000 (23:33 +0100)
* libguile/read.c (scm_read_scsh_block_comment): Use `scm_getc' instead
  of `scm_get_byte_or_eof'.

* test-suite/tests/reader.test ("read-options")["position of SCSH block
  comment"]: New test.

libguile/read.c
test-suite/tests/reader.test

index 5f0be31..4057e4f 100644 (file)
@@ -1116,13 +1116,9 @@ scm_read_scsh_block_comment (scm_t_wchar chr, SCM port)
 {
   int bang_seen = 0;
 
-  /* We can use the get_byte here because there is no need to get the
-     locale correct when reading comments. This presumes that 
-     hash and exclamation points always represent themselves no
-     matter what the source encoding is.*/
   for (;;)
     {
-      int c = scm_get_byte_or_eof (port);
+      int c = scm_getc (port);
 
       if (c == EOF)
        scm_i_input_error ("skip_block_comment", port,
index 13c8526..1d6cc41 100644 (file)
                     (read-string "'abcde")))))
       (and (equal? (source-property sexp 'line) 0)
            (equal? (source-property sexp 'column) 0))))
+  (pass-if "position of SCSH block comment"
+    ;; In Guile 2.0.0 the reader would not update the port's position
+    ;; when reading an SCSH block comment.
+    (let ((sexp (with-read-options '(positions)
+                  (lambda ()
+                    (read-string "#!foo\nbar\nbaz\n!#\n(hello world)\n")))))
+      (= 4 (source-property sexp 'line))))
+
   (with-test-prefix "r6rs-hex-escapes"
       (pass-if-exception "non-hex char in two-digit hex-escape"
       exception:illegal-escape
      ("#,@foo" . (unsyntax-splicing foo)))))
 
 
+;;; Local Variables:
+;;; eval: (put 'with-read-options 'scheme-indent-function 1)
+;;; End: