Skip to content

Commit 3912f4a

Browse files
committed
some progress and test cases
1 parent 5c07e1a commit 3912f4a

File tree

15 files changed

+132
-6
lines changed

15 files changed

+132
-6
lines changed

dynamic-typing.rkt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,10 @@
286286
,((cast-insert) e2))))]
287287
[`(not ,e) `(inject (not (project ,((cast-insert) e) Boolean)) Boolean)]
288288
[`(eq? ,e1 ,e2) `(inject (eq? ,((cast-insert) e1),((cast-insert) e2)) Boolean)]
289-
[`(if ,eq ,et ,ef) `(if (eq? ,((cast-insert) eq) (inject #t Boolean)) ,((cast-insert) et) ,((cast-insert) ef))]
289+
[`(if ,eq ,et ,ef) `(if (eq? ,((cast-insert) eq) (inject #f Boolean)) ,((cast-insert) ef) ,((cast-insert) et))]
290290
[`(vector ,es ...) `(inject (vector ,@(map (cast-insert) es)) (Vector ,@(map (lambda (x) 'Any) es)))]
291291
[`(vector-ref ,e1 ,n) `(vector-ref (project ,((cast-insert) e1) (Vectorof Any)) ,n)]
292-
[`(vector-set! ,e1 ,n ,e2) `(vector-set! (project ,((cast-insert) e1) (Vectorof Any)) ,n ,((cast-insert) e2))]
292+
[`(vector-set! ,e1 ,n ,e2) `(inject (vector-set! (project ,((cast-insert) e1) (Vectorof Any)) ,n ,((cast-insert) e2)) Void)]
293293
[`(void) `(inject (void) Void)] ; ???
294294
[`(lambda (,xs ...) ,e) `(inject (lambda: (,@(map (lambda (x) `[,x : Any]) xs)) : Any ,((cast-insert) e)) (,@(map (lambda (x) 'Any) xs) -> Any))]
295295
[`(app ,e ,es ...) `(app (project ,((cast-insert) e) (,@(map (lambda (x) 'Any) es) -> Any)) ,@(map (cast-insert) es))]

interp.rkt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@
366366
['Boolean (if val #t #f)]
367367
['Integer val]
368368
['Void (void)]
369+
['Any `(inject ,(arithmetic-shift val -2) Integer)]
369370
[else (error (format "don't know how to display type ~a" ty))]))
370371

371372
));; class interp-R1

run-tests.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
(2 . ,(range 1 19))
4242
(3 . ,(range 1 20))
4343
(4 . ,(range 0 8))
44-
(6 . ,(range 0 8))
44+
(6 . ,(range 0 10))
4545
(7 . ,(range 0 8))
4646
))
4747

tests/s6_10.rkt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
(define (hello29999) : Any (inject 24 Integer))
2+
(define (world30000) : Any (inject 24 Integer))
3+
4+
(let ((x30001
5+
(inject
6+
(vector (inject 0 Integer) (inject 0 Integer))
7+
(Vector Any Any))))
8+
(let ((y30002
9+
(inject
10+
(vector-set!
11+
(project x30001 (Vector Any Any))
12+
0
13+
(
14+
(project (inject hello29999 (-> Any)) (-> Any))))
15+
Void)))
16+
(let ((z30003
17+
(inject
18+
(vector-set!
19+
(project x30001 (Vector Any Any))
20+
1
21+
(
22+
(project
23+
(inject world30000 (-> Any))
24+
(-> Any))))
25+
Void)))
26+
(inject
27+
(+
28+
(project
29+
(inject (- (project (inject 6 Integer) Integer)) Integer)
30+
Integer)
31+
(project
32+
(inject
33+
(+
34+
(project (vector-ref (project x30001 (Vector Any Any)) 0) Integer)
35+
(project (vector-ref (project x30001 (Vector Any Any)) 1) Integer))
36+
Integer)
37+
Integer))
38+
Integer))))

tests/s6_8.rkt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
(define (hello29999) : Any (inject 24 Integer))
2+
(define (world30000) : Any (inject 24 Integer))
3+
4+
(let ((x30001
5+
(vector (inject 0 Integer) (inject 0 Integer))
6+
))
7+
(let ((y30002
8+
(inject
9+
(vector-set! x30001
10+
0
11+
(
12+
(project (inject hello29999 (-> Any)) (-> Any))))
13+
Void)))
14+
(let ((z30003
15+
(inject
16+
(vector-set! x30001
17+
1
18+
(
19+
(project
20+
(inject world30000 (-> Any))
21+
(-> Any))))
22+
Void)))
23+
(inject
24+
(+ (- (project (inject 6 Integer) Integer))
25+
(+
26+
(project (vector-ref x30001 0) Integer)
27+
(project (vector-ref x30001 1) Integer)))
28+
Integer))))

tests/s6_9.rkt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
(define (hello29999) : Any (inject 24 Integer))
2+
(define (world30000) : Any (inject 24 Integer))
3+
4+
(let ((x30001
5+
(inject
6+
(vector (inject 0 Integer) (inject 0 Integer))
7+
(Vector Any Any))))
8+
(let ((y30002
9+
(inject
10+
(vector-set!
11+
(project x30001 (Vector Any Any))
12+
0
13+
(
14+
(project (inject hello29999 (-> Any)) (-> Any))))
15+
Void)))
16+
(let ((z30003
17+
(inject
18+
(vector-set!
19+
(project x30001 (Vector Any Any))
20+
1
21+
(
22+
(project
23+
(inject world30000 (-> Any))
24+
(-> Any))))
25+
Void)))
26+
(let ((a (project x30001 (Vector Any Any))))
27+
(+ (- 6) (+ (project (vector-ref a 0) Integer) (project (vector-ref a 1) Integer)))))))

tests/s7_3.rkt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
(let ([x (vector 1 2 3 42)])
2+
(let ([y (vector-set! x 0 42)])
3+
(let ([z (vector-set! x 1 42)])
4+
((lambda (vec) (vector-ref vec 3)) x))))
5+

tests/s7_4.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
42

tests/s7_4.rkt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
(let ([x (vector 42 42 42)])
2+
(if (read) ((lambda (x) (+ (- (vector-ref x 2)) 84)) x)
3+
(if (and (eq? #t #f) (eq? (vector-ref x 0) (vector-ref x 1)))
4+
(vector-ref x 0) (void))))

tests/s7_5.rkt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
(define (hello) 24)
2+
(define (world) 24)
3+
(let ([x (vector 0 0)])
4+
(let ([y (vector-set! x 0 (hello))])
5+
(let ([z (vector-set! x 1 (world))])
6+
(+ (- 6) (+ (vector-ref x 0) (vector-ref x 1))))))

tests/s7_6.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
42

tests/s7_6.rkt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
(define (hopefully-int) (lambda (x) (let ([maybe-int (read)])
2+
(if (eq? maybe-int 42) x
3+
42))))
4+
(define (hopefully-bool) (lambda (x) (and (not x) #t)))
5+
(if (hopefully-bool) ((hopefully-int) 42)
6+
(+ ((hopefully-int) 42) 0))

tests/s7_7.rkt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
(define (vector-foo vec) (vector-set! vec 0 42))
3+
(define (vector-foo-too vec) (vector-set! vec 1 42))
4+
(define (vector-foo-three vec)
5+
(let ([veca (vector-set! vec 2 42)])
6+
(vector-ref veca 2)))
7+
(let ([x (vector-foo (vector-foo-too (vector-foo-three (vector 0 0 0))))])
8+
x)

utilities.rkt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,9 +269,9 @@
269269
(display "in program")(newline)
270270
(pretty-print new-p)(newline)
271271
(error 'check-passes
272-
"differing results in compiler '~a' pass '~a', expected ~a, not"
272+
"differing results in compiler '~a' pass '~a', expected ~a, not ~a"
273273
name pass-name result
274-
#;new-result
274+
new-result
275275
)])]
276276
[else ;; no result to check yet
277277
(loop (cdr passes) new-p new-result)]))]

vectors.rkt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,8 @@
318318
(define new-e-vec ((select-instructions) e-vec))
319319
(define new-e-arg ((select-instructions) e-arg))
320320
`((movq ,new-e-vec (reg r11))
321-
(movq ,new-e-arg (deref r11 ,(* (add1 i) 8))))]
321+
(movq ,new-e-arg (deref r11 ,(* (add1 i) 8)))
322+
(movq (int 0) ,new-lhs))]
322323
;; If has to be overridden because it needs to propagate
323324
[`(if ,cnd ,thn-ss ,els-ss)
324325
(let ([cnd ((select-instructions) cnd)]

0 commit comments

Comments
 (0)