KT-752 RangeTo intrinsic called with receiver
This commit is contained in:
@@ -18,16 +18,24 @@ import java.util.List;
|
|||||||
public class RangeTo implements IntrinsicMethod {
|
public class RangeTo 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) {
|
||||||
JetBinaryExpression expression = (JetBinaryExpression) element;
|
if(arguments.size()==1) {
|
||||||
final Type leftType = codegen.expressionType(expression.getLeft());
|
receiver.put(Type.INT_TYPE, v);
|
||||||
if (JetTypeMapper.isIntPrimitive(leftType)) {
|
codegen.gen(arguments.get(0), Type.INT_TYPE);
|
||||||
codegen.gen(expression.getLeft(), Type.INT_TYPE);
|
|
||||||
codegen.gen(expression.getRight(), Type.INT_TYPE);
|
|
||||||
v.invokestatic("jet/IntRange", "rangeTo", "(II)Ljet/IntRange;");
|
v.invokestatic("jet/IntRange", "rangeTo", "(II)Ljet/IntRange;");
|
||||||
return StackValue.onStack(JetTypeMapper.TYPE_INT_RANGE);
|
return StackValue.onStack(JetTypeMapper.TYPE_INT_RANGE);
|
||||||
}
|
}
|
||||||
else {
|
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());
|
// System.out.println(generateToText());
|
||||||
blackBox();
|
blackBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testKt752 () {
|
||||||
|
blackBoxFile("regressions/kt752.jet");
|
||||||
|
System.out.println(generateToText());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user