diff options
author | Burak Emir <emir@epfl.ch> | 2006-09-06 13:13:37 +0000 |
---|---|---|
committer | Burak Emir <emir@epfl.ch> | 2006-09-06 13:13:37 +0000 |
commit | 0482a0c416de901c9e3cb4f5efc3b6134358ee55 (patch) | |
tree | 09104c82b97cbf9043d428729619fb9d87f41179 /src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala | |
parent | 55f38ed459fdbbd2bd5d52b3807e663f9cf9b591 (diff) | |
download | scala-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.scala | 34 |
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) |