|
9 | 9 | (define rdi 'rdi) ; arg |
10 | 10 |
|
11 | 11 | ;; type CEnv = [Listof Variable] |
12 | | - |
13 | | -(current-annotation "top-level") |
14 | 12 |
|
15 | 13 | ;; Prog -> Asm |
16 | 14 | (define (compile p) |
|
45 | 43 |
|
46 | 44 | ;; Defn -> Asm |
47 | 45 | (define (compile-define d) |
48 | | - (parameterize ([current-annotation d]) |
49 | 46 | (match d |
50 | 47 | [(Defn f xs e) |
51 | 48 | (seq (Label (symbol->label f)) |
|
55 | 52 |
|
56 | 53 | ;; Expr CEnv -> Asm |
57 | 54 | (define (compile-e e c) |
58 | | - (parameterize ([current-annotation e]) |
59 | | - (match e |
60 | | - [(Int i) (compile-value i)] |
61 | | - [(Bool b) (compile-value b)] |
62 | | - [(Char c) (compile-value c)] |
63 | | - [(Eof) (compile-value eof)] |
64 | | - [(Empty) (compile-value '())] |
65 | | - [(Var x) (compile-variable x c)] |
66 | | - [(Str s) (compile-string s)] |
67 | | - [(Prim0 p) (compile-prim0 p c)] |
68 | | - [(Prim1 p e) (compile-prim1 p e c)] |
69 | | - [(Prim2 p e1 e2) (compile-prim2 p e1 e2 c)] |
70 | | - [(Prim3 p e1 e2 e3) (compile-prim3 p e1 e2 e3 c)] |
71 | | - [(If e1 e2 e3) (compile-if e1 e2 e3 c)] |
72 | | - [(Begin e1 e2) (compile-begin e1 e2 c)] |
73 | | - [(Let x e1 e2) (compile-let x e1 e2 c)] |
74 | | - [(App f es) (compile-app f es c)]))) |
| 55 | + (match e |
| 56 | + [(Int i) (compile-value i)] |
| 57 | + [(Bool b) (compile-value b)] |
| 58 | + [(Char c) (compile-value c)] |
| 59 | + [(Eof) (compile-value eof)] |
| 60 | + [(Empty) (compile-value '())] |
| 61 | + [(Var x) (compile-variable x c)] |
| 62 | + [(Str s) (compile-string s)] |
| 63 | + [(Prim0 p) (compile-prim0 p c)] |
| 64 | + [(Prim1 p e) (compile-prim1 p e c)] |
| 65 | + [(Prim2 p e1 e2) (compile-prim2 p e1 e2 c)] |
| 66 | + [(Prim3 p e1 e2 e3) (compile-prim3 p e1 e2 e3 c)] |
| 67 | + [(If e1 e2 e3) (compile-if e1 e2 e3 c)] |
| 68 | + [(Begin e1 e2) (compile-begin e1 e2 c)] |
| 69 | + [(Let x e1 e2) (compile-let x e1 e2 c)] |
| 70 | + [(App f es) (compile-app f es c)])) |
75 | 71 |
|
76 | 72 | ;; Value -> Asm |
77 | 73 | (define (compile-value v) |
|
0 commit comments