All Implemented Interfaces:
Function<Itree,Itree>, UnaryOperator<Itree>, ItreeVisitor<Itree>

public class LetSymcallInliner extends BaseOptimizer
Inlining optimizer of a let clause on the tail context.

Example program before inlining:

 { do_foo{ ,,, }
   :X = produce_arg
   do_bar{ ,,, }
 }
 

The program above is converted to:

 { do_foo{ ,,, }
   {(:X)
     do_bar{ ,,, }
   }!call![()](produce_arg)
 }
 

This optimizer converts the program roughly to the following.

 { do_foo{ ,,, }
   :X <- (* change to the new local binding here *) produce_arg
   do_bar{ ,,, }
 }