tur/codegen
src/scscm/codegen.tur
defn
scscm-ast-value
(scscm-ast-value [node :int])
defn
scscm-cstr-eq?
(scscm-cstr-eq? [a :cstr b :cstr])
transform a scscm symbol name to a valid sclang identifier.
defn
list-nil?
(list-nil? [lst :int])
defn
ast-kind
(ast-kind [node :int])
defn
ast-symbol-name
(ast-symbol-name [node :int])
defn
ast-number-value
(ast-number-value [node :int])
defn
ast-string-value
(ast-string-value [node :int])
defn
ast-list-len
(ast-list-len [node :int])
defn
ast-list-get
(ast-list-get [node :int i :int])
defn
scscm-sym-escape
(scscm-sym-escape [name :cstr])
defn
scscm-is-binary-op?
(scscm-is-binary-op? [name :cstr])
defn
scscm-sclang-op
(scscm-sclang-op [name :cstr])
defn
scscm-concat
(scscm-concat [a :cstr b :cstr])
defn
scscm-brace
(scscm-brace [s :cstr])
defn
scscm-gen-args
(scscm-gen-args [node :int i :int])
defn
scscm-gen-cons-list
(scscm-gen-cons-list [nodes :int])
defn
scscm-gen-params
(scscm-gen-params [node :int i :int])
defn
scscm-gen-stmts
(scscm-gen-stmts [node :int i :int])
defn
scscm-gen-let-bindings
(scscm-gen-let-bindings [bvec :int i :int])
defn
scscm-gen-dot
(scscm-gen-dot [node :int])
defn
scscm-gen-dotdot
(scscm-gen-dotdot [node :int])
defn
scscm-gen-fn
(scscm-gen-fn [node :int])
defn
scscm-gen-defn
(scscm-gen-defn [node :int])
defn
scscm-gen-if
(scscm-gen-if [node :int])
defn
scscm-gen-let
(scscm-gen-let [node :int])
defn
scscm-gen-quote
(scscm-gen-quote [node :int])
defn
scscm-gen-list-sym
(scscm-gen-list-sym [node :int head-name :cstr])
defn
scscm-gen-list
(scscm-gen-list [node :int])
defn
scscm-kw-name
(scscm-kw-name [raw :cstr])
defn
generate
(generate [node :int])
emit sclang text for a single AST node.
Parameters
| node | AST node handle |
Returns
Heap-allocated :cstr of the sclang representation.
Example
(generate my-ast-node) ; => "foo_bar(1, 2)"
Since: SC2
defn
scscm-gen-all-loop
(scscm-gen-all-loop [nodes :int acc :cstr])
defn
generate-all
(generate-all [nodes :int])
emit sclang text for every node in a top-level cons list.
Parameters
| nodes | cons list of AST node handles |
Returns
Heap-allocated :cstr with each form's sclang joined by ";\n".
Example
(generate-all top-level-nodes) ; => "foo(1);\nbar(2)"
Since: SC2