Skip to content

Commit 27a1efe

Browse files
committed
Old changes in ziggy.
1 parent 06574e5 commit 27a1efe

13 files changed

Lines changed: 114 additions & 81 deletions

ziggy/src/ast.rkt

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#lang crook
2-
{:= A B C D0 D1 E0 E1 F H0 H1 I J K}
3-
(provide {:> A} Lit {:> E0} Prim0 {:> B} Prim1 {:> F} Prim2 {:> H1} Prim3 {:> C D0} IfZero {:> D0} If {:> E0} Eof {:> E0} Begin
2+
{:= A B C D0 D0.A D1 E0 E1 F H0 H1 I J K}
3+
(provide {:> A} Lit {:> E0} Prim0 {:> B} Prim1 {:> F} Prim2 {:> H1} Prim3 {:> C C} IfZero {:> D0} If {:> E0} Eof {:> E0} Begin
44
{:> F} Let {:> F} Var {:> H0} Empty {:> I} Prog {:> I} Defn {:> I} App
55
{:> K} Match {:> K} Box {:> K} Cons {:> K} Conj)
66
;;
@@ -11,21 +11,30 @@
1111
{:> I} ;; type Defn = (Defn Id (Listof Id) Expr)
1212
{:> I} (struct Defn (f xs e) #:prefab)
1313

14-
{:> A D0} ;; type Expr = (Lit Integer)
14+
{:> A C} ;; type Expr = (Lit Integer)
1515
{:> D0} ;; type Expr = (Lit Datum)
1616
{:> E0} ;; | (Eof)
1717
{:> H0} ;; | (Empty)
1818
{:> E0} ;; | (Prim0 Op0)
1919
{:> B} ;; | (Prim1 Op1 Expr)
2020
{:> F} ;; | (Prim2 Op2 Expr Expr)
2121
{:> H1} ;; | (Prim3 Op3 Expr Expr Expr)
22-
{:> C D0} ;; | (IfZero Expr Expr Expr)
22+
{:> C C} ;; | (IfZero Expr Expr Expr)
2323
{:> D0} ;; | (If Expr Expr Expr)
24+
{:> D0.A D0.A}
25+
;; | (Cond [Listof CondClause] Expr)
26+
{:> D0.A D0.A}
27+
;; | (Case Expr [Listof CaseClause] Expr)
2428
{:> F} ;; | (Let Id Expr Expr)
2529
{:> F} ;; | (Var Id)
2630
{:> I} ;; | (App Id (Listof Expr))
2731
{:> K} ;; | (Match Expr (Listof Pat) (Listof Expr))
2832

33+
{:> D0.A D0.A}
34+
;; type CondClause = (Clause Expr Expr)
35+
{:> D0.A D0.A}
36+
;; type CaseClause = (Clause [Listof Datum] Expr)
37+
2938
{:> F} ;; type Id = Symbol
3039
{:> D0} ;; type Datum = Integer
3140
{:> D0} ;; | Boolean
@@ -34,6 +43,8 @@
3443
{:> E0} ;; type Op0 = 'read-byte | 'peek-byte | 'void
3544
{:> B} ;; type Op1 = 'add1 | 'sub1
3645
{:> D0} ;; | 'zero?
46+
{:> D0.A D0.A}
47+
;; | 'abs | '- | 'not
3748
{:> D1} ;; | 'char? | 'integer->char | 'char->integer
3849
{:> E0} ;; | 'write-byte | 'eof-object?
3950
{:> H0} ;; | 'box | 'car | 'cdr | 'unbox
@@ -53,13 +64,13 @@
5364

5465
{:> E0} (struct Eof () #:prefab)
5566
{:> H0} (struct Empty () #:prefab)
56-
{:> A D0} (struct Lit (i) #:prefab)
67+
{:> A C} (struct Lit (i) #:prefab)
5768
{:> D0} (struct Lit (d) #:prefab)
5869
{:> E0} (struct Prim0 (p) #:prefab)
5970
{:> B} (struct Prim1 (p e) #:prefab)
6071
{:> F} (struct Prim2 (p e1 e2) #:prefab)
6172
{:> H1} (struct Prim3 (p e1 e2 e3) #:prefab)
62-
{:> C D0} (struct IfZero (e1 e2 e3) #:prefab)
73+
{:> C C} (struct IfZero (e1 e2 e3) #:prefab)
6374
{:> D0} (struct If (e1 e2 e3) #:prefab)
6475
{:> E0} (struct Begin (e1 e2) #:prefab)
6576
{:> F} (struct Let (x e1 e2) #:prefab)

ziggy/src/compile-ops.rkt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#lang crook
2-
{:= B C D0 D1 E0 E1 F H0 H1 I J K}
2+
{:= B C D0 D0.A D1 E0 E1 F H0 H1 I J K}
33
(provide {:> E0} compile-op0 compile-op1 {:> F} compile-op2 {:> H1} compile-op3 {:> F} pad-stack)
44
(require "ast.rkt")
55
{:> D0} (require "types.rkt")
@@ -27,18 +27,18 @@
2727
;; Op1 -> Asm
2828
(define (compile-op1 p)
2929
(match p
30-
{:> B D0} ['add1 (Add rax 1)]
31-
{:> B D0} ['sub1 (Sub rax 1)]
32-
{:> D0 E1} ['add1 (Add rax (value->bits 1))]
30+
{:> B C} ['add1 (Add rax 1)]
31+
{:> B C} ['sub1 (Sub rax 1)]
32+
{:> D0 E0} ['add1 (Add rax (value->bits 1))]
3333
{:> E1} ['add1
3434
(seq (assert-integer rax)
3535
(Add rax (value->bits 1)))]
36-
{:> D0 E1} ['sub1 (Sub rax (value->bits 1))]
36+
{:> D0 E0} ['sub1 (Sub rax (value->bits 1))]
3737
{:> E1} ['sub1
3838
(seq (assert-integer rax)
3939
(Sub rax (value->bits 1)))]
4040
{:> D0} ['zero?
41-
{:> D0 D1}
41+
{:> D0 D0.A}
4242
(seq (Cmp rax 0)
4343
(Mov rax (value->bits #f))
4444
(Mov r9 (value->bits #t))

ziggy/src/compile-stdin.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#lang crook
2-
{:= A B C D0 D1 E0 E1 F H0 H1 I J K}
2+
{:= A B C D0 D0.A D1 E0 E1 F H0 H1 I J K}
33
(provide main)
44
(require "parse.rkt")
55
(require "compile.rkt")

ziggy/src/compile.rkt

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#lang crook
2-
{:= A B C D0 D1 E0 E1 F H0 H1 I J K}
2+
{:= A B C D0 D0.A D1 E0 E1 F H0 H1 I J K}
33
(provide (all-defined-out))
44
(require "ast.rkt")
55
{:> B} (require "compile-ops.rkt")
@@ -13,18 +13,18 @@
1313
{:> J} (define r8 'r8) {:> J} ; scratch
1414
{:> F} (define r15 'r15) {:> F} ; stack pad (non-volatile)
1515

16-
{:> A I} ;; Expr -> Asm
17-
{:> A I}
16+
{:> A H0} ;; Expr -> Asm
17+
{:> A H0}
1818
(define (compile e)
1919
(prog (Global 'entry)
2020
{:> E0} (Extern 'peek_byte)
2121
{:> E0} (Extern 'read_byte)
2222
{:> E0} (Extern 'write_byte)
2323
{:> E1} (Extern 'raise_error)
2424
(Label 'entry)
25-
{:> E0 F} (Sub rsp 8)
26-
{:> A F} (compile-e e)
27-
{:> E0 F} (Add rsp 8)
25+
{:> E0 H0} (Sub rsp 8)
26+
{:> A H0} (compile-e e)
27+
{:> E0 H0} (Add rsp 8)
2828
{:> F} (Push r15) {:> F} ; save callee-saved register
2929
{:> H0} (Push rbx)
3030
{:> H0} (Mov rbx rdi) {:> H0} ; recv heap pointer
@@ -86,7 +86,7 @@
8686
{:> J} ;; Expr CEnv Boolean -> Asm
8787
(define (compile-e e {:> F} c {:> J} t?)
8888
(match e
89-
{:> A D0}
89+
{:> A C}
9090
[(Lit i) (seq (Mov rax i))]
9191
{:> D0}
9292
[(Lit d) (compile-value d)]
@@ -104,9 +104,9 @@
104104
[(Prim2 p e1 e2) (compile-prim2 p e1 e2 c)]
105105
{:> H1}
106106
[(Prim3 p e1 e2 e3) (compile-prim3 p e1 e2 e3 c)]
107-
{:> C D0}
107+
{:> C C}
108108
[(IfZero e1 e2 e3)
109-
(compile-ifzero e1 e2 e3 {:> J} t?)]
109+
(compile-ifzero e1 e2 e3)]
110110
{:> D0}
111111
[(If e1 e2 e3)
112112
(compile-if e1 e2 e3 {:> F} c {:> J} t?)]
@@ -125,7 +125,7 @@
125125
{:> D0} ;; Value -> Asm
126126
{:> D0}
127127
(define (compile-value v)
128-
{:> D0 H1}
128+
{:> D0 H0}
129129
(seq (Mov rax (value->bits v)))
130130
{:> H1}
131131
(cond [(string? v) (compile-string v)]
@@ -166,8 +166,8 @@
166166
(define (compile-prim0 p)
167167
(compile-op0 p))
168168

169-
{:> B F} ;; Op1 Expr -> Asm
170-
{:> F} ;; Op1 Expr CEnv -> Asm
169+
{:> B H0} ;; Op1 Expr -> Asm
170+
{:> F} ;; Op1 Expr CEnv -> Asm
171171
{:> B}
172172
(define (compile-prim1 p e {:> F} c)
173173
(seq (compile-e e {:> F} c {:> J} #f)
@@ -192,8 +192,8 @@
192192
(compile-op3 p)))
193193

194194

195-
{:> C D0} ;; Expr Expr Expr -> Asm
196-
{:> C D0}
195+
{:> C C} ;; Expr Expr Expr -> Asm
196+
{:> C C}
197197
(define (compile-ifzero e1 e2 e3)
198198
(let ((l1 (gensym 'ifz))
199199
(l2 (gensym 'ifz)))
@@ -206,9 +206,9 @@
206206
(compile-e e3)
207207
(Label l2))))
208208

209-
{:> D0 F} ;; Expr Expr Expr -> Asm
210-
{:> F J} ;; Expr Expr Expr CEnv -> Asm
211-
{:> J} ;; Expr Expr Expr CEnv Boolean -> Asm
209+
{:> D0 H0} ;; Expr Expr Expr -> Asm
210+
{:> F I} ;; Expr Expr Expr CEnv -> Asm
211+
{:> J} ;; Expr Expr Expr CEnv Boolean -> Asm
212212
{:> D0}
213213
(define (compile-if e1 e2 e3 {:> F} c {:> J} t?)
214214
(let ((l1 (gensym 'if))
@@ -222,15 +222,15 @@
222222
(compile-e e3 {:> F} c {:> J} t?)
223223
(Label l2))))
224224

225-
{:> E0 F} ;; Expr Expr -> Asm
226-
{:> F J} ;; Expr Expr CEnv -> Asm
227-
{:> J} ;; Expr Expr CEnv Boolean -> Asm
225+
{:> E0 H0} ;; Expr Expr -> Asm
226+
{:> F I} ;; Expr Expr CEnv -> Asm
227+
{:> J} ;; Expr Expr CEnv Boolean -> Asm
228228
{:> E0}
229229
(define (compile-begin e1 e2 {:> F} c {:> J} t?)
230230
(seq (compile-e e1 {:> F} c {:> J} #f)
231231
(compile-e e2 {:> F} c {:> J} t?)))
232232

233-
{:> F J} ;; Id Expr Expr CEnv -> Asm
233+
{:> F I} ;; Id Expr Expr CEnv -> Asm
234234
{:> J} ;; Id Expr Expr CEnv -> Asm
235235
{:> F}
236236
(define (compile-let x e1 e2 c {:> J} t?)
@@ -267,7 +267,7 @@
267267
{:> I} ;; Id [Listof Expr] CEnv -> Asm
268268
{:> I} ;; The return address is placed above the arguments, so callee pops
269269
{:> I} ;; arguments and return address is next frame
270-
{:> I J}
270+
{:> I I}
271271
(define (compile-app f es c)
272272
(let ((r (gensym 'ret)))
273273
(seq (Lea rax r)

ziggy/src/interp-prim.rkt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#lang crook
2-
{:= B C D0 D1 E0 E1 F H0 H1 I J K}
2+
{:= B C D0 D0.A D1 E0 E1 F H0 H1 I J K}
33
(provide {:> E0} interp-prim0 interp-prim1 {:> F} interp-prim2 {:> H1} interp-prim3)
44

55
{:> E0} ;; Op0 -> Value
@@ -10,15 +10,15 @@
1010
['peek-byte (peek-byte)]
1111
['void (void)]))
1212

13-
{:> B D0} ;; Op1 Integer -> Integer
14-
{:> B D0}
13+
{:> B C} ;; Op1 Integer -> Integer
14+
{:> B C}
1515
(define (interp-prim1 op i)
1616
(match op
1717
['add1 (add1 i)]
1818
['sub1 (sub1 i)]))
1919

20-
{:> D0 E1} ;; Op1 Value -> Value
21-
{:> D0 E1}
20+
{:> D0 E0} ;; Op1 Value -> Value
21+
{:> D0 E0}
2222
(define (interp-prim1 op v)
2323
(match op
2424
['add1 (add1 v)]

ziggy/src/interp-stdin.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#lang crook
2-
{:= A B C D0 D1 E0 E1 F H0 H1 I J K}
2+
{:= A B C D0 D0.A D1 E0 E1 F H0 H1 I J K}
33
(provide main)
44
(require "parse.rkt")
55
(require "interp.rkt")

ziggy/src/interp.rkt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#lang crook
2-
{:= A B C D0 D1 E0 E1 F H0 H1 I J K}
2+
{:= A B C D0 D0.A D1 E0 E1 F H0 H1 I J K}
33
(provide interp)
44
{:> F} (provide interp-env)
55
{:> K} (provide interp-match-pat)
@@ -20,35 +20,35 @@
2020

2121
{:> F} ;; type Env = (Listof (List Id Value))
2222

23-
{:> A D0} ;; Expr -> Integer
24-
{:> D0 E1} ;; Expr -> Value
25-
{:> E1 I} ;; Expr -> Answer
23+
{:> A C} ;; Expr -> Integer
24+
{:> D0 E0} ;; Expr -> Value
25+
{:> E1 H1} ;; Expr -> Answer
2626
{:> I} ;; Prog -> Answer
27-
(define (interp {:> A I} e {:> I} p)
28-
{:> F I}
27+
(define (interp {:> A H1} e {:> I} p)
28+
{:> F H1}
2929
(interp-env e '())
3030
{:> I}
3131
(match p
3232
[(Prog ds e)
3333
(interp-env e '() ds)])
34-
{:> A F}
34+
{:> A H1}
3535
(match e
36-
{:> A D0} [(Lit i) i]
36+
{:> A C} [(Lit i) i]
3737
{:> D0} [(Lit d) d]
3838
{:> E0} [(Eof) eof]
3939
{:> E0} [(Prim0 p)
4040
(interp-prim0 p)]
41-
{:> B E1} [(Prim1 p e)
41+
{:> B E0} [(Prim1 p e)
4242
(interp-prim1 p (interp e))]
4343
{:> E1} [(Prim1 p e)
4444
(match (interp e)
4545
['err 'err]
4646
[v (interp-prim1 p v)])]
47-
{:> C D0} [(IfZero e1 e2 e3)
47+
{:> C C} [(IfZero e1 e2 e3)
4848
(if (zero? (interp e1))
4949
(interp e2)
5050
(interp e3))]
51-
{:> D0 E1} [(If e1 e2 e3)
51+
{:> D0 E0} [(If e1 e2 e3)
5252
(if (interp e1)
5353
(interp e2)
5454
(interp e3))]
@@ -58,7 +58,7 @@
5858
[v (if v
5959
(interp e2)
6060
(interp e3))])]
61-
{:> E0 E1} [(Begin e1 e2)
61+
{:> E0 E0} [(Begin e1 e2)
6262
(begin (interp e1)
6363
(interp e2))]
6464
{:> E1} [(Begin e1 e2)

ziggy/src/parse.rkt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
#lang crook
2-
{:= A B C D0 D1 E0 E1 F H0 H1 I J K}
2+
{:= A B C D0 D0.A D1 E0 E1 F H0 H1 I J K}
33
(provide parse {:> I} parse-e {:> I} parse-define)
44
(require "ast.rkt")
55

6-
{:> A I} ;; S-Expr -> Expr
7-
{:> A I}
6+
{:> A H1} ;; S-Expr -> Expr
7+
{:> A H1}
88
(define (parse s)
99
(match s
1010
{:> E0}
1111
['eof (Eof)]
12-
{:> A D0}
12+
{:> A C}
1313
[(? exact-integer?) (Lit s)]
1414
{:> D0}
1515
[(? datum?) (Lit s)]
@@ -27,7 +27,7 @@
2727
[(list (? op3? o) e1 e2 e3) (Prim3 o (parse e1) (parse e2) (parse e3))]
2828
{:> E0}
2929
[(list 'begin e1 e2) (Begin (parse e1) (parse e2))]
30-
{:> C D0}
30+
{:> C C}
3131
[(list 'if (list 'zero? e1) e2 e3)
3232
(IfZero (parse e1) (parse e2) (parse e3))]
3333
{:> D0}

ziggy/src/run.rkt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
#lang crook
2-
{:= A B C D0 D1 E0 E1 F H0 H1 I J K}
2+
{:= A B C D0 D0.A D1 E0 E1 F H0 H1 I J K}
33
(require a86/interp)
44
{:> D0} (require "types.rkt")
55
{:> E0} (require "build-runtime.rkt")
66
(provide run {:> E0} run/io)
77

8-
{:> A D0} ;; Asm -> Integer
9-
{:> D0 E1} ;; Asm -> Value
8+
{:> A C} ;; Asm -> Integer
9+
{:> D0 E0} ;; Asm -> Value
1010
{:> E1} ;; Asm -> Answer
1111
(define (run is)
12-
{:> A D0}
12+
{:> A C}
1313
(asm-interp is)
1414
{:> D0 E1}
1515
(bits->value (asm-interp is))
1616
{:> E0}
1717
(parameterize ((current-objs (list (path->string runtime-path))))
18-
{:> E0 E1}
18+
{:> E0 E0}
1919
(bits->value (asm-interp is))
2020
{:> E1}
2121
(match (asm-interp is)

0 commit comments

Comments
 (0)