summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-03-17 19:16:19 +0000
committerMartin Odersky <odersky@gmail.com>2009-03-17 19:16:19 +0000
commit9a4199709d2c3c910dbbe17bffdac97df69b1d8f (patch)
treec5ec122bb4215657ab241d3958a2813e3ac0100a /src/compiler/scala/tools/nsc/typechecker/Implicits.scala
parent36bf7cb302fe3df9cb654567b9fc3443cb2cc5ff (diff)
downloadscala-9a4199709d2c3c910dbbe17bffdac97df69b1d8f.tar.gz
scala-9a4199709d2c3c910dbbe17bffdac97df69b1d8f.tar.bz2
scala-9a4199709d2c3c910dbbe17bffdac97df69b1d8f.zip
chyanged implicits so that implicit Builder pat...
chyanged implicits so that implicit Builder pattern works.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Implicits.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Implicits.scala16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
index 6d91179c3d..0efdc6fbe2 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala
@@ -52,6 +52,16 @@ self: Analyzer =>
search.result
}
+ /** If type `pt` an instance of Manifest or OptManifest, or an abstract type lower-bounded
+ * by such an instance?
+ */
+ def isManifest(pt: Type): Boolean = pt match {
+ case TypeRef(_, ManifestClass, List(_)) |
+ TypeRef(_, OptManifestClass, List(_)) => true
+ case TypeRef(_, tsym, _) => tsym.isAbstractType && isManifest(pt.bounds.lo)
+ case _ => false
+ }
+
/** The result of an implicit search
* @param tree The tree representing the implicit
* @param subst A substituter that represents the undetermined type parameters
@@ -234,7 +244,7 @@ self: Analyzer =>
private def typedImplicit(info: ImplicitInfo): SearchResult =
context.openImplicits find (dominates(pt, _)) match {
case Some(pending) =>
- println("Pending implicit "+pending+" dominates "+pt)
+ //println("Pending implicit "+pending+" dominates "+pt+"/"+undetParams)
throw DivergentImplicit
SearchFailure
case None =>
@@ -273,9 +283,7 @@ self: Analyzer =>
def approximate(tp: Type) =
tp.instantiateTypeParams(undetParams, undetParams map (_ => WildcardType))
- /** Instantiated `pt' so that covariant occurrences of undetermined
- * type parameters are replaced by Any, and all other occurrences
- * are replaced by Nothing
+ /** Instantiated `pt' so that undetermined type parameters are replaced by wildcards
*/
val wildPt = approximate(pt)