summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-07-14 13:18:32 +0000
committerMartin Odersky <odersky@gmail.com>2006-07-14 13:18:32 +0000
commitf964ab66d62b7cee249d89989831f7cd74c76f0a (patch)
treec7ff75d2bb7770c5ff9edbe50d52b0b0255f7204 /src/compiler/scala/tools/nsc
parentc755b6a62e87d2ef7fe77ead9c6dd76ed096089e (diff)
downloadscala-f964ab66d62b7cee249d89989831f7cd74c76f0a.tar.gz
scala-f964ab66d62b7cee249d89989831f7cd74c76f0a.tar.bz2
scala-f964ab66d62b7cee249d89989831f7cd74c76f0a.zip
fixed bug657.
Diffstat (limited to 'src/compiler/scala/tools/nsc')
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala14
-rw-r--r--src/compiler/scala/tools/nsc/transform/Mixin.scala9
2 files changed, 16 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala
index e36fffbff4..53f3515fbc 100644
--- a/src/compiler/scala/tools/nsc/symtab/Types.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Types.scala
@@ -319,8 +319,16 @@ trait Types requires SymbolTable {
* by `owner'. Identity for all other types. */
def cloneInfo(owner: Symbol) = this
+ protected def objectPrefix = "object "
+ protected def packagePrefix = "package "
+
+ def trimPrefix(str: String) =
+ if (str.startsWith(objectPrefix)) str.substring(objectPrefix.length)
+ else if (str.startsWith(packagePrefix)) str.substring(packagePrefix.length)
+ else str
+
/** The string representation of this type used as a prefix */
- def prefixString = toString() + "#";
+ def prefixString = trimPrefix(toString()) + "#";
/** The string representation of this type, with singletypes explained */
def toLongString = {
@@ -891,9 +899,9 @@ trait Types requires SymbolTable {
val str = (pre.prefixString + sym.nameString +
(if (args.isEmpty) "" else args.mkString("[", ",", "]")))
if (sym.isPackageClass)
- "package "+str
+ packagePrefix+str
else if (sym.isModuleClass)
- "object "+str
+ objectPrefix+str
else if (sym.isAnonymousClass && sym.isInitialized)
sym.info.parents.mkString("", " with ", "{ ... }")
else if (sym.isRefinementClass && sym.isInitialized)
diff --git a/src/compiler/scala/tools/nsc/transform/Mixin.scala b/src/compiler/scala/tools/nsc/transform/Mixin.scala
index 1049ad6473..82b111ace6 100644
--- a/src/compiler/scala/tools/nsc/transform/Mixin.scala
+++ b/src/compiler/scala/tools/nsc/transform/Mixin.scala
@@ -320,9 +320,10 @@ abstract class Mixin extends InfoTransform {
val rhs0 =
Apply(Select(Super(clazz, nme.EMPTY.toTypeName), stat.symbol.alias),
vparams map (vparam => Ident(vparam.symbol)));
- if (settings.debug.value) log("complete super acc " + stat.symbol + stat.symbol.locationString + " " + rhs0 + " " + stat.symbol.alias + stat.symbol.alias.locationString)//debug
- val rhs1 = postTransform(localTyper.typed(atPos(stat.pos)(rhs0), stat.symbol.tpe.resultType));
- copy.DefDef(stat, mods, name, tparams, List(vparams), tpt, rhs1)
+ val rhs1 = localTyper.typed(atPos(stat.pos)(rhs0), stat.symbol.tpe.resultType);
+ val rhs2 = atPhase(currentRun.mixinPhase)(transform(rhs1))
+ if (settings.debug.value) log("complete super acc " + stat.symbol + stat.symbol.locationString + " " + rhs1 + " " + stat.symbol.alias + stat.symbol.alias.locationString + "/" + stat.symbol.alias.owner.hasFlag(lateINTERFACE))//debug
+ copy.DefDef(stat, mods, name, tparams, List(vparams), tpt, rhs2)
case _ =>
stat
}
@@ -374,7 +375,7 @@ abstract class Mixin extends InfoTransform {
case Apply(Select(qual, _), args) =>
def staticCall(target: Symbol) = {
if (target == NoSymbol)
- assert(false, "" + sym + " " + sym.owner + " " + implClass(sym.owner) + " " + sym.owner.owner + atPhase(phase.prev)(sym.owner.owner.info.decls.toList));//debug
+ assert(false, "" + sym + ":" + sym.tpe + " " + sym.owner + " " + implClass(sym.owner) + " " + implClass(sym.owner).info.member(sym.name) + " " + atPhase(phase.prev)(implClass(sym.owner).info.member(sym.name).tpe) + " " + phase);//debug
localTyper.typed {
atPos(tree.pos) {
val qual1 =