summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2006-09-06 13:13:37 +0000
committerBurak Emir <emir@epfl.ch>2006-09-06 13:13:37 +0000
commit0482a0c416de901c9e3cb4f5efc3b6134358ee55 (patch)
tree09104c82b97cbf9043d428729619fb9d87f41179 /src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
parent55f38ed459fdbbd2bd5d52b3807e663f9cf9b591 (diff)
downloadscala-0482a0c416de901c9e3cb4f5efc3b6134358ee55.tar.gz
scala-0482a0c416de901c9e3cb4f5efc3b6134358ee55.tar.bz2
scala-0482a0c416de901c9e3cb4f5efc3b6134358ee55.zip
prelim outer stuff
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala')
-rw-r--r--src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
index 5811c279c8..762572b7af 100644
--- a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
+++ b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
@@ -337,10 +337,21 @@ with PatternMatchers {
*/
private val secondTransformer = new OuterPathTransformer {
+ def handleSelect(tree:Select) = tree match {
+ case Select(qual, name) =>
+ val sym = tree.symbol
+ val enclClass = currentOwner.enclClass
+ if (enclClass != sym.owner && enclClass != sym.moduleClass) // (3)
+ sym.makeNotPrivate(sym.owner);
+ val qsym = qual.tpe.widen.symbol
+ if ((sym hasFlag PROTECTED) && //(4)
+ (qsym.isTrait || !(qual.isInstanceOf[Super] || (qsym isSubClass enclClass))))
+ sym setFlag notPROTECTED;
+ }
+
/** The second-step transformation method */
override def transform(tree: Tree): Tree = {
val sym = tree.symbol
-
val tree1 =
if(tree.isInstanceOf[Match]) {
//Console.println("calling super.transform of Match with ncases "+
@@ -354,18 +365,11 @@ with PatternMatchers {
if (sym.owner.isTrait && (sym hasFlag (ACCESSOR | SUPERACCESSOR)))
sym.makeNotPrivate(sym.owner); //(2)
tree1
- case Select(qual, name) =>
- val enclClass = currentOwner.enclClass
- if (enclClass != sym.owner && enclClass != sym.moduleClass) // (3)
- sym.makeNotPrivate(sym.owner);
- val qsym = qual.tpe.widen.symbol
- if ((sym hasFlag PROTECTED) && //(4)
- (qsym.isTrait || !(qual.isInstanceOf[Super] || (qsym isSubClass enclClass))))
- sym setFlag notPROTECTED;
+ case tree @ Select(qual, name) =>
+ handleSelect(tree)
tree1
-/*<--- begin transmatch experimental */
- case Match(selector, cases) =>
+ case Match(selector, cases) => // <----- transmatch hook
val tid = cunit.fresh.newName("tidmark")
if(settings.debug.value)
@@ -385,7 +389,13 @@ with PatternMatchers {
if (sym == currentOwner.enclClass || (sym hasFlag Flags.MODULE) && sym.isStatic) tree
else atPos(tree.pos)(outerPath(outerValue, sym)); // (5)
case Select(qual,name) =>
- Select(mytransform(qual),name)
+ val s = copy.Select(tree, mytransform(qual), name)
+ handleSelect(s)
+ s
+ case x =>
+ if(settings.debug.value)
+ Console.println(x.getClass())
+ x
}
}
val t_untyped = ExplicitOuter.this.handlePattern(nselector, ncases.asInstanceOf[List[CaseDef]], currentOwner, mytransform)