public static TypeReference CorrectLargestTypeFor(TypeReference leftType, TypeReference rightType, ITypeProviderService typeProvider) { TypeReference a = StackTypeConverter.StackTypeFor(leftType); TypeReference reference2 = StackTypeConverter.StackTypeFor(rightType); if (!leftType.IsByReference) { if (rightType.IsByReference) { return rightType; } if (leftType.IsPointer) { return leftType; } if (rightType.IsPointer) { return rightType; } if ((a.MetadataType == MetadataType.Int64) || (reference2.MetadataType == MetadataType.Int64)) { return typeProvider.Int64TypeReference; } if (Extensions.IsSameType(a, typeProvider.NativeIntTypeReference) || Extensions.IsSameType(reference2, typeProvider.NativeIntTypeReference)) { return typeProvider.NativeIntTypeReference; } if (Extensions.IsSameType(a, typeProvider.Int32TypeReference) && Extensions.IsSameType(reference2, typeProvider.Int32TypeReference)) { return typeProvider.Int32TypeReference; } } return leftType; }
public static TypeReference ResultTypeForSub(TypeReference leftType, TypeReference rightType, ITypeProviderService typeProvider) { if ((leftType.MetadataType == MetadataType.Byte) || (leftType.MetadataType == MetadataType.UInt16)) { return(typeProvider.Int32TypeReference); } if (leftType.MetadataType == MetadataType.Char) { return(typeProvider.Int32TypeReference); } return(CorrectLargestTypeFor(leftType, rightType, typeProvider)); }
public static TypeReference ResultTypeForMul(TypeReference leftType, TypeReference rightType, ITypeProviderService typeProvider) => CorrectLargestTypeFor(leftType, rightType, typeProvider);
public static TypeReference CorrectLargestTypeFor(TypeReference leftType, TypeReference rightType, ITypeProviderService typeProvider) { TypeReference a = StackTypeConverter.StackTypeFor(leftType); TypeReference reference2 = StackTypeConverter.StackTypeFor(rightType); if (!leftType.IsByReference) { if (rightType.IsByReference) { return(rightType); } if (leftType.IsPointer) { return(leftType); } if (rightType.IsPointer) { return(rightType); } if ((a.MetadataType == MetadataType.Int64) || (reference2.MetadataType == MetadataType.Int64)) { return(typeProvider.Int64TypeReference); } if (a.IsSameType(typeProvider.NativeIntTypeReference) || reference2.IsSameType(typeProvider.NativeIntTypeReference)) { return(typeProvider.NativeIntTypeReference); } if (a.IsSameType(typeProvider.Int32TypeReference) && reference2.IsSameType(typeProvider.Int32TypeReference)) { return(typeProvider.Int32TypeReference); } } return(leftType); }
public static TypeReference ResultTypeForSub(TypeReference leftType, TypeReference rightType, ITypeProviderService typeProvider) { if ((leftType.MetadataType == MetadataType.Byte) || (leftType.MetadataType == MetadataType.UInt16)) { return typeProvider.Int32TypeReference; } if (leftType.MetadataType == MetadataType.Char) { return typeProvider.Int32TypeReference; } return CorrectLargestTypeFor(leftType, rightType, typeProvider); }
public static TypeReference ResultTypeForMul(TypeReference leftType, TypeReference rightType, ITypeProviderService typeProvider) { return CorrectLargestTypeFor(leftType, rightType, typeProvider); }