diff --git a/collects/tests/typed-scheme/succeed/struct:-mutable.rkt b/collects/tests/typed-scheme/succeed/struct:-mutable.rkt new file mode 100644 index 00000000..3ea0c171 --- /dev/null +++ b/collects/tests/typed-scheme/succeed/struct:-mutable.rkt @@ -0,0 +1,6 @@ +#lang typed/racket + +(struct: foo ([x : Integer]) #:mutable) + +(: f (Integer -> foo)) +(define (f x) (foo x)) \ No newline at end of file diff --git a/collects/typed-scheme/typecheck/tc-toplevel.rkt b/collects/typed-scheme/typecheck/tc-toplevel.rkt index 5acdfdbb..bb330b89 100644 --- a/collects/typed-scheme/typecheck/tc-toplevel.rkt +++ b/collects/typed-scheme/typecheck/tc-toplevel.rkt @@ -97,6 +97,11 @@ (#%plain-app values))) (tc/struct #'nm (syntax->list #'(fld ...)) (syntax->list #'(ty ...)) #:maker #'m)] + [(define-values () (begin (quote-syntax (define-typed-struct-internal nm ([fld : ty] ...) + #:maker m #:mutable)) + (#%plain-app values))) + (tc/struct #'nm (syntax->list #'(fld ...)) (syntax->list #'(ty ...)) + #:maker #'m #:mutable #t)] [(define-values () (begin (quote-syntax (define-typed-struct-internal (vars ...) nm ([fld : ty] ...) #:maker m)) (#%plain-app values))) @@ -107,7 +112,10 @@ (tc/struct #'nm (syntax->list #'(fld ...)) (syntax->list #'(ty ...)) #:type-only #t)] ;; define-typed-struct w/ polymorphism [(define-values () (begin (quote-syntax (define-typed-struct-internal (vars ...) nm ([fld : ty] ...))) (#%plain-app values))) - (tc/poly-struct (syntax->list #'(vars ...)) #'nm (syntax->list #'(fld ...)) (syntax->list #'(ty ...)))] + (tc/poly-struct (syntax->list #'(vars ...)) #'nm (syntax->list #'(fld ...)) (syntax->list #'(ty ...)))] + ;; error in other cases + [(define-values () (begin (quote-syntax (define-typed-struct-internal . _)) (#%plain-app values))) + (int-err "unknown structure form")] ;; executable structs - this is a big hack [(define-values () (begin (quote-syntax (define-typed-struct/exec-internal nm ([fld : ty] ...) proc-ty)) (#%plain-app values)))