lifted-variables-communication.rkt (1085B)
1 #lang racket/base 2 3 (provide lift-late-pvars-param 4 (for-syntax lift-late-pvars-target 5 lifted-pvar 6 x-lifted-pvar-marker)) 7 8 (require racket/stxparam 9 (for-syntax racket/base 10 racket/syntax 11 "optcontract.rkt")) 12 13 (define-syntax-parameter lift-late-pvars-param #f) 14 15 (define-for-syntax (lift-late-pvars-target) 16 (syntax-parameter-value #'lift-late-pvars-param)) 17 18 (define-for-syntax x-lifted-pvar-marker (make-syntax-introducer)) 19 20 ;; Returns two values, the syntax to insert, and a symbol to use at run-time 21 ;; to access the value of that lifted pvar. 22 (begin-for-syntax 23 (define/contract (lifted-pvar name macro+args-stx) 24 (-> symbol? syntax? (cons/c symbol? syntax?)) 25 (define lifted-symbol (gensym (format "lifted-~a" name))) 26 (define lifted-hint-id (generate-temporary lifted-symbol)) 27 (cons lifted-symbol 28 (syntax-property (x-lifted-pvar-marker lifted-hint-id) 29 'lifted-pvar 30 (cons lifted-symbol macro+args-stx)))))