summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-10-08 09:01:49 +0200
committerJason Zaugg <jzaugg@gmail.com>2013-10-08 09:01:49 +0200
commit00c9c164f57223738789bdfd14959367a39c8d32 (patch)
treee7ce492913cf06ae771e65cf17f237be37e1b760 /src/compiler
parent67062db57c1abef88e0049dac5d82d4f13375a48 (diff)
downloadscala-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.scala5
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