Fixed some position issues and build manager test. No review.

git-svn-id: http://lampsvn.epfl.ch/svn-repos/scala/scala/trunk@21451 5e8d7ff9-d8ef-0310-90f0-a4852d11357a
This commit is contained in:
dragos 2010-04-11 18:51:45 +00:00
parent 2add2533c8
commit f44dd8fdee
2 changed files with 12 additions and 6 deletions

View File

@ -1030,7 +1030,12 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
val specMembers = makeSpecializedMembers(tree.symbol.enclClass) ::: (implSpecClasses(body) map localTyper.typed)
if (!symbol.isPackageClass)
(new CollectMethodBodies)(tree)
treeCopy.Template(tree, currentOwner.info.parents.map(TypeTree), self,
val parents1 = currentOwner.info.parents.zipWithIndex.map {
case (tpe, idx) => TypeTree(tpe) setPos parents(idx).pos
}
treeCopy.Template(tree,
parents1 /*currentOwner.info.parents.map(tpe => TypeTree(tpe) setPos parents.head.pos)*/,
self,
atOwner(currentOwner)(transformTrees(body ::: specMembers)))
case ddef @ DefDef(mods, name, tparams, vparamss, tpt, rhs) if info.isDefinedAt(symbol) =>
@ -1122,8 +1127,9 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
symbol.enclClass,
typeEnv(symbol.alias) ++ typeEnv(tree.symbol))
case Apply(Select(Super(qual, name), name1), args) =>
val res = localTyper.typed(atPos(tree.pos)(Apply(Select(Super(qual, name), name1), args)))
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)
log("retyping call to super, from: " + symbol + " to " + res.symbol)
res
@ -1296,8 +1302,8 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
for (((sym1, env), specCls) <- specializedClass if sym1 == tree.symbol) {
val parents = specCls.info.parents.map(TypeTree)
buf +=
ClassDef(specCls, Template(parents, emptyValDef, List())
.setSymbol(specCls.newLocalDummy(sym1.pos)))
ClassDef(specCls, atPos(impl.pos)(Template(parents, emptyValDef, List()))
.setSymbol(specCls.newLocalDummy(sym1.pos))) setPos tree.pos
log("created synthetic class: " + specCls + " of " + sym1 + " in env: " + env)
}
case _ =>

View File

@ -3,7 +3,7 @@ compiling Set(A.scala, B.scala)
Changes: Map()
builder > A.scala
compiling Set(A.scala)
Changes: Map(class A -> List(Changed(Definition(A.x))[method x changed from [T](t: T)T to [T](t: T)T flags: <method>]))
Changes: Map(class A -> List(Added(Definition(A.x$mBc$sp)), Added(Definition(A.x$mCc$sp)), Added(Definition(A.x$mDc$sp)), Added(Definition(A.x$mFc$sp)), Added(Definition(A.x$mIc$sp)), Added(Definition(A.x$mLc$sp)), Added(Definition(A.x$mSc$sp)), Added(Definition(A.x$mVc$sp)), Added(Definition(A.x$mZc$sp)), Changed(Definition(A.x))[method x changed from [T](t: T)T to [T](t: T)T flags: <method>]))
invalidate B.scala because it references changed definition [Changed(Definition(A.x))[method x changed from [T](t: T)T to [T](t: T)T flags: <method>]]
compiling Set(B.scala)
Changes: Map(object B -> List())