次は、最適化処理の中でもっとも効果のあるインライン展開です。これは、小さな関数の呼び出しを、その本体で置き換えてしまう、という変換です。MinCamlでは関数Inline.gにより実装されています。
まず、関数定義let
rec f x1 ... xn =
e in ...があったら、関数fの本体eのサイズを、Inline.sizeによって計算します。もしそのサイズが整数参照Inline.threshold以下だったら、関数名fから仮引数x1,
..., xnおよび本体eへの対応を、写像envに追加します。そして、関数呼び出しf y1
... ynがあったら、さっきの仮引数x1, ..., xnおよび本体eを写像envから引いてきて、本体eの中の仮引数x1,
..., xnを実引数y1,
..., ynで置き換えた式を返します。
ただし、インライン展開した式は関数の本体を複製した式ですから、変数が重複しているかもしれないので、またα変換する必要があります。偶然か必然かわかりませんが、Alpha.gを流用すれば、上述の「仮引数を実引数で置き換える」処理とα変換は同時に実現できてしまいます。Alpha.gの写像envとして空の写像を用いるかわりに、x1,
..., xnをy1,
..., ynに対応させるだけでOKです。