From 2e802bc3bc4c1e88b8676c65963dfe40dfdb9def Mon Sep 17 00:00:00 2001 From: Eric Dobson Date: Mon, 29 Apr 2013 20:45:49 -0700 Subject: [PATCH] Fix contract generation for mutable structures. original commit: de96643fbe9e50b9554805b2aec199b8bc38962a --- .../succeed/struct-mutable-contract.rkt | 14 ++++++++++++++ collects/typed-racket/private/type-contract.rkt | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 collects/tests/typed-racket/succeed/struct-mutable-contract.rkt diff --git a/collects/tests/typed-racket/succeed/struct-mutable-contract.rkt b/collects/tests/typed-racket/succeed/struct-mutable-contract.rkt new file mode 100644 index 00000000..ff228fb4 --- /dev/null +++ b/collects/tests/typed-racket/succeed/struct-mutable-contract.rkt @@ -0,0 +1,14 @@ +#lang racket/load + +(module promise typed/racket/base + (require (for-syntax racket/base)) + (provide MyPromise) + (define-struct: (a) MyPromise ([thunk : (-> a)]) + #:mutable)) + +(module user racket/base + (require 'promise) + (MyPromise (lambda () #f))) + + +(require 'user) diff --git a/collects/typed-racket/private/type-contract.rkt b/collects/typed-racket/private/type-contract.rkt index 53312a1c..74cd0334 100644 --- a/collects/typed-racket/private/type-contract.rkt +++ b/collects/typed-racket/private/type-contract.rkt @@ -142,9 +142,9 @@ (let loop ([ty ty] [typed-side (if typed-side 'typed 'untyped)] [structs-seen null] [kind kind]) (define (t->c t #:seen [structs-seen structs-seen] #:kind [kind kind]) (loop t typed-side structs-seen kind)) - (define (t->c/neg t #:seen [structs-seen structs-seen] #:flat [kind kind]) + (define (t->c/neg t #:seen [structs-seen structs-seen] #:kind [kind kind]) (loop t (flip-side typed-side) structs-seen kind)) - (define (t->c/both t #:seen [structs-seen structs-seen] #:flat [kind kind]) + (define (t->c/both t #:seen [structs-seen structs-seen] #:kind [kind kind]) (loop t 'both structs-seen kind)) (define (t->c/fun f #:method [method? #f]) (match f