summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-11-09 15:03:13 +0000
committerMartin Odersky <odersky@gmail.com>2007-11-09 15:03:13 +0000
commit9feddc6cb4df699472248fc780505a9b437f13a0 (patch)
tree4f4165955b41e1475a36be5f064ab492c817a7c0
parentbf83b15cadf4bea4bc025ef84042f3bcbb5d3621 (diff)
downloadscala-9feddc6cb4df699472248fc780505a9b437f13a0.tar.gz
scala-9feddc6cb4df699472248fc780505a9b437f13a0.tar.bz2
scala-9feddc6cb4df699472248fc780505a9b437f13a0.zip
fixed tickets 146,148,155
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala4
-rw-r--r--src/compiler/scala/tools/nsc/transform/OverridingPairs.scala3
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala9
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) {