X-Git-Url: https://git.lukelau.me/?p=scheme.git;a=blobdiff_plain;f=compiler.scm;h=76fa6717c46d9d1ae69a4dd28d9fcbb135739d05;hp=d79a37a26f77babdd28040991efa8003ca25ecc1;hb=0c40996d3617183272518960d1b63f2b83c76f05;hpb=3ce93ef63f164f8dc63c89f1a97f46e200c71d02 diff --git a/compiler.scm b/compiler.scm index d79a37a..76fa671 100644 --- a/compiler.scm +++ b/compiler.scm @@ -6,12 +6,17 @@ (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 - (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") @@ -43,7 +48,7 @@ (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)