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.