diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-10-08 09:01:49 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-10-08 09:01:49 +0200 |
commit | 00c9c164f57223738789bdfd14959367a39c8d32 (patch) | |
tree | e7ce492913cf06ae771e65cf17f237be37e1b760 /src/compiler | |
parent | 67062db57c1abef88e0049dac5d82d4f13375a48 (diff) | |
download | scala-00c9c164f57223738789bdfd14959367a39c8d32.tar.gz scala-00c9c164f57223738789bdfd14959367a39c8d32.tar.bz2 scala-00c9c164f57223738789bdfd14959367a39c8d32.zip |
Don't pursue SAM translation after an arity mismatch.
Before this change:
scala> trait T { def apply(a: Int): Int }
defined trait T
scala> ((x: Int, y: Int) => 0): T
<console>:9: error: object creation impossible, since method apply in trait T of type (a: Int)Int is not defined
((x: Int, y: Int) => 0): T
^
After the change, these cases report the same errors as they do
*without* -Xexperimental.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index dfd962e13e..8e74ae3e0b 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -2871,8 +2871,9 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper * * Note that the arity of the sam must correspond to the arity of the function. */ + val samViable = sam.exists && sameLength(sam.info.params, fun.vparams) val (argpts, respt) = - if (sam.exists && sameLength(sam.info.params, fun.vparams)) { + if (samViable) { val samInfo = pt memberInfo sam (samInfo.paramTypes, samInfo.resultType) } else { @@ -2926,7 +2927,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper // Use synthesizeSAMFunction to expand `(p1: T1, ..., pN: TN) => body` // to an instance of the corresponding anonymous subclass of `pt`. - case _ if sam.exists => + case _ if samViable => newTyper(context.outer).synthesizeSAMFunction(sam, fun, respt, pt, mode) // regular Function |