Skip to content

Commit 835bdb4

Browse files
authored
Use dedicated equals method for univerval equality of chars (#18770)
Uses `BoxesRunTime.equalsNumChar` instead of `BoxesRunTime.equalsNumObject` for boxed Char universal equality checks. This method was private in Scala 2.11, but is available since 2.12 allowing us to better optimize universal equality checks made with `Char` Change was reflected in both JVM and JS backend (also the test sources)
2 parents 93a2924 + 733b8bb commit 835bdb4

File tree

4 files changed

+6
-6
lines changed

4 files changed

+6
-6
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1684,7 +1684,7 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
16841684
val equalsMethod: Symbol = {
16851685
if (l.tpe <:< defn.BoxedNumberClass.info) {
16861686
if (r.tpe <:< defn.BoxedNumberClass.info) defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumNum)
1687-
else if (r.tpe <:< defn.BoxedCharClass.info) NoSymbol // ctx.requiredMethod(BoxesRunTimeTypeRef, nme.equalsNumChar) // this method is private
1687+
else if (r.tpe <:< defn.BoxedCharClass.info) defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumChar)
16881688
else defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumObject)
16891689
} else defn.BoxesRunTimeModule_externalEquals
16901690
}

Diff for: compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -2845,7 +2845,7 @@ class JSCodeGen()(using genCtx: Context) {
28452845
private lazy val externalEqualsNumNum: Symbol =
28462846
defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumNum)
28472847
private lazy val externalEqualsNumChar: Symbol =
2848-
NoSymbol // requiredMethod(BoxesRunTimeTypeRef, nme.equalsNumChar) // this method is private
2848+
defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumChar)
28492849
private lazy val externalEqualsNumObject: Symbol =
28502850
defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumObject)
28512851
private lazy val externalEquals: Symbol =
@@ -2885,7 +2885,7 @@ class JSCodeGen()(using genCtx: Context) {
28852885
val ptfm = ctx.platform
28862886
if (lsym.derivesFrom(defn.BoxedNumberClass)) {
28872887
if (rsym.derivesFrom(defn.BoxedNumberClass)) externalEqualsNumNum
2888-
else if (rsym.derivesFrom(defn.BoxedCharClass)) externalEqualsNumObject // will be externalEqualsNumChar in 2.12, SI-9030
2888+
else if (rsym.derivesFrom(defn.BoxedCharClass)) externalEqualsNumChar
28892889
else externalEqualsNumObject
28902890
} else externalEquals
28912891
}

Diff for: tests/pos-with-compiler-cc/backend/jvm/BCodeBodyBuilder.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1622,7 +1622,7 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
16221622
val equalsMethod: Symbol = {
16231623
if (l.tpe <:< defn.BoxedNumberClass.info) {
16241624
if (r.tpe <:< defn.BoxedNumberClass.info) defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumNum)
1625-
else if (r.tpe <:< defn.BoxedCharClass.info) NoSymbol // ctx.requiredMethod(BoxesRunTimeTypeRef, nme.equalsNumChar) // this method is private
1625+
else if (r.tpe <:< defn.BoxedCharClass.info) defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumChar)
16261626
else defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumObject)
16271627
} else defn.BoxesRunTimeModule_externalEquals
16281628
}

Diff for: tests/pos-with-compiler-cc/backend/sjs/JSCodeGen.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -2846,7 +2846,7 @@ class JSCodeGen()(using genCtx: DetachedContext) {
28462846
private lazy val externalEqualsNumNum: Symbol =
28472847
defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumNum)
28482848
private lazy val externalEqualsNumChar: Symbol =
2849-
NoSymbol // requiredMethod(BoxesRunTimeTypeRef, nme.equalsNumChar) // this method is private
2849+
defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumChar)
28502850
private lazy val externalEqualsNumObject: Symbol =
28512851
defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumObject)
28522852
private lazy val externalEquals: Symbol =
@@ -2886,7 +2886,7 @@ class JSCodeGen()(using genCtx: DetachedContext) {
28862886
val ptfm = ctx.platform
28872887
if (lsym.derivesFrom(defn.BoxedNumberClass)) {
28882888
if (rsym.derivesFrom(defn.BoxedNumberClass)) externalEqualsNumNum
2889-
else if (rsym.derivesFrom(defn.BoxedCharClass)) externalEqualsNumObject // will be externalEqualsNumChar in 2.12, SI-9030
2889+
else if (rsym.derivesFrom(defn.BoxedCharClass)) externalEqualsNumChar
28902890
else externalEqualsNumObject
28912891
} else externalEquals
28922892
}

0 commit comments

Comments
 (0)