summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2005-11-29 10:47:03 +0000
committerMartin Odersky <odersky@gmail.com>2005-11-29 10:47:03 +0000
commitfdeedc59a910093a447bd49c4dc445be6167f899 (patch)
tree08bc4d07db09f071b7d56a48b145b2fe70515452 /sources
parente528160f31fec9bcd6c2230455a0ad2ce8250a89 (diff)
downloadscala-fdeedc59a910093a447bd49c4dc445be6167f899.tar.gz
scala-fdeedc59a910093a447bd49c4dc445be6167f899.tar.bz2
scala-fdeedc59a910093a447bd49c4dc445be6167f899.zip
*** empty log message ***
Diffstat (limited to 'sources')
-rwxr-xr-xsources/scala/tools/nsc/symtab/Symbols.scala7
-rwxr-xr-xsources/scala/tools/nsc/symtab/Types.scala2
-rwxr-xr-xsources/scala/tools/nsc/transform/Mixin.scala29
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 $$<fully-qualified-name-of-class `base'>
* 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 {