Skip to content

Commit fd76e8a

Browse files
committed
some fixes to R6 passes
1 parent d8b85e2 commit fd76e8a

File tree

2 files changed

+35
-20
lines changed

2 files changed

+35
-20
lines changed

dynamic-typing.rkt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
(i . < . (length ts)))
3333
(error 'type-check "invalid index ~a" i))
3434
(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))]
3637
[`(Vectorof ,t)
3738
(unless (exact-nonnegative-integer? i)
3839
(error 'type-check "invalid index ~a" i))
@@ -401,6 +402,7 @@
401402
(define R6-typechecker
402403
(let ([compiler (new compile-R6)])
403404
(send compiler type-check '())))
405+
404406
(define R6-passes
405407
(let ([compiler (new compile-R6)]
406408
[interp (new interp-R6)])
@@ -410,9 +412,9 @@
410412
("uniquify" ,(send compiler uniquify '())
411413
,(send interp interp-scheme '()))
412414
("reveal-functions" ,(send compiler reveal-functions '())
413-
,(send interp interp-scheme '()))
415+
,(send interp interp-F '()))
414416
("convert-to-closures" ,(send compiler convert-to-closures)
415-
,(send interp interp-scheme '()))
417+
,(send interp interp-F '()))
416418
("flatten" ,(send compiler flatten #f)
417419
,(send interp interp-C '()))
418420
("expose allocation"
@@ -448,9 +450,9 @@
448450
,(interp-r7 '()))
449451
("reveal-functions" ,(send compiler reveal-functions '())
450452
,(interp-r7 '()))
451-
("translate" ,(send compiler cast-insert)
453+
("cast-insert" ,(send compiler cast-insert)
452454
,(send interp interp-scheme '()))
453-
("inserthastype" ,(send compiler type-check '())
455+
("type-check" ,(send compiler type-check '())
454456
,(send interp interp-scheme '()))
455457
("convert-to-closures" ,(send compiler convert-to-closures)
456458
,(send interp interp-scheme '()))

interp.rkt

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@
4747
[(? symbol?)
4848
(lookup ast env)]
4949
[(? integer?) ast]
50-
[`(let ([,x ,e]) ,body)
51-
(let ([v ((interp-scheme env) e)])
52-
((interp-scheme (cons (cons x v) env)) body))]
50+
[`(let ([,x ,(app (interp-scheme env) v)]) ,body)
51+
((interp-scheme (cons (cons x v) env)) body)]
5352
[`(program ,e) ((interp-scheme '()) e)]
54-
[`(,op ,args ...) #:when (set-member? (primitives) op)
55-
(apply (interp-op op) (map (interp-scheme env) args))]
53+
[`(,op ,(app (interp-scheme env) args) ...)
54+
#:when (set-member? (primitives) op)
55+
(apply (interp-op op) args)]
5656
[else
5757
(error (format "no match in interp-scheme S0 for ~a" ast))]
5858
)))
@@ -979,23 +979,36 @@
979979
(define/override (interp-scheme env)
980980
(lambda (ast)
981981
(verbose "R6/interp-scheme" ast)
982+
(define recur (interp-scheme env))
982983
(match ast
983-
[`(inject ,e ,t)
984-
`(tagged ,((interp-scheme env) e) ,t)]
985-
[`(project ,e ,t2)
986-
(define v ((interp-scheme env) e))
984+
[`(inject ,(app recur v) ,t)
985+
`(tagged ,v ,t)]
986+
[`(project ,(app recur v) ,t2)
987987
(match v
988988
[`(tagged ,v1 ,t1)
989-
(cond [(tyeq? t1 t2)
990-
v1]
991-
[else
992-
(error "in project, type mismatch" t1 t2)])]
993-
[else
994-
(error "in project, expected injected value" v)])]
989+
(cond [(tyeq? t1 t2) v1]
990+
[else (error "in project, type mismatch" t1 t2)])]
991+
[else (error "in project, expected injected value" v)])]
995992
[else
996993
((super interp-scheme env) ast)]
997994
)))
998995

996+
(define/override (interp-F env)
997+
(lambda (ast)
998+
(verbose "R6/interp-F" ast)
999+
(define recur (interp-F env))
1000+
(match ast
1001+
[`(inject ,(app recur v) ,t)
1002+
`(tagged ,v ,t)]
1003+
[`(project ,(app recur v) ,t2)
1004+
(match v
1005+
[`(tagged ,v1 ,t1)
1006+
(cond [(tyeq? t1 t2) v1]
1007+
[else (error "in project, type mismatch" t1 t2)])]
1008+
[else (error "in project, expected injected value" v)])]
1009+
[else ((super interp-F env) ast)]
1010+
)))
1011+
9991012
(define/override (interp-C env)
10001013
(lambda (ast)
10011014
(verbose "R6/interp-C" ast)

0 commit comments

Comments
 (0)