diff options
Diffstat (limited to 'src/modules/generator/generator.scm')
-rw-r--r-- | src/modules/generator/generator.scm | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/src/modules/generator/generator.scm b/src/modules/generator/generator.scm index 4c08e32..53be252 100644 --- a/src/modules/generator/generator.scm +++ b/src/modules/generator/generator.scm @@ -1,30 +1,22 @@ (define-module (modules generator generator) #:use-module (modules ast syntax-tree) #:use-module (modules ast assembly-tree) - #:export (generate)) + #:export (g-program)) -(define (generate node) - (cond - ((program? node) (g-program node)) - ((function? node) (g-function node)) - ((stmt? node) (g-stmt node)) - ((expr? node) (g-expr node)) - ((id? node) (g-id node)) - (else (error "Unknown AST element")))) (define (g-program p) - (make-program (generate (program-function p)))) + (make-program (g-function (program-function p)))) (define (g-function f) - (make-subroutine (generate (function-id f)) - (generate (function-stmt f)))) + (make-subroutine (g-id (function-id f)) + (g-stmt (function-stmt f)))) (define (g-stmt s) - (generate (stmt-expr s))) + (g-expr (stmt-expr s))) (define (g-expr e) ;; for now, we assume only 'return'! - (list (make-instruction "mov1" "%eax" "$2") + (list (make-instruction "movl" (string-append/shared "$" (number->string (expr-int e))) "%eax") (make-instruction "ret" #f #f))) (define (g-id i) |