Fix send
on a receiver with recursive type
Thanks to Matthias for finding the bug
This commit is contained in:
parent
638618ae40
commit
3149b0a305
|
@ -49,7 +49,9 @@
|
|||
"send: type mismatch"
|
||||
"expected" "an object"
|
||||
"given" rcvr-type)]))
|
||||
(define final-ret (do-check (tc-expr/t rcvr)))
|
||||
;; Make sure to resolve before `do-check` because the type might
|
||||
;; be a Name type or recursive type and thus unable to match Instance:
|
||||
(define final-ret (do-check (resolve (tc-expr/t rcvr))))
|
||||
(add-typeof-expr form final-ret)
|
||||
final-ret)
|
||||
|
||||
|
|
|
@ -2083,4 +2083,14 @@
|
|||
(: get-a (-> String))
|
||||
(define/public (get-a) a)))
|
||||
(error "foo"))
|
||||
#:msg #rx"expected: String.*given: Integer"]))
|
||||
#:msg #rx"expected: String.*given: Integer"]
|
||||
;; Make sure `send` works on a recursively typed object
|
||||
[tc-e (let ()
|
||||
(: o (Rec X (Object [m (-> Void)] [n (-> X Void)])))
|
||||
(define o
|
||||
(make-object (class object%
|
||||
(super-new)
|
||||
(define/public (m) (void))
|
||||
(define/public (n x) (void)))))
|
||||
(send o m))
|
||||
-Void]))
|
||||
|
|
Loading…
Reference in New Issue
Block a user