projects
/
scheme.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add WIP on passing about closures
[scheme.git]
/
ast.scm
diff --git
a/ast.scm
b/ast.scm
index c81bc2b38ef4a9bbd70590f83d49dddd2b87948b..a0899192e21a1d44b0fe3296e380604133a3f1d2 100644
(file)
--- a/
ast.scm
+++ b/
ast.scm
@@
-7,6
+7,7
@@
('! #t)
('= #t)
('bool->int #t)
('! #t)
('= #t)
('bool->int #t)
+ ('print #t)
(else #f)))
(cond
((list? x)
(else #f)))
(cond
((list? x)
@@
-15,19
+16,21
@@
('let 'let)
('lambda 'lambda)
('closure 'closure) ; only available in codegen
('let 'let)
('lambda 'lambda)
('closure 'closure) ; only available in codegen
+ ('static-string 'static-string) ; only available in codegen
(else 'app)))
((builtin? x) 'builtin)
((symbol? x) 'var)
((integer? x) 'int-literal)
(else 'app)))
((builtin? x) 'builtin)
((symbol? x) 'var)
((integer? x) 'int-literal)
- ((boolean? x) 'bool-literal)))
+ ((boolean? x) 'bool-literal)
+ ((string? x) 'string-literal)))
(define (ast-traverse f x)
(case (ast-type x)
('let `(let ,(map (lambda (x) (list (car x) (f (cadr x))))
(let-bindings x))
(define (ast-traverse f x)
(case (ast-type x)
('let `(let ,(map (lambda (x) (list (car x) (f (cadr x))))
(let-bindings x))
- ,@(map f (let-body
e
))))
+ ,@(map f (let-body
x
))))
('app (map f x))
('app (map f x))
- ('lambda `(lambda ,(lambda-args x) ,(f
lambda-body
)))
+ ('lambda `(lambda ,(lambda-args x) ,(f
(lambda-body x)
)))
('if `(if ,@(map f (cdr x))))
(else x)))
('if `(if ,@(map f (cdr x))))
(else x)))