diff options
author | Martin Odersky <odersky@gmail.com> | 2009-12-17 17:40:21 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-12-17 17:40:21 +0000 |
commit | 88683ede7df66a276835319d4d580f605420fa01 (patch) | |
tree | 6df1fa3927c09322598f9802b08ca8d0d462beeb /src/compiler | |
parent | d8ef68e6a18862ac18cd304274feb0b310dd545c (diff) | |
download | scala-88683ede7df66a276835319d4d580f605420fa01.tar.gz scala-88683ede7df66a276835319d4d580f605420fa01.tar.bz2 scala-88683ede7df66a276835319d4d580f605420fa01.zip |
Closed #2795. review by dubochet.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Implicits.scala | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala index 2bd296b65d..34b98a8945 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala @@ -725,13 +725,14 @@ self: Analyzer => def manifestFactoryCall(constructor: String, tparg: Type, args: Tree*): Tree = if (args contains EmptyTree) EmptyTree else typedPos(tree.pos.focus) { + util.trace("manif fact ")( Apply( TypeApply( Select(gen.mkAttributedRef(if (full) FullManifestModule else PartialManifestModule), constructor), List(TypeTree(tparg)) ), args.toList - ) + )) } /** Creates a tree representing one of the singleton manifests.*/ @@ -770,10 +771,13 @@ self: Analyzer => EmptyTree // todo: change to existential parameter manifest else if (sym.isTypeParameterOrSkolem) EmptyTree // a manifest should have been found by normal searchImplicit - else + else { + val era = erasure.erasure(tp1) + val base = tp1.baseType(era.typeSymbol) manifestFactoryCall( "abstractType", tp, - findSubManifest(pre) :: Literal(sym.name.toString) :: findManifest(tp1.bounds.hi) :: (args map findSubManifest): _*) + findSubManifest(pre) :: Literal(sym.name.toString) :: gen.mkClassOf(base) :: (args map findSubManifest): _*) + } } else { EmptyTree // a manifest should have been found by normal searchImplicit } |