From 76d11330ee95f504da86c4ed18ec23b532759651 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 13 Jan 2015 16:14:10 +0300 Subject: [PATCH] Fix === comparison for primitive types #KT-6590 Fixed --- .../org/jetbrains/kotlin/codegen/StackValue.java | 4 ++-- .../box/primitiveTypes/kt6590_identityEquals.kt | 15 +++++++++++++++ .../generated/BlackBoxCodegenTestGenerated.java | 6 ++++++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/box/primitiveTypes/kt6590_identityEquals.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java index bdf9a455b5c..7218c24d257 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java @@ -664,10 +664,10 @@ public abstract class StackValue { left.put(this.operandType, v); right.put(this.operandType, v); int opcode; - if (opToken == JetTokens.EQEQ) { + if (opToken == JetTokens.EQEQ || opToken == JetTokens.EQEQEQ) { opcode = jumpIfFalse ? IFNE : IFEQ; } - else if (opToken == JetTokens.EXCLEQ) { + else if (opToken == JetTokens.EXCLEQ || opToken == JetTokens.EXCLEQEQEQ) { opcode = jumpIfFalse ? IFEQ : IFNE; } else if (opToken == JetTokens.GT) { diff --git a/compiler/testData/codegen/box/primitiveTypes/kt6590_identityEquals.kt b/compiler/testData/codegen/box/primitiveTypes/kt6590_identityEquals.kt new file mode 100644 index 00000000000..f21a8f1f6a7 --- /dev/null +++ b/compiler/testData/codegen/box/primitiveTypes/kt6590_identityEquals.kt @@ -0,0 +1,15 @@ +fun box(): String { + val i: Int = 10000 + if (!(i === i)) return "Fail int ===" + if (i !== i) return "Fail int !==" + + val j: Long = 123L + if (!(j === j)) return "Fail long ===" + if (j !== j) return "Fail long !==" + + val d: Double = 3.14 + if (!(d === d)) return "Fail double ===" + if (d !== d) return "Fail double !==" + + return "OK" +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java index e6c2a55eb5a..a621b5c076f 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -5550,6 +5550,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("kt6590_identityEquals.kt") + public void testKt6590_identityEquals() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/primitiveTypes/kt6590_identityEquals.kt"); + doTest(fileName); + } + @TestMetadata("kt665.kt") public void testKt665() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/primitiveTypes/kt665.kt");