summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-12-17 17:40:21 +0000
committerMartin Odersky <odersky@gmail.com>2009-12-17 17:40:21 +0000
commit88683ede7df66a276835319d4d580f605420fa01 (patch)
tree6df1fa3927c09322598f9802b08ca8d0d462beeb /src/compiler
parentd8ef68e6a18862ac18cd304274feb0b310dd545c (diff)
downloadscala-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.scala10
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
}