CallReceiver calcType and put method identical simplification

This commit is contained in:
Mikhael Bogdanov
2014-03-21 11:46:22 +04:00
parent fd165f055f
commit ff4ff29d28
@@ -1125,39 +1125,24 @@ public abstract class StackValue {
CallableDescriptor descriptor = resolvedCall.getResultingDescriptor(); CallableDescriptor descriptor = resolvedCall.getResultingDescriptor();
if (thisObject.exists()) {
if (callableMethod != null) {
if (receiverArgument.exists()) { if (receiverArgument.exists()) {
if (callableMethod != null) {
return callableMethod.getReceiverClass(); return callableMethod.getReceiverClass();
} }
else { else {
//noinspection ConstantConditions
return callableMethod.getThisType();
}
}
else {
if (receiverArgument.exists()) {
return codegen.typeMapper.mapType(descriptor.getReceiverParameter().getType()); return codegen.typeMapper.mapType(descriptor.getReceiverParameter().getType());
} }
} else if (thisObject.exists()) {
if (callableMethod != null) {
return callableMethod.getThisType();
}
else { else {
return codegen.typeMapper.mapType(descriptor.getExpectedThisObject().getType()); return codegen.typeMapper.mapType(descriptor.getExpectedThisObject().getType());
} }
} } else {
}
else {
if (receiverArgument.exists()) {
if (callableMethod != null) {
return callableMethod.getReceiverClass();
}
else {
return codegen.typeMapper.mapType(descriptor.getReceiverParameter().getType());
}
}
else {
return Type.VOID_TYPE; return Type.VOID_TYPE;
} }
} }
}
@Override @Override
public void put(Type type, InstructionAdapter v) { public void put(Type type, InstructionAdapter v) {
@@ -1165,27 +1150,26 @@ public abstract class StackValue {
ReceiverValue thisObject = resolvedCall.getThisObject(); ReceiverValue thisObject = resolvedCall.getThisObject();
ReceiverValue receiverArgument = resolvedCall.getReceiverArgument(); ReceiverValue receiverArgument = resolvedCall.getReceiverArgument();
int depth;
if (thisObject.exists()) { if (thisObject.exists()) {
if (receiverArgument.exists()) { if (receiverArgument.exists()) {
if (callableMethod != null) { Type resultType = callableMethod != null ? callableMethod.getOwner() : codegen.typeMapper
codegen.generateFromResolvedCall(thisObject, callableMethod.getOwner()); .mapType(descriptor.getExpectedThisObject().getType());
}
else { codegen.generateFromResolvedCall(thisObject, resultType);
codegen.generateFromResolvedCall(thisObject, codegen.typeMapper
.mapType(descriptor.getExpectedThisObject().getType()));
}
if (putReceiverArgumentOnStack) {
genReceiver(v, receiverArgument, type, descriptor.getReceiverParameter(), 1);
}
} }
else { else {
genReceiver(v, thisObject, type, null, 0); genReceiver(v, thisObject, type, null, 0);
} }
depth = 1;
} }
else { else {
if (putReceiverArgumentOnStack && receiverArgument.exists()) { depth = 0;
genReceiver(v, receiverArgument, type, descriptor.getReceiverParameter(), 0);
} }
if (putReceiverArgumentOnStack && receiverArgument.exists()) {
genReceiver(v, receiverArgument, type, descriptor.getReceiverParameter(), depth);
} }
} }