8dac3b68833ca430d27015b8a97263a72c531f37
[scheme.git] / ast.scm
1 (define (ast-type x)
2   (define (builtin? x)
3     (case x
4       ('+ #t)
5       ('- #t)
6       ('* #t)
7       ('! #t)
8       ('= #t)
9       ('bool->int #t)
10       (else #f)))
11   (cond
12    ((list? x)
13     (case (car x)
14       ('if 'if)
15       ('let 'let)
16       ('lambda 'lambda)
17       ('closure 'closure) ; only available in codegen
18       (else 'app)))
19    ((builtin? x) 'builtin)
20    ((symbol? x) 'var)
21    ((integer? x) 'int-literal)
22    ((boolean? x) 'bool-literal)))
23
24 ;; (define (ast-recurse f x)
25 ;;   (cond (
26
27 (define let-bindings cadr)
28 (define let-body cddr)
29
30 (define (lambda? x)
31   (and (list? x) (eq? (car x) 'lambda)))
32
33 ; for use in normalized form
34 (define lambda-arg caadr)
35 ; for use elsewhere
36 (define lambda-args cadr)
37 (define lambda-body caddr)