projects
/
scheme.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3ce93ef
)
Fix up codegen-add for vars
author
Luke Lau
<luke_lau@icloud.com>
Wed, 17 Jul 2019 22:23:16 +0000
(23:23 +0100)
committer
Luke Lau
<luke_lau@icloud.com>
Wed, 17 Jul 2019 22:23:16 +0000
(23:23 +0100)
compiler.scm
patch
|
blob
|
history
diff --git
a/compiler.scm
b/compiler.scm
index d79a37a26f77babdd28040991efa8003ca25ecc1..76fa6717c46d9d1ae69a4dd28d9fcbb135739d05 100644
(file)
--- a/
compiler.scm
+++ b/
compiler.scm
@@
-6,12
+6,17
@@
(apply printf s)
(display "\n")))
(apply printf s)
(display "\n")))
-(define (codegen-add xs)
+(define (codegen-add xs
si env
)
(define (go ys)
(if (null? ys)
(emit "movq %rbx, %rax")
(begin
(define (go ys)
(if (null? ys)
(emit "movq %rbx, %rax")
(begin
- (emit "addq $~a, %rbx" (car ys))
+ (let ((y (car ys)))
+ (if (integer? y)
+ (emit "addq $~a, %rbx" y)
+ (begin
+ (codegen-expr y si env)
+ (emit "addq %rax, %rbx"))))
(go (cdr ys)))))
(begin
(emit "movq $0, %rbx")
(go (cdr ys)))))
(begin
(emit "movq $0, %rbx")
@@
-43,7
+48,7
@@
(define (codegen-expr e si env)
(cond ((and (list? e) (eq? (car e) '+))
(define (codegen-expr e si env)
(cond ((and (list? e) (eq? (car e) '+))
- (codegen-add (cdr e)))
+ (codegen-add (cdr e)
si env
))
((let? e) (codegen-let
(let-bindings e)
(let-body e)
((let? e) (codegen-let
(let-bindings e)
(let-body e)