You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
970 B
Racket
29 lines
970 B
Racket
(module reader racket/base
|
|
(require syntax/module-reader
|
|
(only-in "../../reader.rkt" make-debug-readtable wrap-reader))
|
|
|
|
(provide (rename-out [debug-read read]
|
|
[debug-read-syntax read-syntax]
|
|
[debug-get-info get-info]))
|
|
|
|
(define-values (debug-read debug-read-syntax debug-get-info)
|
|
(make-meta-reader
|
|
'sugar/debug/lang
|
|
"language path"
|
|
(lambda (bstr)
|
|
(let* ([str (bytes->string/latin-1 bstr)]
|
|
[sym (string->symbol str)])
|
|
(and (module-path? sym)
|
|
(vector
|
|
;; try submod first:
|
|
`(submod ,sym reader)
|
|
;; fall back to /lang/reader:
|
|
(string->symbol (string-append str "/lang/reader"))))))
|
|
wrap-reader
|
|
wrap-reader
|
|
(lambda (proc)
|
|
(lambda (key defval)
|
|
(define (fallback) (if proc (proc key defval) defval))
|
|
(case key
|
|
[else (fallback)]))))))
|