Skip to content

Commit 66e60aa

Browse files
committed
New Loot!
1 parent 2461dac commit 66e60aa

File tree

6 files changed

+255
-188
lines changed

6 files changed

+255
-188
lines changed

langs/a86/ast.rkt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@
5656

5757
(define check:offset
5858
(λ (r i n)
59-
(unless (register? r)
60-
(error n "expects register as first argument; given ~v" r))
59+
(unless (or (register? r) (label? r))
60+
(error n "expects register or label as first argument; given ~v" r))
6161
(unless (exact-integer? i)
6262
(error n "expects exact integer as second argument; given ~v" i))
6363
(values r i)))
@@ -72,8 +72,8 @@
7272
(λ (dst x n)
7373
(unless (or (register? dst) (offset? dst))
7474
(error n "expects register or offset; given ~v" dst))
75-
(unless (label? x)
76-
(error n "expects label; given ~v" x))
75+
(unless (or (label? x) (offset? x))
76+
(error n "expects label or offset; given ~v" x))
7777
(values dst x)))
7878

7979
(define check:none

langs/a86/printer.rkt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
[(? reg?) (reg->string a)]
1717
[(? integer?) (number->string a)]
1818
[(Offset (? reg? r) i)
19-
(string-append "[" (reg->string r) " + " (number->string i) "]")]))
19+
(string-append "[" (reg->string r) " + " (number->string i) "]")]
20+
[(Offset (? label? l) i)
21+
(string-append "[" (symbol->string l) " + " (number->string i) "]")]))
2022

2123
;; Any -> Boolean
2224
(define (reg? x)
@@ -123,6 +125,10 @@
123125
[(Pop r)
124126
(string-append tab "pop "
125127
(reg->string r))]
128+
[(Lea d (? offset? x))
129+
(string-append tab "lea "
130+
(arg->string d) ", "
131+
(arg->string x))]
126132
[(Lea d x)
127133
(string-append tab "lea "
128134
(arg->string d) ", [rel "

langs/loot-new/ast.rkt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
;; Prog -> Prog
151151
(define (desugar e+)
152152
(match e+
153+
[(Prog '() e) (Prog '() (desugar e))]
153154
[(Prog ds e) (let ((defs (map desugar ds)))
154155
(Prog '() (LetRec defs e)))]
155156
[(Defn f xs e) (list f (Lam f xs e))]

0 commit comments

Comments
 (0)