JS: Remove intrinsic for Long.equals, because it's applied incorrectly for nullable longs.
#KT-7500 Fixed
This commit is contained in:
-10
@@ -39,14 +39,6 @@ import java.util.Arrays
|
|||||||
|
|
||||||
object EqualsBOIF : BinaryOperationIntrinsicFactory {
|
object EqualsBOIF : BinaryOperationIntrinsicFactory {
|
||||||
|
|
||||||
val LONG_EQUALS_ANY = pattern("Long.equals")
|
|
||||||
|
|
||||||
private object LONG_EQUALS_ANY_INTRINSIC : AbstractBinaryOperationIntrinsic() {
|
|
||||||
override fun apply(expression: KtBinaryExpression, left: JsExpression, right: JsExpression, context: TranslationContext): JsExpression {
|
|
||||||
val invokeEquals = JsAstUtils.equalsForObject(left, right)
|
|
||||||
return if (expression.isNegated()) JsAstUtils.not(invokeEquals) else invokeEquals
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private object EqualsIntrinsic : AbstractBinaryOperationIntrinsic() {
|
private object EqualsIntrinsic : AbstractBinaryOperationIntrinsic() {
|
||||||
override fun apply(expression: KtBinaryExpression, left: JsExpression, right: JsExpression, context: TranslationContext): JsExpression {
|
override fun apply(expression: KtBinaryExpression, left: JsExpression, right: JsExpression, context: TranslationContext): JsExpression {
|
||||||
@@ -92,8 +84,6 @@ object EqualsBOIF : BinaryOperationIntrinsicFactory {
|
|||||||
|
|
||||||
override fun getIntrinsic(descriptor: FunctionDescriptor): BinaryOperationIntrinsic? =
|
override fun getIntrinsic(descriptor: FunctionDescriptor): BinaryOperationIntrinsic? =
|
||||||
when {
|
when {
|
||||||
(LONG_EQUALS_ANY.apply(descriptor)) -> LONG_EQUALS_ANY_INTRINSIC
|
|
||||||
|
|
||||||
DescriptorUtils.isEnumClass(descriptor.containingDeclaration) -> EnumEqualsIntrinsic
|
DescriptorUtils.isEnumClass(descriptor.containingDeclaration) -> EnumEqualsIntrinsic
|
||||||
|
|
||||||
JsDescriptorUtils.isBuiltin(descriptor) ||
|
JsDescriptorUtils.isBuiltin(descriptor) ||
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package foo
|
package foo
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
|
|
||||||
assertEquals(true, 10L == 10L, "Long == Long")
|
assertEquals(true, 10L == 10L, "Long == Long")
|
||||||
assertEquals(true, 10L != 11L, "Long != Long")
|
assertEquals(true, 10L != 11L, "Long != Long")
|
||||||
|
|
||||||
@@ -10,9 +9,18 @@ fun box(): String {
|
|||||||
assertEquals(false, x1 == null, "Long? == null")
|
assertEquals(false, x1 == null, "Long? == null")
|
||||||
assertEquals(false, null == x1, "null == Long?")
|
assertEquals(false, null == x1, "null == Long?")
|
||||||
assertEquals(true, x1 == 10L, "Long? == Long")
|
assertEquals(true, x1 == 10L, "Long? == Long")
|
||||||
assertEquals(true, 10L == x1, "Long? == Long")
|
assertEquals(true, 10L == x1, "Long == Long?")
|
||||||
assertEquals(true, x1 == x2, "Long? == Long?")
|
assertEquals(true, x1 == x2, "Long? == Long?")
|
||||||
|
|
||||||
|
val x3: Long? = null
|
||||||
|
val x4: Long? = null
|
||||||
|
assertEquals(true, x3 == null, "Long?(null) == null")
|
||||||
|
assertEquals(true, null == x3, "null == Long?(null)")
|
||||||
|
assertEquals(false, x3 == 10L, "Long?(null) == Long")
|
||||||
|
assertEquals(false, 10L == x3, "Long == Long?(null)")
|
||||||
|
assertEquals(false, x3 == x1, "Long?(null) == Long?")
|
||||||
|
assertEquals(true, x3 == x4, "Long?(null) == Long?(null)")
|
||||||
|
|
||||||
val number1: Number = 10L
|
val number1: Number = 10L
|
||||||
val number2: Number = 10L
|
val number2: Number = 10L
|
||||||
assertEquals(true, number1 == number2, "Number == Number")
|
assertEquals(true, number1 == number2, "Number == Number")
|
||||||
@@ -23,9 +31,12 @@ fun box(): String {
|
|||||||
|
|
||||||
val y1: Any = 10L
|
val y1: Any = 10L
|
||||||
var y2: Any = 10
|
var y2: Any = 10
|
||||||
|
var y3: Any? = null
|
||||||
assertEquals(true, y1 == 10L, "Any == Long")
|
assertEquals(true, y1 == 10L, "Any == Long")
|
||||||
assertEquals(true, 10L == y1, "Long == Any 1")
|
assertEquals(true, 10L == y1, "Long == Any 1")
|
||||||
assertEquals(false, 10L == y2, "Long == Any 2")
|
assertEquals(false, 10L == y2, "Long == Any 2")
|
||||||
|
assertEquals(false, 10L == y3, "Long == Any?(null)")
|
||||||
|
assertEquals(true, x3 == y3, "Long?(null) == Any?(null)")
|
||||||
|
|
||||||
return "OK"
|
return "OK"
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user