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:
parent
fd3941c062
commit
552f509102
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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]))
|
||||
|
|
11
typed-racket-test/succeed/require-typed-on-typed-module.rkt
Normal file
11
typed-racket-test/succeed/require-typed-on-typed-module.rkt
Normal 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)
|
Loading…
Reference in New Issue
Block a user