Next: compiler vars, Previous: compiler direct jumps, Up: compiler [Index]
The following bindings are exported by the library (vicare
compiler)
.
Perform code transformations traversing the whole hierarchy in input, which must be a struct instance representing recordised code, and building a new hierarchy of transformed, recordized code; return the new hierarchy.
This module inserts global assignments forms that put the value of
lexical top level bindings in the slot value
of the corresponding
loc gensym; for bindings whose value is a closure object: the value is
also stored in the proc
slot of the loc gensym.
As example, the library:
(library (insert-global-assignments-demo-1) (export a b c d) (import (rnrs)) (define (a) '1) (define (b) '2) (define (c) '3) (define d '4))
is expanded into the core language form:
(library-letrec* ((a.lex a.loc (lambda () '1)) (b.lex b.loc (lambda () '2)) (c.lex c.loc (lambda () '3)) (d.lex d.loc '4)) (quote #!void))
then recordised and transformed into:
(fix ((a.lex_0 (lambda () (constant 1))) (b.lex_0 (lambda () (constant 2))) (c.lex_0 (lambda () (constant 3)))) (seq (funcall (primref $set-symbol-value/proc!) (constant a.loc) a.lex_0) (funcall (primref $init-symbol-value!) (constant b.loc) b.lex_0) (funcall (primref $init-symbol-value!) (constant c.loc) c.lex_0) (bind ((d.lex_0 (constant 4))) (seq (funcall (primref $init-symbol-value!) (constant d.loc) d.lex_0) (constant #!void)))))