diff --git a/typed-racket-lib/typed-racket/typecheck/provide-handling.rkt b/typed-racket-lib/typed-racket/typecheck/provide-handling.rkt index ae7e93af..889cab88 100644 --- a/typed-racket-lib/typed-racket/typecheck/provide-handling.rkt +++ b/typed-racket-lib/typed-racket/typecheck/provide-handling.rkt @@ -10,7 +10,7 @@ (for-syntax racket/base) (for-template racket/base "def-export.rkt")) -(provide remove-provides provide? generate-prov get-alternate) +(provide remove-provides provide? generate-prov) (define (provide? form) (syntax-parse form diff --git a/typed-racket-lib/typed-racket/typecheck/renamer.rkt b/typed-racket-lib/typed-racket/typecheck/renamer.rkt index 110f677f..e33b2b20 100644 --- a/typed-racket-lib/typed-racket/typecheck/renamer.rkt +++ b/typed-racket-lib/typed-racket/typecheck/renamer.rkt @@ -1,22 +1,12 @@ #lang racket/base -(provide renamer get-alternate un-rename) +(provide renamer un-rename) ;; target : identifier ;; alternate : identifier (define-struct typed-renaming (target alternate) #:property prop:rename-transformer 0) -;; identifier -> identifier -;; get the alternate field of the renaming, if it exists -(define (get-alternate id) - (define-values (v new-id) (syntax-local-value/immediate id (λ _ (values #f #f)))) - (cond [(typed-renaming? v) - (typed-renaming-alternate v)] - [(rename-transformer? v) - (get-alternate (rename-transformer-target v))] - [else id])) - (define (renamer id [alt #f]) (if alt (make-typed-renaming (syntax-property id 'not-free-identifier=? #t) alt) diff --git a/typed-racket-lib/typed-racket/utils/require-contract.rkt b/typed-racket-lib/typed-racket/utils/require-contract.rkt index 5356ac81..2b775642 100644 --- a/typed-racket-lib/typed-racket/utils/require-contract.rkt +++ b/typed-racket-lib/typed-racket/utils/require-contract.rkt @@ -5,8 +5,7 @@ (require racket/contract/region racket/contract/base syntax/location (for-syntax racket/base - syntax/parse - (prefix-in tr: "../typecheck/renamer.rkt"))) + syntax/parse)) (provide require/contract define-ignored) @@ -27,11 +26,6 @@ 'inferred-name (syntax-e #'name)))])])) -(define-syntax (get-alternate stx) - (syntax-case stx () - [(_ id) - (tr:get-alternate #'id)])) - ;; Requires an identifier from an untyped module into a typed module ;; nm is the import ;; hidden is an id that will end up being the actual definition @@ -56,9 +50,16 @@ (define-ignored hidden (contract cnt - (get-alternate nm.orig-nm-r) + #,(get-alternate #'nm.orig-nm-r) '(interface for #,(syntax->datum #'nm.nm)) (current-contract-region) (quote nm.nm) (quote-srcloc nm.nm))))])) +;; identifier -> identifier +;; get the alternate field of the renaming, if it exists +(define-for-syntax (get-alternate id) + (define-values (v new-id) (syntax-local-value/immediate id (λ _ (values #f #f)))) + (cond [(rename-transformer? v) + (get-alternate (rename-transformer-target v))] + [else id])) diff --git a/typed-racket-test/succeed/require-typed-on-typed-module.rkt b/typed-racket-test/succeed/require-typed-on-typed-module.rkt new file mode 100644 index 00000000..8d3c7ecf --- /dev/null +++ b/typed-racket-test/succeed/require-typed-on-typed-module.rkt @@ -0,0 +1,11 @@ +#lang racket/base + +(module a typed/racket + (require/typed racket/base [values (-> String String)]) + (provide values)) + +(module b typed/racket + (require/typed (submod ".." a) [values (-> String Any)]) + values) + +(require 'b)