## MLton 20241230

# LambdaFree

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

- `lambda-free.sig`

- `lambda-free.fun`

## 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]