Dotty Documentation

0.1.1-bin-SNAPSHOT

object EtaExpansion

[-] Constructors

[-] Members

[+] def etaExpand ( tree: Tree , mt: MethodType , xarity: Int ) ( implicit ctx: Context ) : Tree

Eta-expanding a tree means converting a method reference to a function value.

[+] private def lift ( defs: ListBuffer [ Tree ] , expr: Tree , prefix: TermName ) ( implicit ctx: Context ) : Tree
[+] def liftApp ( defs: ListBuffer [ Tree ] , tree: Tree ) ( implicit ctx: Context ) : Tree

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 idempotent expressions alone.

[+] def liftArg ( defs: ListBuffer [ Tree ] , arg: Tree , prefix: TermName ) ( implicit ctx: Context ) : Tree

Lift a function argument, stripping any NamedArg wrapper

[+] def liftArgs ( defs: ListBuffer [ Tree ] , methRef: Type , args: List [ Tree ] ) ( implicit ctx: Context ) : List [ Tree [ T ] ]

Lift arguments that are not-idempotent into ValDefs in buffer defs and replace by the idents of so created ValDefs.

[+] def liftAssigned ( defs: ListBuffer [ Tree ] , tree: Tree ) ( implicit ctx: Context ) : Tree

Lift out common part of lhs tree taking part in an operator assignment such as

lhs += expr

[+] def liftPrefix ( defs: ListBuffer [ Tree ] , tree: Tree ) ( implicit ctx: Context ) : Tree

Lift prefix pre of an application pre.f(...) to

val x0 = pre x0.f(...)

unless pre is a New or pre is idempotent.