Restore accidentally removed parameter index passing to call generator
Parameter index was removed in
7690a8bc3e commit:
"Get rid of redundant 'afterParameterPut' method from call generators"
#KT-17653 Fixed
This commit is contained in:
@@ -64,7 +64,7 @@ public class CallBasedArgumentGenerator extends ArgumentGenerator {
|
||||
|
||||
@Override
|
||||
protected void generateDefault(int i, @NotNull DefaultValueArgument argument) {
|
||||
callGenerator.putValueIfNeeded(valueParameterTypes.get(i), createDefaulValue(valueParameterTypes.get(i)), ValueKind.DEFAULT_PARAMETER);
|
||||
callGenerator.putValueIfNeeded(valueParameterTypes.get(i), createDefaulValue(valueParameterTypes.get(i)), ValueKind.DEFAULT_PARAMETER, i);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -73,7 +73,7 @@ public class CallBasedArgumentGenerator extends ArgumentGenerator {
|
||||
// Upper bound for type of vararg parameter should always have a form of 'Array<out T>',
|
||||
// while its lower bound may be Nothing-typed after approximation
|
||||
StackValue lazyVararg = codegen.genVarargs(argument, FlexibleTypesKt.upperIfFlexible(parameter.getType()));
|
||||
callGenerator.putValueIfNeeded(valueParameterTypes.get(i), lazyVararg);
|
||||
callGenerator.putValueIfNeeded(valueParameterTypes.get(i), lazyVararg, ValueKind.GENERAL_VARARG, i);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,10 +23,11 @@ import org.jetbrains.org.objectweb.asm.Type
|
||||
|
||||
enum class ValueKind {
|
||||
GENERAL,
|
||||
GENERAL_VARARG,
|
||||
DEFAULT_PARAMETER,
|
||||
DEFAULT_MASK,
|
||||
METHOD_HANDLE_IN_DEFAULT,
|
||||
CAPTURED
|
||||
CAPTURED,
|
||||
}
|
||||
|
||||
abstract class CallGenerator {
|
||||
@@ -68,7 +69,7 @@ abstract class CallGenerator {
|
||||
stackValue.put(stackValue.type, codegen.v)
|
||||
}
|
||||
|
||||
override fun putValueIfNeeded(parameterType: Type, value: StackValue, kind: ValueKind) {
|
||||
override fun putValueIfNeeded(parameterType: Type, value: StackValue, kind: ValueKind, parameterIndex: Int) {
|
||||
value.put(value.type, codegen.v)
|
||||
}
|
||||
|
||||
@@ -121,7 +122,8 @@ abstract class CallGenerator {
|
||||
abstract fun putValueIfNeeded(
|
||||
parameterType: Type,
|
||||
value: StackValue,
|
||||
kind: ValueKind)
|
||||
kind: ValueKind = ValueKind.GENERAL,
|
||||
parameterIndex: Int = -1)
|
||||
|
||||
abstract fun putCapturedValueOnStack(
|
||||
stackValue: StackValue,
|
||||
|
||||
@@ -904,7 +904,7 @@ public class InlineCodegen extends CallGenerator {
|
||||
}
|
||||
else {
|
||||
StackValue value = codegen.gen(argumentExpression);
|
||||
putValueIfNeeded(parameterType, value, valueParameterDescriptor.getIndex(), ValueKind.GENERAL);
|
||||
putValueIfNeeded(parameterType, value, ValueKind.GENERAL, valueParameterDescriptor.getIndex());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -923,16 +923,12 @@ public class InlineCodegen extends CallGenerator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putValueIfNeeded(@NotNull Type parameterType, @NotNull StackValue value, @NotNull ValueKind kind) {
|
||||
putValueIfNeeded(parameterType, value, -1, kind);
|
||||
}
|
||||
|
||||
private void putValueIfNeeded(@NotNull Type parameterType, @NotNull StackValue value, int index, @NotNull ValueKind kind) {
|
||||
public void putValueIfNeeded(@NotNull Type parameterType, @NotNull StackValue value, @NotNull ValueKind kind, int parameterIndex) {
|
||||
if (processDefaultMaskOrMethodHandler(value, kind)) return;
|
||||
|
||||
assert maskValues.isEmpty() : "Additional default call arguments should be last ones, but " + value;
|
||||
|
||||
putArgumentOrCapturedToLocalVal(parameterType, value, -1, index, kind);
|
||||
putArgumentOrCapturedToLocalVal(parameterType, value, -1, parameterIndex, kind);
|
||||
}
|
||||
|
||||
private boolean processDefaultMaskOrMethodHandler(@NotNull StackValue value, @NotNull ValueKind kind) {
|
||||
|
||||
+1
-1
@@ -91,7 +91,7 @@ class InlineCodegenForDefaultBody(
|
||||
throw UnsupportedOperationException("Shouldn't be called")
|
||||
}
|
||||
|
||||
override fun putValueIfNeeded(parameterType: Type, value: StackValue, kind: ValueKind) {
|
||||
override fun putValueIfNeeded(parameterType: Type, value: StackValue, kind: ValueKind, parameterIndex: Int) {
|
||||
//original method would be inlined directly into default impl body without any inline magic
|
||||
//so we no need to load variables on stack to further method call
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user