diff options
author | Martin Odersky <odersky@gmail.com> | 2009-03-17 19:16:19 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-03-17 19:16:19 +0000 |
commit | 9a4199709d2c3c910dbbe17bffdac97df69b1d8f (patch) | |
tree | c5ec122bb4215657ab241d3958a2813e3ac0100a /src/compiler/scala/tools/nsc/typechecker/Implicits.scala | |
parent | 36bf7cb302fe3df9cb654567b9fc3443cb2cc5ff (diff) | |
download | scala-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.scala | 16 |
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) |