From 813bee62e5fbf772071410b6c5c066bc225db0be Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Thu, 25 Aug 2016 04:27:20 +0300 Subject: [PATCH] JS: Remove intrinsic for Long.equals, because it's applied incorrectly for nullable longs. #KT-7500 Fixed --- .../translate/intrinsic/operation/EqualsBOIF.kt | 10 ---------- .../testData/number/cases/longEqualsIntrinsic.kt | 15 +++++++++++++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt index 614bf2e2a2c..3e058e61bba 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt @@ -39,14 +39,6 @@ import java.util.Arrays 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() { 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? = when { - (LONG_EQUALS_ANY.apply(descriptor)) -> LONG_EQUALS_ANY_INTRINSIC - DescriptorUtils.isEnumClass(descriptor.containingDeclaration) -> EnumEqualsIntrinsic JsDescriptorUtils.isBuiltin(descriptor) || diff --git a/js/js.translator/testData/number/cases/longEqualsIntrinsic.kt b/js/js.translator/testData/number/cases/longEqualsIntrinsic.kt index 643d6c18b8f..31e643d63a9 100644 --- a/js/js.translator/testData/number/cases/longEqualsIntrinsic.kt +++ b/js/js.translator/testData/number/cases/longEqualsIntrinsic.kt @@ -1,7 +1,6 @@ package foo fun box(): String { - assertEquals(true, 10L == 10L, "Long == Long") assertEquals(true, 10L != 11L, "Long != Long") @@ -10,9 +9,18 @@ fun box(): String { assertEquals(false, x1 == null, "Long? == null") assertEquals(false, null == x1, "null == 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?") + 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 number2: Number = 10L assertEquals(true, number1 == number2, "Number == Number") @@ -23,9 +31,12 @@ fun box(): String { val y1: Any = 10L var y2: Any = 10 + var y3: Any? = null assertEquals(true, y1 == 10L, "Any == Long") assertEquals(true, 10L == y1, "Long == Any 1") assertEquals(false, 10L == y2, "Long == Any 2") + assertEquals(false, 10L == y3, "Long == Any?(null)") + assertEquals(true, x3 == y3, "Long?(null) == Any?(null)") return "OK" } \ No newline at end of file