Skip to content

Commit 4354594

Browse files
committed
Change the signature of Class's constructor to take an Object.
This way, the "public" signature of that constructor does not refer to `ScalaJSClassData`, which is an implementation detail of `java.lang.Class`. It is public because it is accessed by the `Emitter`, even though it is declared as private. Note that even though `ScalaJSClassData` as such is an implementation detail, its *structure* must be considered as specified at the interface between the `java.lang` implementation and the linker. If someone wants to write a different linker, or a different `java.lang` library, they must adhere to that structure to ensure interoperability.
1 parent 566efbe commit 4354594

File tree

2 files changed

+4
-3
lines changed
  • javalanglib/src/main/scala/java/lang
  • tools/shared/src/main/scala/org/scalajs/core/tools/linker/backend/emitter

2 files changed

+4
-3
lines changed

javalanglib/src/main/scala/java/lang/Class.scala

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ private trait ScalaJSClassData[A] extends js.Object {
1919
def newArrayOfThisClass(dimensions: js.Array[Int]): AnyRef = js.native
2020
}
2121

22-
final class Class[A] private (private val data: ScalaJSClassData[A])
23-
extends Object {
22+
final class Class[A] private (data0: Object) extends Object {
23+
private val data: ScalaJSClassData[A] =
24+
data0.asInstanceOf[ScalaJSClassData[A]]
2425

2526
override def toString(): String = {
2627
(if (isInterface()) "interface " else

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@ private object Emitter {
675675
instantiateClass("sjsr_UndefinedBehaviorError", "init___T")
676676
},
677677

678-
instantiateClass("jl_Class", "init___jl_ScalaJSClassData"),
678+
instantiateClass("jl_Class", "init___O"),
679679

680680
instanceTests(LongImpl.RuntimeLongClass),
681681
instantiateClass(LongImpl.RuntimeLongClass, LongImpl.AllConstructors),

0 commit comments

Comments
 (0)