diff options
author | Martin Odersky <odersky@gmail.com> | 2009-09-23 15:01:27 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-09-23 15:01:27 +0000 |
commit | 4edbecfe9baaec89ced227f5bd6b92fb1f54e1ec (patch) | |
tree | 8cca22855825d03bfdcc7ed50a8362355a24a279 /src/compiler/scala/tools/nsc/typechecker/Typers.scala | |
parent | 0d86d977a3eb153f46c59f348638426b821e006c (diff) | |
download | scala-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.scala | 8 |
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 { |