summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-09-23 15:01:27 +0000
committerMartin Odersky <odersky@gmail.com>2009-09-23 15:01:27 +0000
commit4edbecfe9baaec89ced227f5bd6b92fb1f54e1ec (patch)
tree8cca22855825d03bfdcc7ed50a8362355a24a279 /src/compiler/scala/tools/nsc/typechecker/Typers.scala
parent0d86d977a3eb153f46c59f348638426b821e006c (diff)
downloadscala-4edbecfe9baaec89ced227f5bd6b92fb1f54e1ec.tar.gz
scala-4edbecfe9baaec89ced227f5bd6b92fb1f54e1ec.tar.bz2
scala-4edbecfe9baaec89ced227f5bd6b92fb1f54e1ec.zip
Fixed #2381.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 6a1bdc5ce1..d3f568ef1b 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -3570,9 +3570,15 @@ trait Typers { self: Analyzer =>
case Typed(expr, tpt) =>
if (treeInfo.isWildcardStarArg(tree)) {
val expr0 = typed(expr, mode & stickyModes, WildcardType)
+ def subArrayType(pt: Type) =
+ if (isValueClass(pt.typeSymbol) || !isFullyDefined(pt)) arrayType(pt)
+ else {
+ val tparam = makeFreshExistential("", context.owner, TypeBounds(NothingClass.tpe, pt))
+ ExistentialType(List(tparam), arrayType(tparam.tpe))
+ }
val (expr1, baseClass) =
if (expr0.tpe.typeSymbol == ArrayClass)
- (adapt(expr0, mode & stickyModes, arrayType(pt)), ArrayClass)
+ (adapt(expr0, mode & stickyModes, subArrayType(pt)), ArrayClass)
else
(adapt(expr0, mode & stickyModes, seqType(pt)), SeqClass)
expr1.tpe.baseType(baseClass) match {