(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")
(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)