application/octet-stream
•
777 B
•
24 lines
;; Contains functions abstracting over different backends
[defn compile/backend/none [expr] expr]
[defn compile/backend/bytecode [expr]
[-> [bytecompile expr]
assemble*]]
[def *active-backend* :bytecode]
[def backend/tree @[ :bytecode compile/backend/bytecode
:none compile/backend/none]]
[defn backend [expr]
[[tree/ref backend/tree *active-backend*] expr]]
[defn compile/for [backend expr environment]
[def last-backend *active-backend*]
[def ret #nil]
[try [fn [e]
[set! *active-backend* last-backend]
[throw e]]
[set! *active-backend* backend]
[set! ret [compile expr environment]]
[set! *active-backend* last-backend]
[return ret]]]