summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-11-29 22:20:39 +0000
committerPaul Phillips <paulp@improving.org>2010-11-29 22:20:39 +0000
commitcbcf3f505144297ad197d0086ea7a4c4f1fbb598 (patch)
treebcacfa37635ad8293c831c3bd313806396cede76 /src/compiler
parentfa822e3ef63a7e11345dcdd2c81a1f565093a63c (diff)
downloadscala-cbcf3f505144297ad197d0086ea7a4c4f1fbb598.tar.gz
scala-cbcf3f505144297ad197d0086ea7a4c4f1fbb598.tar.bz2
scala-cbcf3f505144297ad197d0086ea7a4c4f1fbb598.zip
"I invite everyone to change this rule, and obs...
"I invite everyone to change this rule, and observe what breaks!" This much beloved comment from #1208 has been on my radar for two years. The worm has turned. Closes #1208. The inferred type of an object is now Foo.type instead of "object Foo". What once was this: scala> val x: Map[Int, Singleton] = Map(1 -> None) <console>:5: error: type mismatch; found : (Int, object None) required: (Int, Singleton) Now exudes a pleasing aura of workingness: scala> val x: Map[Int, Singleton] = Map(1 -> None) x: Map[Int,Singleton] = Map(1 -> None) No review.
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Infer.scala1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Infer.scala b/src/compiler/scala/tools/nsc/typechecker/Infer.scala
index 66cd76f800..4ced09795f 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Infer.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Infer.scala
@@ -586,6 +586,7 @@ trait Infer {
tparam -> Some(
if (targ.typeSymbol == RepeatedParamClass) targ.baseType(SeqClass)
else if (targ.typeSymbol == JavaRepeatedParamClass) targ.baseType(ArrayClass)
+ else if (targ.typeSymbol.isModuleClass) targ // this infers Foo.type instead of "object Foo"
else targ.widen
)
}