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 | |
parent | bf83b15cadf4bea4bc025ef84042f3bcbb5d3621 (diff) | |
download | scala-9feddc6cb4df699472248fc780505a9b437f13a0.tar.gz scala-9feddc6cb4df699472248fc780505a9b437f13a0.tar.bz2 scala-9feddc6cb4df699472248fc780505a9b437f13a0.zip |
fixed tickets 146,148,155
Diffstat (limited to 'src')
3 files changed, 11 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala index a2575e59ad..02ce42a1a6 100644 --- a/src/compiler/scala/tools/nsc/transform/Erasure.scala +++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala @@ -596,7 +596,7 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer { val opc = new overridingPairs.Cursor(root) { override def exclude(sym: Symbol): Boolean = - !sym.isTerm || (sym hasFlag (PRIVATE | BRIDGE)) || super.exclude(sym) + !sym.isTerm || sym.hasFlag(PRIVATE) || super.exclude(sym) override def matches(sym1: Symbol, sym2: Symbol): Boolean = atPhase(phase.next)(sym1.tpe =:= sym2.tpe) } @@ -660,7 +660,7 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer { new overridingPairs.Cursor(owner) { override def parents: List[Type] = List(owner.info.parents.head) override def exclude(sym: Symbol): Boolean = - !sym.isMethod || (sym hasFlag (PRIVATE | BRIDGE)) || super.exclude(sym) + !sym.isMethod || sym.hasFlag(PRIVATE) || super.exclude(sym) } } while (opc.hasNext) { diff --git a/src/compiler/scala/tools/nsc/transform/OverridingPairs.scala b/src/compiler/scala/tools/nsc/transform/OverridingPairs.scala index 865d988cae..4217cc32ce 100644 --- a/src/compiler/scala/tools/nsc/transform/OverridingPairs.scala +++ b/src/compiler/scala/tools/nsc/transform/OverridingPairs.scala @@ -24,7 +24,8 @@ abstract class OverridingPairs { private val self = base.thisType - protected def exclude(sym: Symbol): Boolean = sym.isConstructor || sym.isPrivateLocal + protected def exclude(sym: Symbol): Boolean = + sym.isConstructor || sym.isPrivateLocal || sym.hasFlag(BRIDGE) protected def parents: List[Type] = base.info.parents 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) { |