summaryrefslogtreecommitdiff
path: root/src/modules/generator/generator.scm
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/generator/generator.scm')
-rw-r--r--src/modules/generator/generator.scm24
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)))))