diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2016-04-18 21:29:41 +0200 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2016-06-07 14:18:27 +0200 |
commit | 27846bb2ba8519decbfe4a152460805e591ec98b (patch) | |
tree | cc47f2808d14453dcecc157e1c560024b34e163b /src/dotty/tools/backend | |
parent | 4ce8ab06470db959aed3527f013a261bc4c3c9a0 (diff) | |
download | dotty-27846bb2ba8519decbfe4a152460805e591ec98b.tar.gz dotty-27846bb2ba8519decbfe4a152460805e591ec98b.tar.bz2 dotty-27846bb2ba8519decbfe4a152460805e591ec98b.zip |
MoveStatic: Move static methods & fields into companion class
As a funny side-effect this allows to execute arbitrary code in static
initialisers:
@static val a: Unit = {println("loaded")}
Diffstat (limited to 'src/dotty/tools/backend')
-rw-r--r-- | src/dotty/tools/backend/jvm/DottyBackendInterface.scala | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala index 002a6bf27..295a419f8 100644 --- a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala +++ b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala @@ -12,7 +12,7 @@ import scala.collection.generic.Clearable import scala.collection.mutable import scala.reflect.ClassTag import scala.reflect.internal.util.WeakHashSet -import scala.reflect.io.{Directory, PlainDirectory, AbstractFile} +import scala.reflect.io.{AbstractFile, Directory, PlainDirectory} import scala.tools.asm.{AnnotationVisitor, ClassVisitor, FieldVisitor, MethodVisitor} import scala.tools.nsc.backend.jvm.{BCodeHelpers, BackendInterface} import dotty.tools.dotc.core._ @@ -24,13 +24,16 @@ import Symbols._ import Denotations._ import Phases._ import java.lang.AssertionError -import dotty.tools.dotc.util.{Positions, DotClass} + +import dotty.tools.dotc.util.{DotClass, Positions} import Decorators._ import tpd._ + import scala.tools.asm import NameOps._ import StdNames.nme import NameOps._ +import dotty.tools.dotc.core class DottyBackendInterface(outputDirectory: AbstractFile)(implicit ctx: Context) extends BackendInterface{ type Symbol = Symbols.Symbol @@ -633,7 +636,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile)(implicit ctx: Context toDenot(sym)(shiftedContext).isStatic(shiftedContext) } - def isStaticConstructor: Boolean = isStaticMember && isClassConstructor + def isStaticConstructor: Boolean = (isStaticMember && isClassConstructor) || (sym.name eq core.Names.STATIC_CONSTRUCTOR) // navigation |