Compare commits
1 Commits
master
...
fix-define
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b82dec5599 |
|
@ -4,7 +4,8 @@
|
|||
syntax/parse
|
||||
syntax/stx
|
||||
racket/syntax
|
||||
typed-racket/utils/tc-utils)
|
||||
typed-racket/utils/tc-utils
|
||||
typed-racket/typecheck/renamer)
|
||||
typed-racket/utils/tc-utils)
|
||||
|
||||
(provide syntax-local-typed-context?
|
||||
|
@ -14,22 +15,12 @@
|
|||
(define (syntax-local-typed-context?)
|
||||
(unbox typed-context?))
|
||||
|
||||
(define-for-syntax (rename-head stx id)
|
||||
(syntax-case stx ()
|
||||
[(_ . args) (quasisyntax/loc stx (#,id . args))]
|
||||
[_ (quasisyntax/loc stx #,id)]))
|
||||
|
||||
(define-for-syntax ((typed/untyped-renamer typed-name untyped-name) stx)
|
||||
(if (unbox typed-context?)
|
||||
(rename-head stx typed-name)
|
||||
(rename-head stx untyped-name)))
|
||||
|
||||
(define-syntax (define-typed/untyped-identifier stx)
|
||||
(syntax-parse stx
|
||||
[(_ name:id typed-name:id untyped-name:id)
|
||||
(syntax/loc stx
|
||||
(define-syntax name
|
||||
(typed/untyped-renamer #'typed-name #'untyped-name)))]))
|
||||
(make-typed-renaming #'typed-name #'untyped-name)))]))
|
||||
|
||||
(define-for-syntax (freshen ids)
|
||||
(stx-map (lambda (id) ((make-syntax-introducer) id)) ids))
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
#lang racket
|
||||
|
||||
;; https://github.com/racket/typed-racket/issues/315
|
||||
|
||||
(module t/u racket
|
||||
(provide typed/untyped
|
||||
(rename-out [typed/untyped-typed original-typed-req-stx]
|
||||
[typed/untyped-untyped original-untyped-req-stx]))
|
||||
|
||||
(require typed/untyped-utils
|
||||
racket/require-syntax
|
||||
(for-syntax syntax/strip-context))
|
||||
|
||||
(define-require-syntax (typed/untyped-typed stx)
|
||||
(displayln 'typed)
|
||||
(syntax-case stx ()
|
||||
[(_ m s) (replace-context stx #'(submod m s typed))]))
|
||||
|
||||
(define-require-syntax (typed/untyped-untyped stx)
|
||||
(displayln 'untyped)
|
||||
(syntax-case stx ()
|
||||
[(_ m s) (replace-context stx #'(submod m s untyped))]))
|
||||
|
||||
(define-typed/untyped-identifier typed/untyped
|
||||
typed/untyped-typed
|
||||
typed/untyped-untyped))
|
||||
|
||||
(module m racket
|
||||
(module typed typed/racket
|
||||
(provide test-value typed-test-value)
|
||||
(define test-value : Symbol 'is-typed)
|
||||
(define typed-test-value : Symbol 'present))
|
||||
(module untyped typed/racket/no-check
|
||||
(provide test-value untyped-test-value)
|
||||
(define test-value : Symbol 'is-untyped)
|
||||
(define untyped-test-value : Symbol 'present)))
|
||||
|
||||
(module test-typed-1 typed/racket
|
||||
(require (submod ".." t/u))
|
||||
(require typed/rackunit)
|
||||
(require (original-typed-req-stx ".." m))
|
||||
(check-equal? test-value 'is-typed)
|
||||
(check-equal? typed-test-value 'present))
|
||||
|
||||
(module test-typed-2 typed/racket
|
||||
(require (submod ".." t/u))
|
||||
(require typed/rackunit)
|
||||
(require (typed/untyped ".." m))
|
||||
(check-equal? test-value 'is-typed)
|
||||
(check-equal? typed-test-value 'present))
|
||||
|
||||
(module test-typed-3 typed/racket
|
||||
(require (submod ".." t/u))
|
||||
(require typed/rackunit)
|
||||
(define-syntax renamer (make-rename-transformer #'original-typed-req-stx))
|
||||
(require (renamer ".." m))
|
||||
(check-equal? test-value 'is-typed)
|
||||
(check-equal? typed-test-value 'present))
|
||||
|
||||
(module test-untyped-1 racket
|
||||
(require (submod ".." t/u))
|
||||
(require rackunit)
|
||||
(require (original-untyped-req-stx ".." m))
|
||||
(check-equal? test-value 'is-untyped)
|
||||
(check-equal? untyped-test-value 'present))
|
||||
|
||||
(module test-untyped-2 racket
|
||||
(require (submod ".." t/u))
|
||||
(require rackunit)
|
||||
(require (typed/untyped ".." m))
|
||||
(check-equal? test-value 'is-untyped)
|
||||
(check-equal? untyped-test-value 'present))
|
||||
|
||||
(module test-untyped-3 racket
|
||||
(require (submod ".." t/u))
|
||||
(require rackunit)
|
||||
(define-syntax renamer (make-rename-transformer #'original-untyped-req-stx))
|
||||
(require (renamer ".." m))
|
||||
(check-equal? test-value 'is-untyped)
|
||||
(check-equal? untyped-test-value 'present))
|
||||
|
||||
(require 'test-typed-1 'test-typed-2 'test-typed-3
|
||||
'test-untyped-1 'test-untyped-2 'test-untyped-3)
|
Loading…
Reference in New Issue
Block a user