diff options
author | Martin Odersky <odersky@gmail.com> | 2007-11-09 15:03:13 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2007-11-09 15:03:13 +0000 |
commit | 9feddc6cb4df699472248fc780505a9b437f13a0 (patch) | |
tree | 4f4165955b41e1475a36be5f064ab492c817a7c0 /src/compiler/scala/tools/nsc/typechecker/Typers.scala | |
parent | bf83b15cadf4bea4bc025ef84042f3bcbb5d3621 (diff) | |
download | scala-9feddc6cb4df699472248fc780505a9b437f13a0.tar.gz scala-9feddc6cb4df699472248fc780505a9b437f13a0.tar.bz2 scala-9feddc6cb4df699472248fc780505a9b437f13a0.zip |
fixed tickets 146,148,155
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 8cd65792cc..f780293e78 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -608,7 +608,7 @@ trait Typers { self: Analyzer => * If all this fails, error */ protected def adapt(tree: Tree, mode: Int, pt: Type): Tree = tree.tpe match { - case ct @ ConstantType(value) if ((mode & TYPEmode) == 0 && (ct <:< pt) && !inIDE) => // (0) + case ct @ ConstantType(value) if ((mode & (TYPEmode | FUNmode)) == 0 && (ct <:< pt) && !inIDE) => // (0) copy.Literal(tree, value) case OverloadedType(pre, alts) if ((mode & FUNmode) == 0) => // (1) inferExprAlternative(tree, pt) @@ -814,7 +814,8 @@ trait Typers { self: Analyzer => */ def adaptToMember(qual: Tree, name: Name, tp: Type): Tree = { val qtpe = qual.tpe.widen - if (qual.isTerm && ((qual.symbol eq null) || !qual.symbol.isTerm || qual.symbol.isValue) && + if (qual.isTerm && + ((qual.symbol eq null) || !qual.symbol.isTerm || qual.symbol.isValue) && phase.id <= currentRun.typerPhase.id && !qtpe.isError && !tp.isError && qtpe.typeSymbol != AllRefClass && qtpe.typeSymbol != AllClass && qtpe != WildcardType) { val coercion = inferView(qual.pos, qtpe, name, tp, true) @@ -1264,6 +1265,10 @@ trait Typers { self: Analyzer => val tparams1 = List.mapConserve(ddef.tparams)(typedTypeDef) val vparamss1 = List.mapConserve(ddef.vparamss)(vparams1 => List.mapConserve(vparams1)(typedValDef)) + for (vparams1 <- vparamss1; if !vparams1.isEmpty; vparam1 <- vparams1.init) { + if (vparam1.symbol.tpe.typeSymbol == RepeatedParamClass) + error(vparam1.pos, "*-parameter must come last") + } var tpt1 = checkNoEscaping.privates(meth, typedType(ddef.tpt)) if (!settings.Xexperimental.value) { for (vparams <- vparamss1; vparam <- vparams) { |