blob: 022d961c5ac95f948bcace711d5f67f0f60d10ea (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
(define-module (backend tacky traverse)
#:use-module (backend ast ir)
#:export (func-ir
stmt-ir
))
(define (func-ir name instrs)
(list 'srout-ir name instrs))
(define (stmt-ir val)
(list 'instrs-ir
(cons 'list (append (cdr val)
(list (list 'ret-ir (car val)))))))
(define (expr-ir op val)
(make-instruction op (car val) (cdr val)))
(define (const-ir val)
(cons (imm-ir val) '()))
(define (make-instruction op src instrs)
(let ((dst (make-temporary)))
(cons dst
(append instrs
(list (op src dst))))))
(define make-temporary
(let ((count 100))
(lambda ()
(set! count (1+ count))
(list 'tmp-ir count))))
|