|
30 | 30 | [`(Vector ,ts ...)
|
31 | 31 | (unless (and (exact-nonnegative-integer? i)
|
32 | 32 | (i . < . (length ts)))
|
33 |
| - (error 'type-check "invalid index ~a" i)) |
| 33 | + (error 'type-check "invalid index ~a" i)) |
34 | 34 | (let ([t (list-ref ts i)])
|
35 |
| - (values `(has-type (vector-ref ,e (has-type ,i Integer)) ,t) t))] |
| 35 | + (values `(has-type (vector-ref ,e (has-type ,i Integer)) ,t) |
| 36 | + t))] |
36 | 37 | [else (error "expected a vector in vector-ref, not" t)])]
|
37 |
| - [`(vector-set! ,e-vec ,i ,e-arg) |
38 |
| - (define-values (e-vec^ t-vec) ((type-check env) e-vec)) |
39 |
| - (define-values (e-arg^ t-arg) ((type-check env) e-arg)) |
| 38 | + [`(vector-set! ,(app (type-check env) e-vec^ t-vec) ,i |
| 39 | + ,(app (type-check env) e-arg^ t-arg)) |
40 | 40 | (match t-vec
|
41 | 41 | [`(Vector ,ts ...)
|
42 | 42 | (unless (and (exact-nonnegative-integer? i)
|
|
51 | 51 | [else (error 'type-check
|
52 | 52 | "expected a vector in vector-set!, not ~a"
|
53 | 53 | t-vec)])]
|
54 |
| - [`(eq? ,e1 ,e2) |
55 |
| - (let-values ([(e1 t1) ((type-check env) e1)] |
56 |
| - [(e2 t2) ((type-check env) e2)]) |
57 |
| - (match* (t1 t2) |
58 |
| - [(`(Vector ,ts1 ...) `(Vector ,ts2 ...)) |
59 |
| - (values `(has-type (eq? ,e1 ,e2) Boolean) 'Boolean)] |
60 |
| - [(other wise) ((super type-check env) e)]))] |
| 54 | + [`(eq? ,(app (type-check env) e1 t1) ,(app (type-check env) e2 t2)) |
| 55 | + (match* (t1 t2) |
| 56 | + [(`(Vector ,ts1 ...) `(Vector ,ts2 ...)) |
| 57 | + (values `(has-type (eq? ,e1 ,e2) Boolean) 'Boolean)] |
| 58 | + [(other wise) ((super type-check env) e)])] |
61 | 59 | [else ((super type-check env) e)])))
|
62 | 60 |
|
63 | 61 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
0 commit comments