Next: compiler lifting combinators, Previous: compiler lifting intro, Up: compiler lifting [Index]
When arriving at this compiler pass the input recordised code is such that:
clambda
structs are wrapped into
closure-maker
structs.
closure-maker
structs appear as right–hand side
expressions of bindings defined by fix
structs.
fix
structs are immutable and their
right–hand side expressions are all closure-maker
structs.
bind
structs are immutable and their
right–hand side expressions are of type different from
closure-maker
and clambda
. These bindings are
immutable because the assigned ones have been previously transformed
into immutable references to mutable vector objects.
bind
is a var
struct: such binding defines a
synonym. For example:
(bind ((a ?rhs)) (bind ((b a)) ?body))
the binding b
is immutable, so b
is a synonym of a
;
it is perfectly all right to substitute all the occurrences of the
var
b
in ?body with occurrences of the
var
a
.