~ chicken-core (chicken-5) 8b646e694afe4ef7bdf620f5bef38f8ed50fd7b9
commit 8b646e694afe4ef7bdf620f5bef38f8ed50fd7b9
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Sun Mar 10 15:16:58 2019 +1300
Commit: Peter Bex <peter@more-magic.net>
CommitDate: Sun Mar 24 19:31:48 2019 +0100
Add line number info for some forms introduced by reader
This adds entries to the line number database for the forms introduced
by the reader when it encounters "#$" (location), "#+" (cond-expand),
and the various quotation sigils. Previously, such forms would either
have no line number information (when occuring at the toplevel), or the
info would be inaccurate (when occuring inside another form, it would
use the line number of the outermost list).
Signed-off-by: Peter Bex <peter@more-magic.net>
diff --git a/library.scm b/library.scm
index 6a089955..cba0f723 100644
--- a/library.scm
+++ b/library.scm
@@ -4111,9 +4111,13 @@ EOF
(let ((tok (r-token)))
(build-symbol (string-append "##" tok))))
+ (define (r-quote q)
+ (let ((ln (##sys#port-line port)))
+ (info 'list-info (list q (readrec)) ln)))
+
(define (build-symbol tok)
(##sys#intern-symbol tok) )
-
+
(define (build-keyword tok)
(##sys#intern-symbol
(##sys#string-append kwprefix tok)))
@@ -4137,16 +4141,16 @@ EOF
(case c
((#\')
(##sys#read-char-0 port)
- (list 'quote (readrec)) )
+ (r-quote 'quote))
((#\`)
(##sys#read-char-0 port)
- (list 'quasiquote (readrec)) )
+ (r-quote 'quasiquote))
((#\,)
(##sys#read-char-0 port)
(cond ((eq? (##sys#peek-char-0 port) #\@)
(##sys#read-char-0 port)
- (list 'unquote-splicing (readrec)) )
- (else (list 'unquote (readrec))) ) )
+ (r-quote 'unquote-splicing))
+ (else (r-quote 'unquote))))
((#\#)
(##sys#read-char-0 port)
(let ((dchar (##sys#peek-char-0 port)))
@@ -4214,14 +4218,16 @@ EOF
(readrec) (readrec) )
((#\`)
(##sys#read-char-0 port)
- (list 'quasisyntax (readrec)) )
+ (r-quote 'quasisyntax))
((#\$)
(##sys#read-char-0 port)
(let ((c (##sys#peek-char-0 port)))
(cond ((char=? c #\{)
(##sys#read-char-0 port)
(##sys#read-bytevector-literal port))
- (else (list 'location (readrec)) ))))
+ (else
+ ;; HACK: reuse r-quote to add line number info
+ (r-quote 'location)))))
((#\:)
(##sys#read-char-0 port)
(let ((c (##sys#peek-char-0 port)))
@@ -4234,8 +4240,11 @@ EOF
(build-keyword str)))))))
((#\+)
(##sys#read-char-0 port)
- (let ((tst (readrec)))
- (list 'cond-expand (list tst (readrec)) '(else)) ) )
+ (let* ((ln (##sys#port-line port))
+ (tst (readrec)))
+ (info 'list-info
+ (list 'cond-expand (list tst (readrec)) '(else))
+ ln)))
((#\!)
(##sys#read-char-0 port)
(let ((c (##sys#peek-char-0 port)))
Trap