This package contains code that perform inlining. There are two
classes that contain static methods that perform inlining:
- {@link DeepInliner} - inlines sets of arbitrary-length call paths.
Each call path is modeled by a {@link InlineChain} object.
- {@link OneLevelInliner} - inlines call paths of length 1. This
class is used internally by {@link DeepInliner}, but can also be used
independently.
Both classes perform inlining by mutating the caller code from a
caching code factory. A more elegant alternative would have been to
construct an {@link HCodeFactory} that produces the transformed code
on demand. Still, the complications attached to the arbitrary-length
inlining prevented us from such an elegant solution; the current,
simple solution also has the advantage of being easier to debug.
@author Alex Salcianu - salcianu@alum.mit.edu