8000 Do not retain the entire ClassDef in the IRCleaner · scala-wasm/scala-wasm@8a35205 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8a35205

Browse files
committed
Do not retain the entire ClassDef in the IRCleaner
We only need the load spec, this allows memory to be freed up more eagerly.
1 parent 4e32fa7 commit 8a35205

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

project/JavalibIRCleaner.scala

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ import sbt.{Logger, MessageOnlyException}
4545
final class JavalibIRCleaner(baseDirectoryURI: URI) {
4646
import JavalibIRCleaner._
4747

48+
type JSTypes = Map[ClassName, Option[JSNativeLoadSpec]]
49+
4850
def cleanIR(dependencyFiles: Seq[File], libFileMappings: Seq[(File, File)],
4951
logger: Logger): Set[File] = {
5052

@@ -155,19 +157,19 @@ final class JavalibIRCleaner(baseDirectoryURI: URI) {
155157
}
156158
}
157159

158-
private def getJSTypes(trees: Stream[ClassDef]): Map[ClassName, ClassDef] = {
159-
trees.filter(_.kind.isJSType).reduce[Map[ClassName, ClassDef]](
160-
Map.empty, (m, v) => m.updated(v.className, v), _ ++ _)
160+
private def getJSTypes(trees: Stream[ClassDef]): JSTypes = {
161+
trees.filter(_.kind.isJSType).reduce[JSTypes](
162+
Map.empty, (m, v) => m.updated(v.className, v.jsNativeLoadSpec), _ ++ _)
161163
}
162164

163-
private def cleanTree(tree: ClassDef, jsTypes: Map[ClassName, ClassDef],
165+
private def cleanTree(tree: ClassDef, jsTypes: JSTypes,
164166
errorManager: ErrorManager): ClassDef = {
165167
new ClassDefCleaner(tree.className, jsTypes, errorManager)
166168
.cleanClassDef(tree)
167169
}
168170

169171
private final class ClassDefCleaner(enclosingClassName: ClassName,
170-
jsTypes: Map[ClassName, ClassDef], errorManager: ErrorManager)
172+
jsTypes: JSTypes, errorManager: ErrorManager)
171173
extends Transformers.ClassTransformer {
172174

173175
def cleanClassDef(tree: ClassDef): ClassDef = {
@@ -496,16 +498,13 @@ final class JavalibIRCleaner(baseDirectoryURI: URI) {
496498
private def genLoadFromLoadSpecOf(className: ClassName)(
497499
implicit pos: Position): Tree = {
498500
jsTypes.get(className) match {
499-
case Some(classDef) =>
500-
classDef.jsNativeLoadSpec match {
501-
case Some(loadSpec) =>
502-
genLoadFromLoadSpec(loadSpec)
503-
case None =>
504-
reportError(
505-
s"${className.nameString} does not have a load spec " +
506-
"(this shouldn't have happened at all; bug in the compiler?)")
507-
JSGlobalRef("Object")
508-
}
501+
case Some(Some(loadSpec)) =>
502+
genLoadFromLoadSpec(loadSpec)
503+
case Some(None) =>
504+
reportError(
505+
s"${className.nameString} does not have a load spec " +
506+
"(this shouldn't have happened at all; bug in the compiler?)")
507+
JSGlobalRef("Object")
509508
case None =>
510509
reportError(s"${className.nameString} is not a JS type")
511510
JSGlobalRef("Object")

0 commit comments

Comments
 (0)
0