summaryrefslogtreecommitdiff
path: root/src/modules/generator/generator.scm
blob: 53be252817d26ee97b178ea390aa5506003a2e34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(define-module (modules generator generator)
  #: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))))

(define (g-function f)
  (make-subroutine (g-id (function-id f))
                   (g-stmt (function-stmt f))))

(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 (expr-int e))) "%eax")
        (make-instruction "ret" #f #f)))

(define (g-id i)
  (id-symbol i))