From b5c5ad7258c46bd94888537c2551dbaeb5461f3d Mon Sep 17 00:00:00 2001 From: Eric Dobson Date: Thu, 30 Jun 2011 12:59:01 -0400 Subject: [PATCH] Changed define-predicate to use recursive-contract. Closes PR 10939. Closes PR11504. original commit: 76a1112df03083098dc5aaff951d9e768e5af1b6 --- collects/tests/typed-scheme/succeed/pr10939.rkt | 8 ++++++++ collects/tests/typed-scheme/succeed/pr11504.rkt | 7 +++++++ collects/typed-scheme/private/type-contract.rkt | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 collects/tests/typed-scheme/succeed/pr10939.rkt create mode 100644 collects/tests/typed-scheme/succeed/pr11504.rkt diff --git a/collects/tests/typed-scheme/succeed/pr10939.rkt b/collects/tests/typed-scheme/succeed/pr10939.rkt new file mode 100644 index 00000000..75e5fcfd --- /dev/null +++ b/collects/tests/typed-scheme/succeed/pr10939.rkt @@ -0,0 +1,8 @@ +#lang typed/scheme + +(define-type (T elem) + (U 'other a:empty)) + +(define-predicate a:list? (T Any)) + +(define-struct: a:empty ()) diff --git a/collects/tests/typed-scheme/succeed/pr11504.rkt b/collects/tests/typed-scheme/succeed/pr11504.rkt new file mode 100644 index 00000000..e319bab3 --- /dev/null +++ b/collects/tests/typed-scheme/succeed/pr11504.rkt @@ -0,0 +1,7 @@ +#lang typed/racket + +(define-type Animal (U cat dog)) +(define-predicate animal? Animal) + +(struct: cat ([lives : Natural])) +(struct: dog ([bark : Natural] [bite : Natural])) diff --git a/collects/typed-scheme/private/type-contract.rkt b/collects/typed-scheme/private/type-contract.rkt index d9f5331d..12b4fc26 100644 --- a/collects/typed-scheme/private/type-contract.rkt +++ b/collects/typed-scheme/private/type-contract.rkt @@ -40,7 +40,7 @@ #:typed-side #f #:flat flat? (lambda () (tc-error/stx prop "Type ~a could not be converted to a contract." typ)))]) - (syntax/loc stx (define-values (n) cnt))))] + (quasisyntax/loc stx (define-values (n) (recursive-contract cnt #,(if flat? #'#:flat #'#:impersonator))))))] [_ (int-err "should never happen - not a define-values: ~a" (syntax->datum stx))])) (define (change-contract-fixups forms)