KT-1055 wrong identityEquals codegen

This commit is contained in:
Alex Tkachman
2012-01-18 17:34:48 +01:00
parent 4521a26350
commit 01b405c86a
3 changed files with 20 additions and 3 deletions
@@ -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");
}
}