diff options
-rw-r--r-- | src/dotty/tools/backend/jvm/GenBCode.scala | 12 | ||||
-rw-r--r-- | src/dotty/tools/dotc/ast/tpd.scala | 1 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/StdNames.scala | 1 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/dotty/tools/backend/jvm/GenBCode.scala b/src/dotty/tools/backend/jvm/GenBCode.scala index a53e910ae..8312a72e7 100644 --- a/src/dotty/tools/backend/jvm/GenBCode.scala +++ b/src/dotty/tools/backend/jvm/GenBCode.scala @@ -6,7 +6,7 @@ import dotty.tools.dotc.ast.tpd import dotty.tools.dotc.core.Phases.Phase import scala.collection.mutable -import scala.tools.asm.{ClassVisitor, MethodVisitor, FieldVisitor} +import scala.tools.asm.{CustomAttr, ClassVisitor, MethodVisitor, FieldVisitor} import scala.tools.nsc.Settings import scala.tools.nsc.backend.jvm._ import dotty.tools.dotc @@ -27,6 +27,7 @@ import scala.tools.asm import scala.tools.asm.tree._ import dotty.tools.dotc.util.{Positions, DotClass} import tpd._ +import StdNames._ import scala.tools.nsc.backend.jvm.opt.LocalOpt @@ -174,6 +175,15 @@ class GenBCodePipeline(val entryPoints: List[Symbol], val int: DottyBackendInter val outF = if (needsOutFolder) getOutFolder(claszSymbol, pcb.thisName) else null; val plainC = pcb.cnode + if ((!claszSymbol.companionClass.exists) || !claszSymbol.is(Flags.Module)) { + // generate TASTY on class if it is there, or on module if it has no companion class + + val binary = ctx.compilationUnit.pickler.assembleParts() + val dataAttr = new CustomAttr(nme.DottyTASTYATTR.toString, binary) + plainC.visitAttribute(dataAttr) + } + + // -------------- bean info class, if needed -------------- val beanC = if (claszSymbol hasAnnotation int.BeanInfoAttr) { diff --git a/src/dotty/tools/dotc/ast/tpd.scala b/src/dotty/tools/dotc/ast/tpd.scala index 955439413..b856e3190 100644 --- a/src/dotty/tools/dotc/ast/tpd.scala +++ b/src/dotty/tools/dotc/ast/tpd.scala @@ -383,6 +383,7 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo { else if (tpw isRef defn.ShortClass) Literal(Constant(0.toShort)) else Literal(Constant(null)).select(defn.Any_asInstanceOf).appliedToType(tpe) } + private class FindLocalDummyAccumulator(cls: ClassSymbol)(implicit ctx: Context) extends TreeAccumulator[Symbol] { def apply(sym: Symbol, tree: Tree)(implicit ctx: Context) = if (sym.exists) sym diff --git a/src/dotty/tools/dotc/core/StdNames.scala b/src/dotty/tools/dotc/core/StdNames.scala index a4471ebb4..1ecc78eb9 100644 --- a/src/dotty/tools/dotc/core/StdNames.scala +++ b/src/dotty/tools/dotc/core/StdNames.scala @@ -215,6 +215,7 @@ object StdNames { final val RuntimeParamAnnotationATTR: N = "RuntimeVisibleParameterAnnotations" // RetentionPolicy.RUNTIME (annotations on parameters) final val ScalaATTR: N = "Scala" final val ScalaSignatureATTR: N = "ScalaSig" + final val DottyTASTYATTR: N = "DottyTASTY" final val SignatureATTR: N = "Signature" final val SourceFileATTR: N = "SourceFile" final val SyntheticATTR: N = "Synthetic" |