From 70aafc8bdff5b9f4d7a966620753386e12d754a6 Mon Sep 17 00:00:00 2001 From: Sam Caldwell Date: Fri, 14 Sep 2018 16:40:43 -0400 Subject: [PATCH] re-finangle `define/intermediate` to allow require & provides Needed to change from `make-rename-transformer` to `make-variable-like-transformer` because apparently rename transformers are treated differently when referred to from another model, hiding the syntax properties on the target. --- racket/typed/examples/roles/provides.rkt | 8 ++++++++ racket/typed/examples/roles/requires.rkt | 5 +++++ racket/typed/roles.rkt | 10 +++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 racket/typed/examples/roles/provides.rkt create mode 100644 racket/typed/examples/roles/requires.rkt diff --git a/racket/typed/examples/roles/provides.rkt b/racket/typed/examples/roles/provides.rkt new file mode 100644 index 0000000..3ab3d46 --- /dev/null +++ b/racket/typed/examples/roles/provides.rkt @@ -0,0 +1,8 @@ +#lang typed/syndicate/roles + +(provide a-fun) + +(define (a-fun [x : Int] -> Int) + (+ x 1)) + +#;(a-fun 5) \ No newline at end of file diff --git a/racket/typed/examples/roles/requires.rkt b/racket/typed/examples/roles/requires.rkt new file mode 100644 index 0000000..4cae840 --- /dev/null +++ b/racket/typed/examples/roles/requires.rkt @@ -0,0 +1,5 @@ +#lang typed/syndicate/roles + +(require "provides.rkt") + +(a-fun 5) \ No newline at end of file diff --git a/racket/typed/roles.rkt b/racket/typed/roles.rkt index e852e38..de6f279 100644 --- a/racket/typed/roles.rkt +++ b/racket/typed/roles.rkt @@ -37,6 +37,8 @@ print-type print-role ;; Extensions match cond + ;; require & provides + require provide ) (require (prefix-in syndicate: syndicate/actor-lang)) @@ -1411,10 +1413,12 @@ (define-syntax (define/intermediate stx) (syntax-parse stx [(_ x:id x-:id τ e) - ;; typed-variable-rename allows for using at module top level + #:with x+ (add-orig (assign-type #'x- #'τ #:wrap? #f) #'x) + ;; including a syntax binding for x allows for module-top-level references + ;; (where walk/bind won't replace further uses) and subsequent provides #'(begin- - (define-typed-variable-rename x ≫ x- : τ) - (define- x- e))])) + (define-syntax x (make-variable-like-transformer #'x+)) + (define- x+ e))])) ;; copied from ext-stlc (define-typed-syntax define