Generate complex equality comparison only when RHS can have side effects
In "short" version, LHS is always evaluated before RHS, and RHS may be not evaluated if LHS is null. So, it makes sense to use "short" version in cases when RHS can't have side effects (because of more compact bytecode and more opportunities for code elimination).
This commit is contained in:
compiler/testData/codegen/box/primitiveTypes/equalityWithNullable/boxedEqPrimitiveEvaluationOrder.kt
Vendored
+8
@@ -17,10 +17,18 @@ inline fun evaluateAndCheckOrder(marker: String, expectedValue: Boolean, expecte
|
||||
if (order != expectedOrder) throw AssertionError("$marker, order: Expected: '$expectedOrder', actual: '$order'")
|
||||
}
|
||||
|
||||
val nn: Int? = null
|
||||
|
||||
fun box(): String {
|
||||
evaluateAndCheckOrder("1", true, "ab") { a(1) == b(1) }
|
||||
evaluateAndCheckOrder("2", true, "ab") { a(1) != b(2) }
|
||||
evaluateAndCheckOrder("3", true, "ab") { !(a(1) == b(2)) }
|
||||
evaluateAndCheckOrder("4", true, "ab") { !(a(1) != b(1)) }
|
||||
|
||||
evaluateAndCheckOrder("null == 1", false, "a") { nn == a(1) }
|
||||
evaluateAndCheckOrder("null != 1", true, "a") { nn != a(1) }
|
||||
evaluateAndCheckOrder("!(null == 1)", true, "a") { !(nn == a(1)) }
|
||||
evaluateAndCheckOrder("!(null != 1)", false, "a") { !(nn != a(1)) }
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user