Skip to content

Commit 8e94b6b

Browse files
committed
Scala.js: Implement the primitive js.special.strictEquals.
1 parent 79de04e commit 8e94b6b

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2812,6 +2812,11 @@ class JSCodeGen()(using genCtx: Context) {
28122812
val arg = genArgs1
28132813
genAsInstanceOf(js.JSUnaryOp(js.JSUnaryOp.typeof, arg), defn.StringType)
28142814

2815+
case STRICT_EQ =>
2816+
// js.special.strictEquals(arg1, arg2)
2817+
val (arg1, arg2) = genArgs2
2818+
js.JSBinaryOp(js.JSBinaryOp.===, arg1, arg2)
2819+
28152820
case IN =>
28162821
// js.special.in(arg1, arg2)
28172822
val (arg1, arg2) = genArgs2

compiler/src/dotty/tools/backend/sjs/JSDefinitions.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ final class JSDefinitions()(using Context) {
154154
def Special_in(using Context) = Special_inR.symbol
155155
@threadUnsafe lazy val Special_instanceofR = SpecialPackageClass.requiredMethodRef("instanceof")
156156
def Special_instanceof(using Context) = Special_instanceofR.symbol
157+
@threadUnsafe lazy val Special_strictEqualsR = SpecialPackageClass.requiredMethodRef("strictEquals")
158+
def Special_strictEquals(using Context) = Special_strictEqualsR.symbol
157159

158160
@threadUnsafe lazy val WrappedArrayType: TypeRef = requiredClassRef("scala.scalajs.js.WrappedArray")
159161
def WrappedArrayClass(using Context) = WrappedArrayType.symbol.asClass

compiler/src/dotty/tools/backend/sjs/JSPrimitives.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,12 @@ object JSPrimitives {
3232
final val WITH_CONTEXTUAL_JS_CLASS_VALUE = CREATE_LOCAL_JS_CLASS + 1 // runtime.withContextualJSClassValue
3333
final val LINKING_INFO = WITH_CONTEXTUAL_JS_CLASS_VALUE + 1 // runtime.linkingInfo
3434

35-
final val IN = LINKING_INFO + 1 // js.special.in
36-
final val INSTANCEOF = IN + 1 // js.special.instanceof
37-
final val DELETE = INSTANCEOF + 1 // js.special.delete
38-
final val FORIN = DELETE + 1 // js.special.forin
39-
final val DEBUGGER = FORIN + 1 // js.special.debugger
35+
final val STRICT_EQ = LINKING_INFO + 1 // js.special.strictEquals
36+
final val IN = STRICT_EQ + 1 // js.special.in
37+
final val INSTANCEOF = IN + 1 // js.special.instanceof
38+
final val DELETE = INSTANCEOF + 1 // js.special.delete
39+
final val FORIN = DELETE + 1 // js.special.forin
40+
final val DEBUGGER = FORIN + 1 // js.special.debugger
4041

4142
final val THROW = DEBUGGER + 1
4243

@@ -107,6 +108,7 @@ class JSPrimitives(ictx: Context) extends DottyPrimitives(ictx) {
107108
addPrimitive(jsdefn.Runtime_withContextualJSClassValue, WITH_CONTEXTUAL_JS_CLASS_VALUE)*/
108109
addPrimitive(jsdefn.Runtime_linkingInfo, LINKING_INFO)
109110

111+
addPrimitive(jsdefn.Special_strictEquals, STRICT_EQ)
110112
addPrimitive(jsdefn.Special_in, IN)
111113
addPrimitive(jsdefn.Special_instanceof, INSTANCEOF)
112114
addPrimitive(jsdefn.Special_delete, DELETE)

project/Build.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,7 +1075,7 @@ object Build {
10751075
++ (dir / "js/src/test/scala/org/scalajs/testsuite/javalib" ** (("*.scala": FileFilter)
10761076
-- "FormatterJSTest.scala" // compile error with the f"" interpolator
10771077
-- "ObjectJSTest.scala" // non-native JS classes
1078-
-- "ThrowableJSTest.scala" // test fails ("java.lang.Error: stub")
1078+
-- "ThrowableJSTest.scala" // test fails ("java.lang.Error: stub") because it uses js.constructorOf
10791079
)).get
10801080

10811081
++ (dir / "js/src/test/scala/org/scalajs/testsuite/jsinterop" ** (("*.scala": FileFilter)
@@ -1092,7 +1092,7 @@ object Build {
10921092
-- "NestedJSClassTest.scala" // non-native JS classes
10931093
-- "NonNativeJSTypeTest.scala" // non-native JS classes
10941094
-- "PromiseMock.scala" // non-native JS classes
1095-
-- "SpecialTest.scala" // not yet implemented JS-specific primitive
1095+
-- "SpecialTest.scala" // test fails ("java.lang.Error: stub") because it uses js.constructorOf
10961096
)).get
10971097

10981098
++ (dir / "js/src/test/scala/org/scalajs/testsuite/junit" ** (("*.scala": FileFilter)

0 commit comments

Comments
 (0)