diff options
Diffstat (limited to 'src/modules/generator/generator.scm')
-rw-r--r-- | src/modules/generator/generator.scm | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/src/modules/generator/generator.scm b/src/modules/generator/generator.scm index 4a36b92..ed00de5 100644 --- a/src/modules/generator/generator.scm +++ b/src/modules/generator/generator.scm @@ -1,23 +1,19 @@ (define-module (modules generator generator) + #:use-module (srfi srfi-9 gnu) #:use-module (modules ast syntax-tree) #:use-module (modules ast assembly-tree) #:export (g-program)) (define (g-program p) - (make-program (g-function (program-function p)))) + (g-subroutine (program-function p))) -(define (g-function f) - (make-subroutine (g-id (function-id f)) - (g-stmt (function-stmt f)))) +(define (g-subroutine s) + (g-instructions (subroutine-instructions s))) -(define (g-stmt s) - (g-expr (stmt-expr s))) - -(define (g-expr e) - ;; for now, we assume only 'return'! - (list (make-instruction "movl" (string-append/shared "$" (number->string (const-int (expr-type e)))) "%eax") - (make-instruction "ret" #f #f))) - -(define (g-id i) - (id-symbol i)) +(define (g-instructions lst) + (define (g-instruction i) + (set-instruction-destination i "foo")) + (unless (null? lst) + (begin (g-instruction (car lst)) + (g-instructions (cdr lst))))) |