Skip to content

Commit 2dd0f68

Browse files
committed
Use JarWriter only when target jar is empty
1 parent cc4acd3 commit 2dd0f68

File tree

3 files changed

+15
-20
lines changed

3 files changed

+15
-20
lines changed

Diff for: compiler/src/dotty/tools/backend/jvm/GenBCode.scala

+3-4
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ class GenBCode extends Phase { self =>
2222
superCallsMap.update(sym, old + calls)
2323
}
2424

25-
private[jvm] val entryPoints = new mutable.HashSet[String]()
26-
def registerEntryPoint(s: String): Unit =
27-
entryPoints += s
25+
private val entryPoints = new mutable.HashSet[String]()
26+
def registerEntryPoint(s: String): Unit = entryPoints += s
2827

2928
private var _backendInterface: DottyBackendInterface = _
3029
def backendInterface(using ctx: Context): DottyBackendInterface = {
@@ -56,7 +55,7 @@ class GenBCode extends Phase { self =>
5655
private var _frontendAccess: PostProcessorFrontendAccess = _
5756
def frontendAccess(using Context): PostProcessorFrontendAccess = {
5857
if _frontendAccess eq null then
59-
_frontendAccess = PostProcessorFrontendAccess.Impl(backendInterface)
58+
_frontendAccess = PostProcessorFrontendAccess.Impl(backendInterface, entryPoints)
6059
_frontendAccess
6160
}
6261

Diff for: compiler/src/dotty/tools/backend/jvm/PostProcessor.scala

+4-7
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class PostProcessor(val frontendAccess: PostProcessorFrontendAccess, val bTypes:
1818
import int.given
1919

2020
val backendUtils = new BackendUtils(this)
21-
lazy val classfileWriter = ClassfileWriter(frontendAccess)
21+
val classfileWriter = ClassfileWriter(frontendAccess)
2222

2323
def postProcessAndSendToDisk(generatedDefs: GeneratedDefs): Unit = {
2424
val GeneratedDefs(classes, tasty) = generatedDefs
@@ -30,21 +30,18 @@ class PostProcessor(val frontendAccess: PostProcessorFrontendAccess, val bTypes:
3030
serializeClass(classNode)
3131
catch
3232
case e: java.lang.RuntimeException if e.getMessage != null && e.getMessage.nn.contains("too large!") =>
33-
backendReporting.error(
34-
s"Could not write class ${classNode.name} because it exceeds JVM code size limits. ${e.getMessage}",
35-
NoSourcePosition
36-
)
33+
backendReporting.error(s"Could not write class ${classNode.name} because it exceeds JVM code size limits. ${e.getMessage}")
3734
null
3835
case ex: Throwable =>
3936
ex.printStackTrace()
40-
backendReporting.error(s"Error while emitting ${classNode.name}\n${ex.getMessage}",NoSourcePosition)
37+
backendReporting.error(s"Error while emitting ${classNode.name}\n${ex.getMessage}")
4138
null
4239

4340
if (bytes != null) {
4441
if (AsmUtils.traceSerializedClassEnabled && classNode.name.nn.contains(AsmUtils.traceSerializedClassPattern))
4542
AsmUtils.traceClass(bytes)
4643

47-
val clsFile = classfileWriter.write(classNode.name.nn, bytes, sourceFile)
44+
val clsFile = classfileWriter.writeClass(classNode.name.nn, bytes, sourceFile)
4845
if clsFile != null then onFileCreated(clsFile)
4946
}
5047
}

Diff for: compiler/src/dotty/tools/backend/jvm/PostProcessorFrontendAccess.scala

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package dotty.tools.backend.jvm
22

3-
import scala.collection.mutable.Clearable
3+
import scala.collection.mutable.{Clearable, HashSet}
44
import dotty.tools.dotc.util.*
55
import dotty.tools.io.AbstractFile
66
import java.util.{Collection => JCollection, Map => JMap}
@@ -20,7 +20,7 @@ sealed abstract class PostProcessorFrontendAccess {
2020
def getEntryPoints: List[String]
2121

2222
private val frontendLock: AnyRef = new Object()
23-
@inline final def frontendSynch[T](x: => T): T = frontendLock.synchronized(x)
23+
inline final def frontendSynch[T](inline x: => T): T = frontendLock.synchronized(x)
2424
}
2525

2626
object PostProcessorFrontendAccess {
@@ -35,11 +35,12 @@ object PostProcessorFrontendAccess {
3535
}
3636

3737
sealed trait BackendReporting {
38-
def error(message: String, pos: SourcePosition): Unit
38+
def error(message: String): Unit
39+
def warning(message: String): Unit
3940
def log(message: String): Unit
4041
}
4142

42-
class Impl[I <: DottyBackendInterface](val int: I) extends PostProcessorFrontendAccess {
43+
class Impl[I <: DottyBackendInterface](val int: I, entryPoints: HashSet[String]) extends PostProcessorFrontendAccess {
4344
import int.given
4445
lazy val compilerSettings: CompilerSettings = buildCompilerSettings()
4546

@@ -67,13 +68,11 @@ object PostProcessorFrontendAccess {
6768
}
6869

6970
object backendReporting extends BackendReporting {
70-
def error(message: String, pos: SourcePosition): Unit = frontendSynch(report.error(message, pos))
71+
def error(message: String): Unit = frontendSynch(report.error(message, NoSourcePosition))
72+
def warning(message: String): Unit = frontendSynch(report.warning(message, NoSourcePosition))
7173
def log(message: String): Unit = frontendSynch(report.log(message))
7274
}
7375

74-
def getEntryPoints: List[String] = frontendSynch(Phases.genBCodePhase match {
75-
case genBCode: GenBCode => genBCode.entryPoints.toList
76-
case _ => Nil
77-
})
76+
def getEntryPoints: List[String] = frontendSynch(entryPoints.toList)
7877
}
7978
}

0 commit comments

Comments
 (0)