Wrap expected type. Closes PR 11980.
This commit is contained in:
parent
71b8440adb
commit
b76819a66e
21
collects/tests/typed-scheme/succeed/begin0-error.rkt
Normal file
21
collects/tests/typed-scheme/succeed/begin0-error.rkt
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
|
||||||
|
#lang typed/racket
|
||||||
|
|
||||||
|
(define-type SN (U String Number))
|
||||||
|
|
||||||
|
(define-predicate sn? SN)
|
||||||
|
|
||||||
|
(struct: (α) node ({left : α} {right : α}))
|
||||||
|
|
||||||
|
(: create-node (Any Any -> String))
|
||||||
|
(define (create-node x y)
|
||||||
|
(begin0
|
||||||
|
"foo"
|
||||||
|
(unless #t
|
||||||
|
(error 'bad ""))))
|
||||||
|
|
||||||
|
(: create-node2 (All (B) (B B -> (node SN))))
|
||||||
|
(define (create-node2 x y)
|
||||||
|
(if (and (sn? x) (sn? y))
|
||||||
|
(node x y)
|
||||||
|
(error 'bad "")))
|
|
@ -13,7 +13,7 @@
|
||||||
(env lexical-env type-env-structs tvar-env index-env)
|
(env lexical-env type-env-structs tvar-env index-env)
|
||||||
racket/private/class-internal
|
racket/private/class-internal
|
||||||
(except-in syntax/parse id)
|
(except-in syntax/parse id)
|
||||||
unstable/function
|
unstable/function #;unstable/debug
|
||||||
(only-in srfi/1 split-at))
|
(only-in srfi/1 split-at))
|
||||||
|
|
||||||
(require (for-template scheme/base racket/private/class-internal))
|
(require (for-template scheme/base racket/private/class-internal))
|
||||||
|
@ -236,7 +236,8 @@
|
||||||
;; the argument must be syntax
|
;; the argument must be syntax
|
||||||
(unless (syntax? form)
|
(unless (syntax? form)
|
||||||
(int-err "bad form input to tc-expr: ~a" form))
|
(int-err "bad form input to tc-expr: ~a" form))
|
||||||
(let (;; a local version of ret that does the checking
|
(let ([old-ret ret]
|
||||||
|
;; a local version of ret that does the checking
|
||||||
[ret
|
[ret
|
||||||
(lambda args
|
(lambda args
|
||||||
(define te (apply ret args))
|
(define te (apply ret args))
|
||||||
|
@ -292,7 +293,7 @@
|
||||||
;; begin
|
;; begin
|
||||||
[(begin e . es) (tc-exprs/check (syntax->list #'(e . es)) expected)]
|
[(begin e . es) (tc-exprs/check (syntax->list #'(e . es)) expected)]
|
||||||
[(begin0 e . es)
|
[(begin0 e . es)
|
||||||
(begin (tc-exprs/check (syntax->list #'es) Univ)
|
(begin (tc-exprs/check (syntax->list #'es) (old-ret Univ))
|
||||||
(tc-expr/check #'e expected))]
|
(tc-expr/check #'e expected))]
|
||||||
;; if
|
;; if
|
||||||
[(if tst thn els) (tc/if-twoarm #'tst #'thn #'els expected)]
|
[(if tst thn els) (tc/if-twoarm #'tst #'thn #'els expected)]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user