reqprov.rkt (1263B)
1 #lang racket/base 2 3 (require racket/require-syntax 4 racket/provide-syntax 5 (for-syntax racket/base 6 racket/provide-transform 7 racket/syntax 8 syntax/parse)) 9 10 (provide expander-in 11 expander-out) 12 13 (define-for-syntax (reqprov-transformer2 id combiner prefix) 14 (with-syntax 15 ([id-expander-type (format-id id "~a-expander-type" id)] 16 [make-id-expander (format-id id "make-~a-expander" id)] 17 [id-expander? (format-id id "~a-expander?" id)] 18 [define-id-expander (format-id id "define-~a-expander" id)] 19 [expand-all-id-expanders (format-id id "expand-all-~a-expanders" id)]) 20 #`(#,combiner (for-syntax (#,@prefix id-expander-type)) 21 (for-syntax (#,@prefix make-id-expander)) 22 (for-syntax (#,@prefix id-expander?)) 23 (#,@prefix define-id-expander) 24 (for-syntax (#,@prefix expand-all-id-expanders))))) 25 26 (define-require-syntax expander-in 27 (syntax-parser 28 [(_ require-spec id:id) 29 (reqprov-transformer2 #'id #'combine-in #'(only-in require-spec))])) 30 31 (define-provide-syntax expander-out 32 (syntax-parser 33 [(_ id:id) 34 (reqprov-transformer2 #'id #'combine-out #'(combine-out))]))