diff options
author | bd <bdunahu@operationnull.com> | 2025-01-12 15:10:23 -0700 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-01-12 15:10:23 -0700 |
commit | 000b28c88bbfd1fde94b5e01ce2766230077e013 (patch) | |
tree | 2da470f7fe73f4d1e6ba3cbf25db9c89aa2ff5eb /src/modules/generator/generator.scm | |
parent | 2bc7c77b7f63b1df0340112db6272dc9a78139c1 (diff) |
Expansion of complex expressions into set of instructions
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))))) |