diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2011-10-20 22:28:58 +0000 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2011-10-20 22:28:58 +0000 |
commit | 8704ed2fc92e3d82287317fe34126c5d4d84e10c (patch) | |
tree | 035a6d98a08e102ac6116e9048c36996d1af6a22 /src/compiler/scala/tools/nsc/typechecker/Implicits.scala | |
parent | 98b904db879a0b987d6ae50e5d5d990285ed8c59 (diff) | |
download | scala-8704ed2fc92e3d82287317fe34126c5d4d84e10c.tar.gz scala-8704ed2fc92e3d82287317fe34126c5d4d84e10c.tar.bz2 scala-8704ed2fc92e3d82287317fe34126c5d4d84e10c.zip |
infer singleton when asking for it
a type var's constraint now also tracks whether the type var was
compared to a stable type
if it was, we probably shouldn't widen the type argument that's inferred
for this var, as the result will surely fail to type check
NOTE: must be enabled using -Xexperimental
review by extempore
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Implicits.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Implicits.scala | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala index 660999eb64..fedf0a9104 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala @@ -178,13 +178,8 @@ trait Implicits { private val hasMemberCache = perRunCaches.newMap[Name, Type]() def apply(name: Name): Type = hasMemberCache.getOrElseUpdate(name, memberWildcardType(name, WildcardType)) def unapply(pt: Type): Option[Name] = pt match { - case RefinedType(List(WildcardType), decls) => - decls.toList match { - case List(sym) if sym.tpe == WildcardType => Some(sym.name) - case _ => None - } - case _ => - None + case RefinedType(List(WildcardType), Scope(sym)) if sym.tpe == WildcardType => Some(sym.name) + case _ => None } } @@ -570,7 +565,7 @@ trait Implicits { // filter out failures from type inference, don't want to remove them from undetParams! // we must be conservative in leaving type params in undetparams // prototype == WildcardType: want to remove all inferred Nothings - val AdjustedTypeArgs(okParams, okArgs) = adjustTypeArgs(undetParams, targs) + val AdjustedTypeArgs(okParams, okArgs) = adjustTypeArgs(undetParams, tvars, targs) val subst: TreeTypeSubstituter = if (okParams.isEmpty) EmptyTreeTypeSubstituter else { |