LambdaFree is an analysis pass for the SXML IntermediateLanguage, invoked from ClosureConvert.
Description
This pass descends the entire SXML program and attaches a property
to each Lambda
PrimExp.t
in the program. Then, you can use
lambdaFree
and lambdaRec
to get free variables of that Lambda
.
Implementation
Details and Notes
For Lambda
-s bound in a Fun
dec, lambdaFree
gives the union of
the frees of the entire group of mutually recursive functions. Hence,
lambdaFree
for every Lambda
in a single Fun
dec is the same.
Furthermore, for a Lambda
bound in a Fun
dec, lambdaRec
gives
the list of other functions bound in the same dec defining that
Lambda
.
For example:
val rec f = fn x => ... y ... g ... f ... and g = fn z => ... f ... w ...
lambdaFree(fn x =>) = [y, w] lambdaFree(fn z =>) = [y, w] lambdaRec(fn x =>) = [g, f] lambdaRec(fn z =>) = [f]