Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 27bd1b8

Browse files
authored
Merge pull request #4960 from sjrd/linkedclass-hasdirectinstances
Add LinkedClass.hasDirectInstances.
2 parents b80004e + f05baed commit 27bd1b8

File tree

5 files changed

+9
-4
lines changed

5 files changed

+9
-4
lines changed

linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/ClassEmitter.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,7 @@ private[emitter] final class ClassEmitter(sjsGen: SJSGen) {
826826

827827
def genTypeData(className: ClassName, kind: ClassKind,
828828
superClass: Option[ClassIdent], ancestors: List[ClassName],
829-
jsNativeLoadSpec: Option[JSNativeLoadSpec], hasInstances: Boolean)(
829+
jsNativeLoadSpec: Option[JSNativeLoadSpec], hasDirectInstances: Boolean)(
830830
implicit moduleContext: ModuleContext,
831831
globalKnowledge: GlobalKnowledge, pos: Position): WithGlobals[List[js.Tree]] = {
832832
import TreeDSL._
@@ -847,7 +847,7 @@ private[emitter] final class ClassEmitter(sjsGen: SJSGen) {
847847
val kindOrCtorParam = {
848848
if (isJSType) js.IntLiteral(2)
849849
else if (kind == ClassKind.Interface) js.IntLiteral(1)
850-
else if (kind.isClass && hasInstances) globalVar(VarField.c, className)
850+
else if (kind.isClass && hasDirectInstances) globalVar(VarField.c, className)
851851
else js.IntLiteral(0)
852852
}
853853

linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/Emitter.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -716,14 +716,14 @@ final class Emitter[E >: Null <: js.Tree](
716716

717717
if (linkedClass.hasRuntimeTypeInfo) {
718718
main ++= extractWithGlobals(classTreeCache.typeData.getOrElseUpdate(
719-
linkedClass.hasInstances,
719+
linkedClass.hasDirectInstances,
720720
classEmitter.genTypeData(
721721
className, // invalidated by overall class cache (part of ancestors)
722722
kind, // invalidated by class version
723723
linkedClass.superClass, // invalidated by class version
724724
linkedClass.ancestors, // invalidated by overall class cache (identity)
725725
linkedClass.jsNativeLoadSpec, // invalidated by class version
726-
linkedClass.hasInstances // invalidated directly (it is the input to `getOrElseUpdate`)
726+
linkedClass.hasDirectInstances // invalidated directly (it is the input to `getOrElseUpdate`)
727727
)(moduleContext, classCache, linkedClass.pos).map(postTransform(_, 0))))
728728
}
729729
}

linker/shared/src/main/scala/org/scalajs/linker/frontend/BaseLinker.scala

+1
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ private[frontend] object BaseLinker {
166166
classDef.pos,
167167
ancestors.toList,
168168
hasInstances = classInfo.isAnySubclassInstantiated,
169+
hasDirectInstances = classInfo.isInstantiated,
169170
hasInstanceTests = classInfo.areInstanceTestsUsed,
170171
hasRuntimeTypeInfo = classInfo.isDataAccessed,
171172
fieldsRead = classInfo.fieldsRead.toSet,

linker/shared/src/main/scala/org/scalajs/linker/standard/LinkedClass.scala

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ final class LinkedClass(
5555
// Actual Linking info
5656
val ancestors: List[ClassName],
5757
val hasInstances: Boolean,
58+
val hasDirectInstances: Boolean,
5859
val hasInstanceTests: Boolean,
5960
val hasRuntimeTypeInfo: Boolean,
6061
val fieldsRead: Set[FieldName],

project/BinaryIncompatibilities.scala

+3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ object BinaryIncompatibilities {
2424
)
2525

2626
val Linker = Seq(
27+
// !!! Breaking, OK in minor release
28+
ProblemFilters.exclude[DirectMissingMethodProblem]("org.scalajs.linker.standard.LinkedClass.this"),
29+
2730
// private, not an issue
2831
ProblemFilters.exclude[DirectMissingMethodProblem]("org.scalajs.linker.standard.CommonPhaseConfig.this"),
2932
)

0 commit comments

Comments
 (0)