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