Skip to content

Commit 6927c1a

Browse files
committed
Save TASTY in attribute of classfiles.
1 parent e3449e9 commit 6927c1a

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

src/dotty/tools/backend/jvm/GenBCode.scala

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import dotty.tools.dotc.ast.tpd
66
import dotty.tools.dotc.core.Phases.Phase
77

88
import scala.collection.mutable
9-
import scala.tools.asm.{ClassVisitor, MethodVisitor, FieldVisitor}
9+
import scala.tools.asm.{CustomAttr, ClassVisitor, MethodVisitor, FieldVisitor}
1010
import scala.tools.nsc.Settings
1111
import scala.tools.nsc.backend.jvm._
1212
import dotty.tools.dotc
@@ -27,6 +27,7 @@ import scala.tools.asm
2727
import scala.tools.asm.tree._
2828
import dotty.tools.dotc.util.{Positions, DotClass}
2929
import tpd._
30+
import StdNames._
3031

3132
import scala.tools.nsc.backend.jvm.opt.LocalOpt
3233

@@ -174,6 +175,15 @@ class GenBCodePipeline(val entryPoints: List[Symbol], val int: DottyBackendInter
174175
val outF = if (needsOutFolder) getOutFolder(claszSymbol, pcb.thisName) else null;
175176
val plainC = pcb.cnode
176177

178+
if ((!claszSymbol.companionClass.exists) || !claszSymbol.is(Flags.Module)) {
179+
// generate TASTY on class if it is there, or on module if it has no companion class
180+
181+
val binary = ctx.compilationUnit.pickler.assembleParts()
182+
val dataAttr = new CustomAttr(nme.DottyTASTYATTR.toString, binary)
183+
plainC.visitAttribute(dataAttr)
184+
}
185+
186+
177187
// -------------- bean info class, if needed --------------
178188
val beanC =
179189
if (claszSymbol hasAnnotation int.BeanInfoAttr) {

src/dotty/tools/dotc/ast/tpd.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,7 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
383383
else if (tpw isRef defn.ShortClass) Literal(Constant(0.toShort))
384384
else Literal(Constant(null)).select(defn.Any_asInstanceOf).appliedToType(tpe)
385385
}
386+
386387
private class FindLocalDummyAccumulator(cls: ClassSymbol)(implicit ctx: Context) extends TreeAccumulator[Symbol] {
387388
def apply(sym: Symbol, tree: Tree)(implicit ctx: Context) =
388389
if (sym.exists) sym

src/dotty/tools/dotc/core/StdNames.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ object StdNames {
215215
final val RuntimeParamAnnotationATTR: N = "RuntimeVisibleParameterAnnotations" // RetentionPolicy.RUNTIME (annotations on parameters)
216216
final val ScalaATTR: N = "Scala"
217217
final val ScalaSignatureATTR: N = "ScalaSig"
218+
final val DottyTASTYATTR: N = "DottyTASTY"
218219
final val SignatureATTR: N = "Signature"
219220
final val SourceFileATTR: N = "SourceFile"
220221
final val SyntheticATTR: N = "Synthetic"

0 commit comments

Comments
 (0)