From 82fa4808d6d3abbde31b28f703b5cdbfd785c25d Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Wed, 20 Nov 2013 17:58:50 -0500 Subject: [PATCH] Fix `make-predicate` at the top-level This solves the immediate problem, but more generally the handling of ignored syntax at the top-level seems very fishy. There is a complicated protocol involving the top-level type-checker returning # for cases with no obvious return type, but it's unclear if it actually works. That code in tc-toplevel.rkt should be revamped in the future. Closes PR 14030 Please merge into 6.0 original commit: f292a9c0f277bc07d0932ed67f893ca1cb022a43 --- .../typed-racket/base-env/prims.rkt | 23 ++++++++++--------- .../succeed/top-level-make-predicate.rkt | 5 ++++ 2 files changed, 17 insertions(+), 11 deletions(-) create mode 100644 pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/succeed/top-level-make-predicate.rkt diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/base-env/prims.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/base-env/prims.rkt index 997ca059..0d85ee86 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/base-env/prims.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/base-env/prims.rkt @@ -262,17 +262,18 @@ This file defines two sorts of primitives. All of them are provided into any mod (if (Error? typ) ;; This code should never get run, typechecking will have an error earlier #`(error 'make-predicate "Couldn't parse type") - #`(ann - #,(ignore-some-property - (type->contract - typ - ;; must be a flat contract - #:kind 'flat - ;; the value is not from the typed side - #:typed-side #f - (type->contract-fail typ #'ty #:ctc-str "predicate")) - #t) - (Any -> Boolean : ty)))))])) + #`(let () + (ann + #,(ignore-some-property + (type->contract + typ + ;; must be a flat contract + #:kind 'flat + ;; the value is not from the typed side + #:typed-side #f + (type->contract-fail typ #'ty #:ctc-str "predicate")) + #t) + (Any -> Boolean : ty))))))])) (define-syntax (cast stx) (syntax-parse stx diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/succeed/top-level-make-predicate.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/succeed/top-level-make-predicate.rkt new file mode 100644 index 00000000..6866e885 --- /dev/null +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/succeed/top-level-make-predicate.rkt @@ -0,0 +1,5 @@ +#lang racket/load +;; Test for PR 14030 +(require typed/racket) +(make-predicate Integer) +