Lifter
A class that handles argument lifting. Argument lifting is needed in the following scenarios:
- eta expansion
- applications with default arguments
- applications with out-of-order named arguments Lifting generally lifts impure expressions only, except in the case of possible default arguments, where we lift also complex pure expressions, since in that case arguments can be duplicated as arguments to default argument methods.
Value members
Abstract methods
Concrete methods
The corresponding lifter for pass-by-name arguments
The corresponding lifter for pass-by-name arguments
Lift out function prefix and all arguments from application
Lift out function prefix and all arguments from application
pre.f(arg1, ..., argN) becomes
val x0 = pre val x1 = arg1 ... val xN = argN x0.f(x1, ..., xN)
But leave pure expressions alone.
Lift arguments that are not-idempotent into ValDefs in buffer defs
and replace by the idents of so created ValDefs.
Lift arguments that are not-idempotent into ValDefs in buffer defs
and replace by the idents of so created ValDefs.
Lift out common part of lhs tree taking part in an operator assignment such as
Lift out common part of lhs tree taking part in an operator assignment such as
lhs += expr
Lift prefix pre
of an application pre.f(...)
to
Lift prefix pre
of an application pre.f(...)
to
val x0 = pre x0.f(...)
unless pre
is idempotent.