KT-1055 wrong identityEquals codegen
This commit is contained in:
@@ -21,10 +21,11 @@ import java.util.List;
|
||||
public class Equals implements IntrinsicMethod {
|
||||
@Override
|
||||
public StackValue generate(ExpressionCodegen codegen, InstructionAdapter v, Type expectedType, PsiElement element, List<JetExpression> arguments, StackValue receiver) {
|
||||
receiver.put(JetTypeMapper.TYPE_OBJECT, v);
|
||||
|
||||
boolean leftNullable = true;
|
||||
JetExpression rightExpr;
|
||||
if(element instanceof JetCallExpression) {
|
||||
receiver.put(JetTypeMapper.TYPE_OBJECT, v);
|
||||
JetCallExpression jetCallExpression = (JetCallExpression) element;
|
||||
JetExpression calleeExpression = jetCallExpression.getCalleeExpression();
|
||||
if(calleeExpression != null) {
|
||||
@@ -32,9 +33,15 @@ public class Equals implements IntrinsicMethod {
|
||||
if(leftType != null)
|
||||
leftNullable = leftType.isNullable();
|
||||
}
|
||||
rightExpr = arguments.get(0);
|
||||
}
|
||||
|
||||
JetExpression rightExpr = arguments.get(0);
|
||||
else {
|
||||
JetExpression leftExpr = arguments.get(0);
|
||||
leftNullable = codegen.getBindingContext().get(BindingContext.EXPRESSION_TYPE, leftExpr).isNullable();
|
||||
codegen.gen(leftExpr).put(JetTypeMapper.TYPE_OBJECT, v);
|
||||
rightExpr = arguments.get(1);
|
||||
}
|
||||
|
||||
JetType rightType = codegen.getBindingContext().get(BindingContext.EXPRESSION_TYPE, rightExpr);
|
||||
codegen.gen(rightExpr).put(JetTypeMapper.TYPE_OBJECT, v);
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
fun box() : String {
|
||||
val a = "lala"
|
||||
if(!a.identityEquals(a)) return "fail 1"
|
||||
if(a identityEquals a) return "OK"
|
||||
return "fail 2"
|
||||
}
|
||||
@@ -391,4 +391,8 @@ public class PrimitiveTypesTest extends CodegenTestCase {
|
||||
public void testKt935 () {
|
||||
blackBoxFile("regressions/kt935.kt");
|
||||
}
|
||||
|
||||
public void testKt1055 () {
|
||||
blackBoxFile("regressions/kt1055.kt");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user