hygienic-reader-extension--extend-reader--unhygienic.rkt (1038B)
1 #lang racket 2 3 ;; Copied and adjusted from 4 ;; https://github.com/AlexKnauth/hygienic-reader-extension 5 ;; /blob/master/hygienic-reader-extension/extend-reader.rkt 6 7 (provide extend-reader-unhygienic) 8 9 ;; extend-reader : (-> (-> A ... Any) 10 ;; (-> Readtable #:outer-scope (-> Syntax Syntax) Readtable) 11 ;; (-> A ... Any)) 12 (define (extend-reader-unhygienic proc extend-readtable #:hygiene? [hygiene? #t]) 13 (lambda args 14 (define orig-readtable (current-readtable)) 15 (define outer-scope (make-syntax-introducer/use-site)) 16 (parameterize ([current-readtable (extend-readtable orig-readtable #:outer-scope outer-scope)]) 17 (define stx (apply proc args)) 18 (if (and (syntax? stx) hygiene?) 19 (outer-scope stx) 20 stx)))) 21 22 ;; make-syntax-introducer/use-site : (-> (-> Syntax Syntax)) 23 (define (make-syntax-introducer/use-site) 24 (cond [(procedure-arity-includes? make-syntax-introducer 1) 25 (make-syntax-introducer #t)] 26 [else 27 (make-syntax-introducer)]))