summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-04-12 17:20:07 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-04-12 17:20:07 +0000
commit18f75625a83a01d13e04276856246f35f63e0ac4 (patch)
treea01c74b4271c061073bdf38c385721bc1216f1ed /src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
parent0beec154209cae7d8aaf34831f8a2bc79af926cc (diff)
downloadscala-18f75625a83a01d13e04276856246f35f63e0ac4.tar.gz
scala-18f75625a83a01d13e04276856246f35f63e0ac4.tar.bz2
scala-18f75625a83a01d13e04276856246f35f63e0ac4.zip
Fixed various position issues in specialized me...
Fixed various position issues in specialized members. Removed an instance where the tree transformer was run twice on the same tree, resulting in double definition errors. Fixed re-typing of super calls in constructor arguments for specialized members. No review.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala')
-rw-r--r--src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
index 5ced187128..ec0e64006c 100644
--- a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
+++ b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
@@ -712,6 +712,7 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
}
info(opc.overriding) = Forward(om)
log("typeEnv(om) = " + typeEnv(om))
+ om setPos opc.overriding.pos // set the position of the concrete, overriding member
}
overloads(opc.overriding) = Overload(om, env) :: overloads(opc.overriding)
oms += om
@@ -825,12 +826,13 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
val res = tpe match {
case PolyType(targs, ClassInfoType(base, decls, clazz)) =>
val parents = base map specializedType
+ log("transformInfo (poly) " + clazz + " with parents1: " + parents + " ph: " + phase)
PolyType(targs, ClassInfoType(parents, new Scope(specializeClass(clazz, typeEnv(clazz))), clazz))
case ClassInfoType(base, decls, clazz) if !clazz.isPackageClass =>
-// base.map(_.typeSymbol.info)
+ atPhase(phase.next)(base.map(_.typeSymbol.info))
val parents = base map specializedType
- log("transformInfo " + clazz + " with parents1: " + parents)
+ log("transformInfo " + clazz + " with parents1: " + parents + " ph: " + phase)
val res = ClassInfoType(base map specializedType, new Scope(specializeClass(clazz, typeEnv(clazz))), clazz)
res
@@ -993,7 +995,7 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
if (!env.isEmpty) {
val specMember = overload(symbol, env)
if (specMember.isDefined) {
- if (settings.debug.value) log("** routing " + tree + " to " + specMember.get.sym.fullName + " tree: " + Select(transform(qual), specMember.get.sym.name))
+ if (settings.debug.value) log("** routing " + tree + " to " + specMember.get.sym.fullName)
localTyper.typedOperator(atPos(tree.pos)(Select(transform(qual), specMember.get.sym.name)))
} else {
val qual1 = transform(qual)
@@ -1006,7 +1008,7 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
else
localTyper.typed(tree1)
} else
- super.transform(tree)
+ treeCopy.Select(tree, qual1, name)
}
} else
super.transform(tree)
@@ -1129,7 +1131,7 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
case Apply(sel @ Select(sup @ Super(qual, name), name1), args) =>
val res = localTyper.typed(
- Apply(Select(Super(qual, name) setPos sup.pos, name1) setPos sel.pos, args) setPos tree.pos)
+ Apply(Select(Super(qual, name) setPos sup.pos, name1) setPos sel.pos, transformTrees(args)) setPos tree.pos)
log("retyping call to super, from: " + symbol + " to " + res.symbol)
res
@@ -1277,9 +1279,10 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
mbrs += ValDef(acc, EmptyTree).setType(NoType).setPos(m.pos)
}
// ctor
- mbrs += DefDef(m, Modifiers(m.flags), List(vparams) map (_ map ValDef), EmptyTree)
- } else
- mbrs += DefDef(m, { paramss => EmptyTree })
+ mbrs += atPos(m.pos)(DefDef(m, Modifiers(m.flags), List(vparams) map (_ map ValDef), EmptyTree))
+ } else {
+ mbrs += atPos(m.pos)(DefDef(m, { paramss => EmptyTree }))
+ }
} else if (m.isValue) {
mbrs += ValDef(m, EmptyTree).setType(NoType).setPos(m.pos)
} else if (m.isClass) {