Skip to content

Commit 841f982

Browse files
committed
Update Ziggy for better output.
1 parent 6e78f73 commit 841f982

2 files changed

Lines changed: 77 additions & 54 deletions

File tree

ziggy/src/compile.rkt

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,15 @@
2828
{:> E0 F} (Sub rsp 8)
2929
{:> A F} (compile-e e)
3030
{:> E0 F} (Add rsp 8)
31-
{:> F} (Push r15) {:> F} ; save callee-saved register
31+
{:> F} ;; save callee-saved register
32+
{:> F} (Push r15)
3233
{:> H0} (Push rbx)
33-
{:> H0} (Mov rbx rdi) {:> H0} ; recv heap pointer
34-
{:> F} (compile-e e '())
34+
{:> H0} ;; recv heap pointer
35+
{:> H0} (Mov rbx rdi)
36+
{:> F} (compile-e e '())
3537
{:> H0} (Pop rbx)
36-
{:> F} (Pop r15) {:> F} ; restore callee-save register
38+
{:> F} ;; restore callee-save register
39+
{:> F} (Pop r15)
3740
(Ret)
3841
{:> E1} ;; Error handler
3942
{:> E1} (Label 'err)
@@ -61,7 +64,7 @@
6164
{:> L}
6265
(compile-e e (reverse (define-ids ds)) #f)
6366
{:> L}
64-
(Add rsp (* 8 (length ds))) {:> L} ;; pop function definitions
67+
(Add rsp (* 8 (length ds))) {:> L} ;; pop function definitions
6568
(Pop r15) ; restore callee-save register
6669
(Pop rbx)
6770
(Ret)
@@ -122,7 +125,7 @@
122125
(match l
123126
[(Lam f xs e)
124127
(let ((env (append (reverse fvs) (reverse xs) (list #f))))
125-
(seq (Label (symbol->label f))
128+
(seq (Label (symbol->label f))
126129
(Mov rax (Offset rsp (* 8 (length xs))))
127130
(Xor rax type-proc)
128131
(copy-env-to-stack fvs 8)
@@ -151,17 +154,17 @@
151154
{:> A D0}
152155
[(Lit i) (seq (Mov rax i))]
153156
{:> D0}
154-
[(Lit d) (compile-value d)]
157+
[(Lit d) (compile-value d)]
155158
{:> E0}
156-
[(Eof) (compile-value eof)]
159+
[(Eof) (compile-value eof)]
157160
{:> H0}
158-
[(Empty) (compile-value '())]
161+
[(Empty) (compile-value '())]
159162
{:> F}
160-
[(Var x) (compile-variable x c)]
163+
[(Var x) (compile-variable x c)]
161164
{:> E0}
162-
[(Prim0 p) (compile-prim0 p)]
165+
[(Prim0 p) (compile-prim0 p)]
163166
{:> B}
164-
[(Prim1 p e) (compile-prim1 p e {:> F} c)]
167+
[(Prim1 p e) (compile-prim1 p e {:> F} c)]
165168
{:> F}
166169
[(Prim2 p e1 e2) (compile-prim2 p e1 e2 c)]
167170
{:> H1}
@@ -186,7 +189,7 @@
186189
(compile-app e es c t?)]
187190
{:> L}
188191
[(Lam f xs e)
189-
(compile-lam f xs e c)]
192+
(compile-lam f xs e c)]
190193
{:> K}
191194
[(Match e ps es) (compile-match e ps es c t?)]))
192195

@@ -235,10 +238,20 @@
235238
(compile-op0 p))
236239

237240
{:> B F} ;; Op1 Expr -> Asm
238-
{:> F} ;; Op1 Expr CEnv -> Asm
239-
{:> B}
240-
(define (compile-prim1 p e {:> F} c)
241-
(seq (compile-e e {:> F} c {:> J} #f)
241+
{:> B F}
242+
(define (compile-prim1 p e)
243+
(seq (compile-e e)
244+
(compile-op1 p)))
245+
246+
{:> F J} ;; Op1 Expr CEnv -> Asm
247+
{:> F J}
248+
(define (compile-prim1 p e c)
249+
(seq (compile-e e c)
250+
(compile-op1 p)))
251+
252+
{:> J}
253+
(define (compile-prim1 p e c)
254+
(seq (compile-e e c #f)
242255
(compile-op1 p)))
243256

244257
{:> F} ;; Op2 Expr Expr CEnv -> Asm
@@ -259,7 +272,6 @@
259272
(compile-e e3 (cons #f (cons #f c)) {:> J} #f)
260273
(compile-op3 p)))
261274

262-
263275
{:> C D0} ;; Expr Expr Expr -> Asm
264276
{:> C D0}
265277
(define (compile-ifzero e1 e2 e3)
@@ -377,7 +389,7 @@
377389
(i (* 8 (length es))))
378390
(seq (Lea rax r)
379391
(Push rax)
380-
(compile-es (cons e es) (cons #f c))
392+
(compile-es (cons e es) (cons #f c))
381393
(Mov rax (Offset rsp i))
382394
(assert-proc rax)
383395
(Xor rax type-proc)
@@ -402,7 +414,7 @@
402414
[(cons (Defn f xs e) ds)
403415
(let ((fvs (fv (Lam f xs e))))
404416
(seq (Lea rax (symbol->label f))
405-
(Mov (Offset rbx off) rax)
417+
(Mov (Offset rbx off) rax)
406418
(Mov rax rbx)
407419
(Add rax off)
408420
(Or rax type-proc)
@@ -431,13 +443,13 @@
431443

432444
{:> L} ;; Id [Listof Id] Expr CEnv -> Asm
433445
{:> L}
434-
(define (compile-lam f xs e c)
446+
(define (compile-lam f xs e c)
435447
(let ((fvs (fv (Lam f xs e))))
436448
(seq (Lea rax (symbol->label f))
437449
(Mov (Offset rbx 0) rax)
438450
(free-vars-to-heap fvs c 8)
439451
(Mov rax rbx) ; return value
440-
(Or rax type-proc)
452+
(Or rax type-proc)
441453
(Add rbx (* 8 (add1 (length fvs)))))))
442454

443455
{:> L} ;; [Listof Id] CEnv Int -> Asm

ziggy/src/interp.rkt

Lines changed: 43 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -28,38 +28,49 @@
2828
(define (interp {:> A I} e {:> I} p)
2929
{:> A F}
3030
(match e
31-
{:> A D0} [(Lit i) i]
32-
{:> D0} [(Lit d) d]
33-
{:> E0} [(Eof) eof]
34-
{:> E0} [(Prim0 p)
35-
(interp-prim0 p)]
36-
{:> B E1} [(Prim1 p e)
37-
(interp-prim1 p (interp e))]
38-
{:> E1} [(Prim1 p e)
39-
(match (interp e)
40-
['err 'err]
41-
[v (interp-prim1 p v)])]
42-
{:> C D0} [(IfZero e1 e2 e3)
43-
(if (zero? (interp e1))
44-
(interp e2)
45-
(interp e3))]
46-
{:> D0 E1} [(If e1 e2 e3)
47-
(if (interp e1)
48-
(interp e2)
49-
(interp e3))]
50-
{:> E1} [(If e1 e2 e3)
51-
(match (interp e1)
52-
['err 'err]
53-
[v (if v
54-
(interp e2)
55-
(interp e3))])]
56-
{:> E0 E1} [(Begin e1 e2)
57-
(begin (interp e1)
58-
(interp e2))]
59-
{:> E1} [(Begin e1 e2)
60-
(match (interp e1)
61-
['err 'err]
62-
[v (interp e2)])])
31+
{:> A D0}
32+
[(Lit i) i]
33+
{:> D0}
34+
[(Lit d) d]
35+
{:> E0}
36+
[(Eof) eof]
37+
{:> E0}
38+
[(Prim0 p)
39+
(interp-prim0 p)]
40+
{:> B E1}
41+
[(Prim1 p e)
42+
(interp-prim1 p (interp e))]
43+
{:> E1}
44+
[(Prim1 p e)
45+
(match (interp e)
46+
['err 'err]
47+
[v (interp-prim1 p v)])]
48+
{:> C D0}
49+
[(IfZero e1 e2 e3)
50+
(if (zero? (interp e1))
51+
(interp e2)
52+
(interp e3))]
53+
{:> D0 E1}
54+
[(If e1 e2 e3)
55+
(if (interp e1)
56+
(interp e2)
57+
(interp e3))]
58+
{:> E1}
59+
[(If e1 e2 e3)
60+
(match (interp e1)
61+
['err 'err]
62+
[v (if v
63+
(interp e2)
64+
(interp e3))])]
65+
{:> E0 E1}
66+
[(Begin e1 e2)
67+
(begin (interp e1)
68+
(interp e2))]
69+
{:> E1}
70+
[(Begin e1 e2)
71+
(match (interp e1)
72+
['err 'err]
73+
[v (interp e2)])])
6374
{:> F I}
6475
(interp-env e '())
6576
{:> I}

0 commit comments

Comments
 (0)