diff --git a/collects/tests/typed-scheme/succeed/require-substruct.ss b/collects/tests/typed-scheme/succeed/require-substruct.ss new file mode 100644 index 00000000..3de92b35 --- /dev/null +++ b/collects/tests/typed-scheme/succeed/require-substruct.ss @@ -0,0 +1,17 @@ +#lang scheme/load + +(module m scheme + (define-struct X (x) #:transparent) + (define-struct (Y X) (y) #:transparent) + (provide (all-defined-out))) + +(module n typed-scheme + (require-typed-struct X ([x : Number]) 'm) + (require-typed-struct (Y X) ([y : Number]) 'm) + (make-X 43) + (define: x : Any 3) + (if (Y? x) + (X-x x) + 4)) + +(require 'n) diff --git a/collects/typed-scheme/private/base-env.ss b/collects/typed-scheme/private/base-env.ss index 4ea54fb3..10114def 100644 --- a/collects/typed-scheme/private/base-env.ss +++ b/collects/typed-scheme/private/base-env.ss @@ -558,3 +558,5 @@ ;; string.ss [real->decimal-string (N [-Nat] . ->opt . -String)] + +[current-continuation-marks (-> -Cont-Mark-Set)] \ No newline at end of file diff --git a/collects/typed-scheme/private/base-special-env.ss b/collects/typed-scheme/private/base-special-env.ss index 321e0483..beb90513 100644 --- a/collects/typed-scheme/private/base-special-env.ss +++ b/collects/typed-scheme/private/base-special-env.ss @@ -29,8 +29,8 @@ [year : N] [weekday : N] [year-day : N] [dst? : B] [time-zone-offset : N]) ()) (d-s exn ([message : -String] [continuation-marks : Univ]) ()) - (d-s (exn:fail exn) () (-String Univ)) - (d-s (exn:fail:read exn:fail) ([srclocs : (-lst Univ)]) (-String Univ)) + (d-s (exn:fail exn) () (-String -Cont-Mark-Set)) + (d-s (exn:fail:read exn:fail) ([srclocs : (-lst Univ)]) (-String -Cont-Mark-Set)) ) (provide (for-syntax initial-env/special-case initialize-others initialize-type-env) diff --git a/collects/typed-scheme/private/require-contract.ss b/collects/typed-scheme/private/require-contract.ss index e86e5f0d..c718b42f 100644 --- a/collects/typed-scheme/private/require-contract.ss +++ b/collects/typed-scheme/private/require-contract.ss @@ -6,13 +6,19 @@ (define-syntax (define-ignored stx) (syntax-case stx () [(_ name expr) - (syntax-case (local-expand/capture-lifts #'expr 'expression + (syntax-case (local-expand/capture-lifts #'expr + 'expression (list #'define-values)) (begin define-values) [(begin (define-values (n) e) e*) - #'(begin (define-values (n) e) - (define name e*))] - [e #'(define name e)])])) + #`(begin (define-values (n) e) + (define name #,(syntax-property #'e* + 'inferred-name + (syntax-e #'name))))] + [(begin (begin e)) + #`(define name #,(syntax-property #'e + 'inferred-name + (syntax-e #'name)))])])) (define-syntax (require/contract stx) (syntax-case stx ()