diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2017-03-07 10:56:41 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2017-03-07 10:56:41 +0100 |
commit | b7c3c3551fd56fb75018f051666edd8558a98d66 (patch) | |
tree | 868b32a732c87559b327d0297fded3ff7764906e /compiler | |
parent | c90ea6b62de5d70f8855b377688f62c40dfe3a66 (diff) | |
download | dotty-b7c3c3551fd56fb75018f051666edd8558a98d66.tar.gz dotty-b7c3c3551fd56fb75018f051666edd8558a98d66.tar.bz2 dotty-b7c3c3551fd56fb75018f051666edd8558a98d66.zip |
Fix #2054: @Static methods may access synthetic private methods stuff
Due to way how we desugar lambdas, we can decide to make a lambda static
Static methods could refer to those lambdas and we need to make
them public
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/src/dotty/tools/dotc/Compiler.scala | 4 | ||||
-rw-r--r-- | compiler/src/dotty/tools/dotc/transform/MoveStatics.scala | 3 |
2 files changed, 5 insertions, 2 deletions
diff --git a/compiler/src/dotty/tools/dotc/Compiler.scala b/compiler/src/dotty/tools/dotc/Compiler.scala index 1d319242b..ef181762d 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/MoveStatics.scala b/compiler/src/dotty/tools/dotc/transform/MoveStatics.scala index 5c2cd3145..2dde8ca31 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,6 +20,8 @@ class MoveStatics extends MiniPhaseTransform with SymTransformer { thisTransform import tpd._ override def phaseName = "moveStatic" + // This phase moves methods around(in infortransform) so it may need to make other methods public + override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[ExpandPrivate]) def transformSym(sym: SymDenotation)(implicit ctx: Context): SymDenotation = { if (sym.hasAnnotation(defn.ScalaStaticAnnot) && sym.owner.is(Flags.Module) && sym.owner.companionClass.exists) { |