summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2011-10-20 22:28:58 +0000
committerAdriaan Moors <adriaan.moors@epfl.ch>2011-10-20 22:28:58 +0000
commit8704ed2fc92e3d82287317fe34126c5d4d84e10c (patch)
tree035a6d98a08e102ac6116e9048c36996d1af6a22 /src/compiler/scala/tools/nsc/typechecker/Implicits.scala
parent98b904db879a0b987d6ae50e5d5d990285ed8c59 (diff)
downloadscala-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.scala11
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 {