diff options
author | liu fengyun <liu@fengy.me> | 2017-03-18 11:57:08 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-18 11:57:08 +0100 |
commit | 8b2d315936149efb15ded478fcc1d95ac9650e56 (patch) | |
tree | c6224496eccb39860f9b5d08fceb9055b6e15cbc /compiler | |
parent | d0621108bad55f9fc66c1c5ade9a0b7edb3117e7 (diff) | |
parent | d45c09acb49c862f38d1de588abac3412876e32e (diff) | |
download | dotty-8b2d315936149efb15ded478fcc1d95ac9650e56.tar.gz dotty-8b2d315936149efb15ded478fcc1d95ac9650e56.tar.bz2 dotty-8b2d315936149efb15ded478fcc1d95ac9650e56.zip |
Merge pull request #2058 from dotty-staging/fix-2054
Fix #2054
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/src/dotty/tools/dotc/Compiler.scala | 4 | ||||
-rw-r--r-- | compiler/src/dotty/tools/dotc/transform/ExpandPrivate.scala | 8 | ||||
-rw-r--r-- | compiler/src/dotty/tools/dotc/transform/MoveStatics.scala | 2 |
3 files changed, 10 insertions, 4 deletions
diff --git a/compiler/src/dotty/tools/dotc/Compiler.scala b/compiler/src/dotty/tools/dotc/Compiler.scala index f413fc902..efde897cd 100644 --- a/compiler/src/dotty/tools/dotc/Compiler.scala +++ b/compiler/src/dotty/tools/dotc/Compiler.scala @@ -92,12 +92,12 @@ class Compiler { new ElimStaticThis, // Replace `this` references to static objects by global identifiers new Flatten, // Lift all inner classes to package scope new RestoreScopes), // Repair scopes rendered invalid by moving definitions in prior phases of the group - List(new ExpandPrivate, // Widen private definitions accessed from nested classes + List(new MoveStatics, // Move static methods to companion classes + new ExpandPrivate, // Widen private definitions accessed from nested classes new SelectStatic, // get rid of selects that would be compiled into GetStatic new CollectEntryPoints, // Find classes with main methods new CollectSuperCalls, // Find classes that are called with super new DropInlined, // Drop Inlined nodes, since backend has no use for them - new MoveStatics, // Move static methods to companion classes new LabelDefs), // Converts calls to labels to jumps List(new GenBCode) // Generate JVM bytecode ) diff --git a/compiler/src/dotty/tools/dotc/transform/ExpandPrivate.scala b/compiler/src/dotty/tools/dotc/transform/ExpandPrivate.scala index 83cd395ff..8f99ef1d0 100644 --- a/compiler/src/dotty/tools/dotc/transform/ExpandPrivate.scala +++ b/compiler/src/dotty/tools/dotc/transform/ExpandPrivate.scala @@ -3,7 +3,7 @@ package transform import core._ import dotty.tools.dotc.ast.tpd -import dotty.tools.dotc.core.DenotTransformers.{SymTransformer, IdentityDenotTransformer} +import dotty.tools.dotc.core.DenotTransformers.{IdentityDenotTransformer, SymTransformer} import Contexts.Context import Symbols._ import Scopes._ @@ -11,13 +11,16 @@ import Flags._ import StdNames._ import SymDenotations._ import Types._ + import collection.mutable import TreeTransforms._ import Decorators._ import ast.Trees._ import TreeTransforms._ import java.io.File.separatorChar + import ValueClasses._ +import dotty.tools.dotc.core.Phases.Phase /** Make private term members that are accessed from another class * non-private by resetting the Private flag and expanding their name. @@ -38,6 +41,9 @@ class ExpandPrivate extends MiniPhaseTransform with IdentityDenotTransformer { t override def phaseName: String = "expandPrivate" + // This phase moves methods around (in infotransform) so it may need to make other methods public + override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[MoveStatics]) + override def checkPostCondition(tree: Tree)(implicit ctx: Context): Unit = { tree match { case t: DefDef => diff --git a/compiler/src/dotty/tools/dotc/transform/MoveStatics.scala b/compiler/src/dotty/tools/dotc/transform/MoveStatics.scala index 5c2cd3145..b0ee0930d 100644 --- a/compiler/src/dotty/tools/dotc/transform/MoveStatics.scala +++ b/compiler/src/dotty/tools/dotc/transform/MoveStatics.scala @@ -9,6 +9,7 @@ import dotty.tools.dotc.core.Decorators._ import dotty.tools.dotc.core.NameOps._ import dotty.tools.dotc.core.{Flags, Names} import dotty.tools.dotc.core.Names.Name +import dotty.tools.dotc.core.Phases.Phase import dotty.tools.dotc.core.Symbols._ import dotty.tools.dotc.core.Types.MethodType import dotty.tools.dotc.transform.TreeTransforms.{MiniPhaseTransform, TransformerInfo} @@ -19,7 +20,6 @@ class MoveStatics extends MiniPhaseTransform with SymTransformer { thisTransform import tpd._ override def phaseName = "moveStatic" - def transformSym(sym: SymDenotation)(implicit ctx: Context): SymDenotation = { if (sym.hasAnnotation(defn.ScalaStaticAnnot) && sym.owner.is(Flags.Module) && sym.owner.companionClass.exists) { sym.owner.asClass.delete(sym.symbol) |