aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/EtaExpansion.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/dotty/tools/dotc/typer/EtaExpansion.scala')
-rw-r--r--src/dotty/tools/dotc/typer/EtaExpansion.scala13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/typer/EtaExpansion.scala b/src/dotty/tools/dotc/typer/EtaExpansion.scala
index 2eb7486eb..8781eea4b 100644
--- a/src/dotty/tools/dotc/typer/EtaExpansion.scala
+++ b/src/dotty/tools/dotc/typer/EtaExpansion.scala
@@ -42,6 +42,15 @@ object EtaExpansion {
tree
}
+ /** Lift a function argument, stripping any NamedArg wrapper */
+ def liftArg(defs: mutable.ListBuffer[Tree], arg: Tree, prefix: String = "")(implicit ctx: Context): Tree = {
+ val arg1 = arg match {
+ case NamedArg(_, arg1) => arg1
+ case arg => arg
+ }
+ lift(defs, arg1, prefix)
+ }
+
/** Lift arguments that are not-idempotent into ValDefs in buffer `defs`
* and replace by the idents of so created ValDefs.
*/
@@ -50,10 +59,10 @@ object EtaExpansion {
case MethodType(paramNames, paramTypes) =>
(args, paramNames, paramTypes).zipped map { (arg, name, tp) =>
if (tp isRef defn.ByNameParamClass) arg
- else lift(defs, arg, if (name contains '$') "" else name.toString)
+ else liftArg(defs, arg, if (name contains '$') "" else name.toString)
}
case _ =>
- args map (lift(defs, _))
+ args map (liftArg(defs, _))
}
/** Lift out function prefix and all arguments from application