Fix up codegen-add for vars
authorLuke Lau <luke_lau@icloud.com>
Wed, 17 Jul 2019 22:23:16 +0000 (23:23 +0100)
committerLuke Lau <luke_lau@icloud.com>
Wed, 17 Jul 2019 22:23:16 +0000 (23:23 +0100)
compiler.scm

index d79a37a26f77babdd28040991efa8003ca25ecc1..76fa6717c46d9d1ae69a4dd28d9fcbb135739d05 100644 (file)
@@ -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)