From fdeedc59a910093a447bd49c4dc445be6167f899 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 29 Nov 2005 10:47:03 +0000 Subject: *** empty log message *** --- sources/scala/tools/nsc/symtab/Symbols.scala | 7 +++++++ sources/scala/tools/nsc/symtab/Types.scala | 2 +- sources/scala/tools/nsc/transform/Mixin.scala | 29 +++++++++++---------------- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/sources/scala/tools/nsc/symtab/Symbols.scala b/sources/scala/tools/nsc/symtab/Symbols.scala index de81371727..87320d955d 100755 --- a/sources/scala/tools/nsc/symtab/Symbols.scala +++ b/sources/scala/tools/nsc/symtab/Symbols.scala @@ -605,11 +605,18 @@ import Flags._; * term symbol rename it by expanding its name to avoid name clashes */ final def makeNotPrivate(base: Symbol): unit = + if (isTerm && (this hasFlag PRIVATE)) { + setFlag(notPRIVATE); + if (!hasFlag(DEFERRED)) setFlag(lateFINAL); + expandName(base) + } +/* if (isTerm && !(this hasFlag notPRIVATE) && ((this hasFlag PRIVATE) || this.owner.isTerm)) { setFlag(notPRIVATE); if (!hasFlag(DEFERRED)) setFlag(lateFINAL); expandName(base) } +*/ /** change name by appending $$ * Do the same for any accessed symbols or setters/getters diff --git a/sources/scala/tools/nsc/symtab/Types.scala b/sources/scala/tools/nsc/symtab/Types.scala index 67f31ed938..a041b207c2 100755 --- a/sources/scala/tools/nsc/symtab/Types.scala +++ b/sources/scala/tools/nsc/symtab/Types.scala @@ -49,7 +49,7 @@ import Flags._; val emptyTypeArray = new Array[Type](0); /** The base class for all types */ - trait Type { + abstract class Type { /** Types for which asSeenFrom always is the identity, no matter what prefix or owner */ def isTrivial: boolean = false; diff --git a/sources/scala/tools/nsc/transform/Mixin.scala b/sources/scala/tools/nsc/transform/Mixin.scala index 0d0be0de1e..070a204e5a 100755 --- a/sources/scala/tools/nsc/transform/Mixin.scala +++ b/sources/scala/tools/nsc/transform/Mixin.scala @@ -52,7 +52,7 @@ abstract class Mixin extends InfoTransform { def addMember(clazz: Symbol, member: Symbol): Symbol = { if (settings.debug.value) log("new member of " + clazz + ":" + member.defString);//debug clazz.info.decls enter member; - member + member setFlag MIXEDIN } def addLateInterfaceMembers(clazz: Symbol) = @@ -105,9 +105,7 @@ abstract class Mixin extends InfoTransform { (clazz.info.findMember(member.name, 0, 0).alternatives contains mmap(member))) { val member1 = addMember( clazz, - member.cloneSymbol(clazz) - setPos clazz.pos - setFlag MIXEDIN resetFlag (DEFERRED | lateDEFERRED)); + member.cloneSymbol(clazz) setPos clazz.pos resetFlag (DEFERRED | lateDEFERRED)); member1.asInstanceOf[TermSymbol] setAlias member; } } @@ -122,7 +120,7 @@ abstract class Mixin extends InfoTransform { clazz, member.cloneSymbol(clazz) setPos clazz.pos - setFlag (MIXEDIN | FINAL) resetFlag (DEFERRED | lateDEFERRED)); + setFlag FINAL resetFlag (DEFERRED | lateDEFERRED)); if (!member.isSetter) member.tpe match { case MethodType(List(), ConstantType(_)) => @@ -130,18 +128,17 @@ abstract class Mixin extends InfoTransform { case _ => addMember(clazz, clazz.newValue(member.pos, nme.getterToLocal(member.name)) - setFlag (LOCAL | PRIVATE | MIXEDIN | member.getFlag(MUTABLE)) + setFlag (LOCAL | PRIVATE | member.getFlag(MUTABLE)) setInfo member.tpe.resultType) } } else if (member hasFlag SUPERACCESSOR) { - val member1 = addMember(clazz, member.cloneSymbol(clazz)) - setPos clazz.pos setFlag MIXEDIN; + val member1 = addMember(clazz, member.cloneSymbol(clazz)) setPos clazz.pos; assert(member1.alias != NoSymbol, member1); val alias1 = rebindSuper(clazz, member.alias, mixin); member1.asInstanceOf[TermSymbol] setAlias alias1; } else if (member.isMethod && member.isModule && !(member hasFlag (LIFTED | BRIDGE))) { - addMember(clazz, member.cloneSymbol(clazz)) resetFlag (DEFERRED | lateDEFERRED) - setPos clazz.pos setFlag MIXEDIN + addMember(clazz, member.cloneSymbol(clazz)) setPos clazz.pos + resetFlag (DEFERRED | lateDEFERRED) } } } @@ -247,6 +244,7 @@ abstract class Mixin extends InfoTransform { } private def addNewDefs(clazz: Symbol, stats: List[Tree]): List[Tree] = { + if (settings.debug.value) System.out.println("add new defs for " + clazz); val newDefs = new ListBuffer[Tree]; def addDef(pos: int, tree: Tree): unit = { if (settings.debug.value) log("add new def to " + clazz + ": " + tree); @@ -285,14 +283,11 @@ abstract class Mixin extends InfoTransform { case _ => stat } - if (clazz hasFlag lateINTERFACE) { - for (val sym <- clazz.info.decls.toList) { - if ((sym hasFlag SYNTHETIC) && (sym hasFlag ACCESSOR)) + for (val sym <- clazz.info.decls.toList) { + if (sym hasFlag MIXEDIN) { + if (clazz hasFlag lateINTERFACE) { addDefDef(sym, vparamss => EmptyTree) - } - } else if (!clazz.isTrait) { - for (val sym <- clazz.info.decls.toList) { - if (sym hasFlag MIXEDIN) { + } else if (!clazz.isTrait) { if (sym hasFlag ACCESSOR) { addDefDef(sym, vparams => { val accessedRef = sym.tpe match { -- cgit v1.2.3