Skip to content

Commit 144c309

Browse files
committed
Add support for -XemitTasty.
It saves tasty output near the class file output to a *.tasty-file.
1 parent 5bcbad2 commit 144c309

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
package dotty.tools.backend.jvm
22

33
import dotty.tools.dotc.CompilationUnit
4-
import dotty.tools.dotc.ast.Trees.{ValDef, PackageDef}
4+
import dotty.tools.dotc.ast.Trees.{PackageDef, ValDef}
55
import dotty.tools.dotc.ast.tpd
66
import dotty.tools.dotc.core.Phases.Phase
77
import dotty.tools.dotc.core.Names.TypeName
88

99
import scala.collection.mutable
10-
import scala.tools.asm.{CustomAttr, ClassVisitor, MethodVisitor, FieldVisitor}
10+
import scala.tools.asm.{ClassVisitor, CustomAttr, FieldVisitor, MethodVisitor}
1111
import scala.tools.nsc.Settings
1212
import scala.tools.nsc.backend.jvm._
1313
import dotty.tools.dotc
1414
import dotty.tools.dotc.backend.jvm.DottyPrimitives
1515
import dotty.tools.dotc.transform.Erasure
16-
1716
import dotty.tools.dotc.interfaces
1817
import java.util.Optional
1918

@@ -27,14 +26,15 @@ import Symbols._
2726
import Denotations._
2827
import Phases._
2928
import java.lang.AssertionError
30-
import java.io.{ File => JFile }
29+
import java.io.{FileOutputStream, File => JFile}
30+
3131
import scala.tools.asm
3232
import scala.tools.asm.tree._
33-
import dotty.tools.dotc.util.{Positions, DotClass}
33+
import dotty.tools.dotc.util.{DotClass, Positions}
3434
import tpd._
3535
import StdNames._
36-
import scala.reflect.io.{Directory, PlainDirectory, AbstractFile}
3736

37+
import scala.reflect.io.{AbstractFile, Directory, PlainDirectory}
3838
import scala.tools.nsc.backend.jvm.opt.LocalOpt
3939

4040
class GenBCode extends Phase {
@@ -205,7 +205,15 @@ class GenBCodePipeline(val entryPoints: List[Symbol], val int: DottyBackendInter
205205
if (claszSymbol.isClass) // @DarkDimius is this test needed here?
206206
for (binary <- ctx.compilationUnit.pickled.get(claszSymbol.asClass)) {
207207
val dataAttr = new CustomAttr(nme.TASTYATTR.toString, binary)
208-
(if (mirrorC ne null) mirrorC else plainC).visitAttribute(dataAttr)
208+
val store = if (mirrorC ne null) mirrorC else plainC
209+
store.visitAttribute(dataAttr)
210+
if (ctx.settings.emitTasty.value) {
211+
val outTastyFile = getFileForClassfile(outF, store.name, ".tasty").file
212+
val fos = new FileOutputStream(outTastyFile, false)
213+
fos.write(binary)
214+
fos.close()
215+
216+
}
209217
}
210218

211219
// -------------- bean info class, if needed --------------

compiler/src/dotty/tools/dotc/config/ScalaSettings.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class ScalaSettings extends Settings.SettingGroup {
5757
/** -X "Advanced" settings
5858
*/
5959
val Xhelp = BooleanSetting("-X", "Print a synopsis of advanced options.")
60+
val emitTasty = BooleanSetting("-XemitTasty", "Generate tasty in separate *.tasty file.")
6061
val assemname = StringSetting("-Xassem-name", "file", "(Requires -target:msil) Name of the output assembly.", "").dependsOn(target, "msil")
6162
val assemrefs = StringSetting("-Xassem-path", "path", "(Requires -target:msil) List of assemblies referenced by the program.", ".").dependsOn(target, "msil")
6263
val assemextdirs = StringSetting("-Xassem-extdirs", "dirs", "(Requires -target:msil) List of directories containing assemblies. default:lib", Defaults.scalaLibDir.path).dependsOn(target, "msil")

0 commit comments

Comments
 (0)