www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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)))))