From 21b5c25c90a323d443b9611d9c0d30d30afb7dea Mon Sep 17 00:00:00 2001 From: Sam Tobin-Hochstadt Date: Fri, 14 May 2010 10:58:55 -0400 Subject: [PATCH] Add annotation to test. Fix default case for `vector-set!' --- collects/tests/typed-scheme/succeed/het-vec.ss | 2 +- collects/typed-scheme/typecheck/tc-app.rkt | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/collects/tests/typed-scheme/succeed/het-vec.ss b/collects/tests/typed-scheme/succeed/het-vec.ss index e261c09237..7d4bc354b3 100644 --- a/collects/tests/typed-scheme/succeed/het-vec.ss +++ b/collects/tests/typed-scheme/succeed/het-vec.ss @@ -1,6 +1,6 @@ #lang typed/scheme -(ann (vector-ref #(1 foo 3) 0) Integer) +(ann (vector-ref (ann #(1 foo 3) (Vector Integer Symbol Any)) 0) Integer) (define: x : (Vector Number String Symbol) (vector 1 "foo" 'bar)) diff --git a/collects/typed-scheme/typecheck/tc-app.rkt b/collects/typed-scheme/typecheck/tc-app.rkt index a7fe1749d6..9afae1e2ae 100644 --- a/collects/typed-scheme/typecheck/tc-app.rkt +++ b/collects/typed-scheme/typecheck/tc-app.rkt @@ -456,7 +456,7 @@ (tc-error/expr #:stx #'e #:return (or expected (ret (Un))) "index ~a too large for vector ~a" ival t)]))] [v-ty (let ([arg-tys (list v-ty e-t)]) - (tc/funapp #'op #'args (single-value #'op) arg-tys expected))]))] + (tc/funapp #'op #'(v e) (single-value #'op) arg-tys expected))]))] [(#%plain-app (~and op (~literal vector-set!)) v e:expr val:expr) (let ([e-t (single-value #'e)]) (match (single-value #'v) @@ -475,14 +475,17 @@ (check-below (ret -Void) expected) (ret -Void))] [(not (and (integer? ival) (exact? ival))) + (single-value #'val) (tc-error/expr #:stx #'e #:return (or expected (ret (Un))) "expected exact integer for vector index, but got ~a" ival)] [(< ival 0) + (single-value #'val) (tc-error/expr #:stx #'e #:return (or expected (ret (Un))) "index ~a too small for vector ~a" ival t)] [(not (<= ival (sub1 (length es)))) + (single-value #'val) (tc-error/expr #:stx #'e #:return (or expected (ret (Un))) "index ~a too large for vector ~a" ival t)]))] [v-ty - (let ([arg-tys (list v-ty e-t)]) - (tc/funapp #'op #'args (single-value #'op) arg-tys expected))]))] + (let ([arg-tys (list v-ty e-t (single-value #'val))]) + (tc/funapp #'op #'(v e val) (single-value #'op) arg-tys expected))]))] [(#%plain-app (~and op (~literal vector)) args:expr ...) (match expected [(tc-result1: (Vector: t))