Refactor the renamer module

Moves `get-alternate` since its only user is the require-contract
module. In addition, it appears that one of the cases in the
conditional in its body is unnecessary. This likely means that
the extra machinery for typed-renamers are not needed at all.

Also adds a test for `require/typed` of a typed module
This commit is contained in:
Asumu Takikawa 2015-08-18 17:17:14 -04:00
parent fd3941c062
commit 552f509102
4 changed files with 22 additions and 20 deletions

View File

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

View File

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

View File

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

View File

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