From bd7fc201347738fa6ce7502f03550836d84ce10e Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Wed, 21 Aug 2013 13:44:25 -0400 Subject: [PATCH] Require Procedure contract to be a chaperone Closes PR 13746 original commit: 7ea19bf95127adfde0db9d70b9be8d633886b870 --- .../typed-racket-lib/typed-racket/private/type-contract.rkt | 4 +++- .../typed-racket-test/tests/typed-racket/fail/pr13746.rkt | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/fail/pr13746.rkt diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/type-contract.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/type-contract.rkt index 4001b3db..fcbd9811 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/type-contract.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/type-contract.rkt @@ -148,7 +148,9 @@ (loop t 'both structs-seen kind)) (define (t->c/fun f #:method [method? #f]) (match f - [(Function: (list (top-arr:))) #'(case->)] + [(Function: (list (top-arr:))) + (set-chaperone!) + #'(case->)] [(Function: arrs) (set-chaperone!) ;; Try to generate a single `->*' contract if possible. diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/fail/pr13746.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/fail/pr13746.rkt new file mode 100644 index 00000000..d03778a5 --- /dev/null +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/fail/pr13746.rkt @@ -0,0 +1,6 @@ +#; +(exn:pred #rx"Procedure could not be converted to a predicate") +#lang typed/racket + +(define-predicate A? Procedure) +