aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Typer.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/dotty/tools/dotc/typer/Typer.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Typer.scala15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala
index 936c006fc..b689c8750 100644
--- a/src/dotty/tools/dotc/typer/Typer.scala
+++ b/src/dotty/tools/dotc/typer/Typer.scala
@@ -1051,8 +1051,19 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
}
}
- def typedAsFunction(tree: untpd.Tree, pt: Type)(implicit ctx: Context): Tree =
- typed(tree, if (defn.isFunctionType(pt)) pt else AnyFunctionProto)
+ def typedAsFunction(tree: untpd.Tree, pt: Type)(implicit ctx: Context): Tree = {
+ val pt1 = if (defn.isFunctionType(pt)) pt else AnyFunctionProto
+ var res = typed(tree, pt1)
+ if (pt1.eq(AnyFunctionProto) && !defn.isFunctionType(res.tpe)) {
+ def msg = "not a function; cannot be followed by `_'"
+ if (ctx.scala2Mode) {
+ ctx.migrationWarning(msg, tree.pos)
+ res = typed(untpd.Function(Nil, untpd.TypedSplice(res)))
+ }
+ else ctx.error(msg, tree.pos)
+ }
+ res
+ }
/** Retrieve symbol attached to given tree */
protected def retrieveSym(tree: untpd.Tree)(implicit ctx: Context) = tree.removeAttachment(SymOfTree) match {