M lib/beaker.scm => lib/beaker.scm +15 -2
@@ 31,6 31,7 @@
(define global-identifiers (make-vector 32 '()))
(define warnings (make-vector 128 '()))
(define deferred-analysers '())
+ (define line-number-database (make-vector 1024 '()))
(define for-each* (flip for-each))
@@ 291,8 292,20 @@
;; NOTE we expand the form first so that the compiler's
;; syntax checks run and we can assume the form is valid
(receive (x* m) (next x e c)
- (analyse-expression x)
- (values x* m)))))
+ (fluid-let ((##sys#line-number-database line-number-database))
+ (analyse-expression x)
+ (values x* m))))))
+
+ (user-preprocessor-pass
+ (let ((done #f)
+ (next (or (user-preprocessor-pass) values)))
+ (lambda (x)
+ (when (and (not done) ##sys#line-number-database)
+ (set! done #t)
+ (hash-table-for-each (lambda (k v)
+ (hash-table-set! line-number-database k v))
+ ##sys#line-number-database))
+ (next x))))
(user-pass
(let ((next (or (user-pass) values)))
M tests/examples.scm => tests/examples.scm +3 -0
@@ 30,3 30,6 @@
(let* ((x x)) (let* ((y y)) (void x y))) ;> ("examples.scm:31" warning nested-let*)
(let* ((x x)) (let ((y y)) (void x y)))
+
+;; https://todo.sr.ht/~evhan/beaker/5
+(module foo ())