KT-752 RangeTo intrinsic called with receiver

This commit is contained in:
Alex Tkachman
2011-12-05 16:55:17 +02:00
parent fedef4796a
commit 91549ed359
3 changed files with 31 additions and 6 deletions
@@ -18,16 +18,24 @@ import java.util.List;
public class RangeTo implements IntrinsicMethod {
@Override
public StackValue generate(ExpressionCodegen codegen, InstructionAdapter v, Type expectedType, PsiElement element, List<JetExpression> arguments, StackValue receiver) {
JetBinaryExpression expression = (JetBinaryExpression) element;
final Type leftType = codegen.expressionType(expression.getLeft());
if (JetTypeMapper.isIntPrimitive(leftType)) {
codegen.gen(expression.getLeft(), Type.INT_TYPE);
codegen.gen(expression.getRight(), Type.INT_TYPE);
if(arguments.size()==1) {
receiver.put(Type.INT_TYPE, v);
codegen.gen(arguments.get(0), Type.INT_TYPE);
v.invokestatic("jet/IntRange", "rangeTo", "(II)Ljet/IntRange;");
return StackValue.onStack(JetTypeMapper.TYPE_INT_RANGE);
}
else {
throw new UnsupportedOperationException("ranges are only supported for int objects");
JetBinaryExpression expression = (JetBinaryExpression) element;
final Type leftType = codegen.expressionType(expression.getLeft());
if (JetTypeMapper.isIntPrimitive(leftType)) {
codegen.gen(expression.getLeft(), Type.INT_TYPE);
codegen.gen(expression.getRight(), Type.INT_TYPE);
v.invokestatic("jet/IntRange", "rangeTo", "(II)Ljet/IntRange;");
return StackValue.onStack(JetTypeMapper.TYPE_INT_RANGE);
}
else {
throw new UnsupportedOperationException("ranges are only supported for int objects");
}
}
}
}
@@ -0,0 +1,12 @@
namespace demo_range
fun Int?.rangeTo(other : Int?) : IntRange = this.sure().rangeTo(other.sure())
fun box() : String {
val x : Int? = 10
val y : Int? = 12
for (i in x..y)
System.out?.println(i.inv())
return "OK"
}
@@ -337,4 +337,9 @@ public class PrimitiveTypesTest extends CodegenTestCase {
// System.out.println(generateToText());
blackBox();
}
public void testKt752 () {
blackBoxFile("regressions/kt752.jet");
System.out.println(generateToText());
}
}