override.rkt (1366B)
1 #lang racket 2 3 (require (for-syntax "exptime.rkt" 4 debug-scopes/named-scopes-sli-parameter)) 5 6 (define-for-syntax (use-site-context?) 7 (not (bound-identifier=? (syntax-local-introduce #'here) 8 (syntax-local-identifier-as-binding 9 (syntax-local-introduce #'here))))) 10 11 (provide (rename-out [-define-syntax define-syntax]) 12 (for-syntax 13 (rename-out [-syntax-local-introduce syntax-local-introduce]))) 14 15 (define-syntax (-define-syntax stx) 16 (syntax-case stx () 17 [(_ (name arg) . body) #'(define-syntax name 18 (named-transformer (name arg) 19 . body))] 20 [(_ name value) #'(define-syntax name value)])) 21 22 (define-for-syntax (-syntax-local-introduce stx) 23 (define /m (if (sli-scopes) 24 ((sli-scopes) stx 'flip) 25 (syntax-local-introduce stx))) 26 (if (use-site-context?) 27 (let* ([zero (datum->syntax #f 'zero)] 28 [sli (syntax-local-introduce zero)] 29 [sli-use (syntax-local-identifier-as-binding sli)] 30 [+sli (make-syntax-delta-introducer sli zero)] 31 [+sli-use (make-syntax-delta-introducer sli-use zero)] 32 [use (+sli-use sli 'remove)] 33 [+use (make-syntax-delta-introducer use zero)]) 34 (+use /m)) 35 /m))