Browse Source

Fix VisitLdcI4 when HintType=bool.

pull/1322/head
Daniel Grunwald 7 years ago
parent
commit
b307fc0a81
  1. 5
      ICSharpCode.Decompiler/CSharp/CallBuilder.cs
  2. 4
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

5
ICSharpCode.Decompiler/CSharp/CallBuilder.cs

@ -714,10 +714,7 @@ namespace ICSharpCode.Decompiler.CSharp @@ -714,10 +714,7 @@ namespace ICSharpCode.Decompiler.CSharp
|| a.AttributeType.IsKnownType(KnownAttribute.CallerFilePath)
|| a.AttributeType.IsKnownType(KnownAttribute.CallerLineNumber)))
return false;
if (parameter.ConstantValue == null)
return arg.ResolveResult.ConstantValue == null;
arg = arg.ConvertTo(parameter.Type, expressionBuilder, allowImplicitConversion: true);
return parameter.ConstantValue.Equals(arg.ResolveResult.ConstantValue);
return object.Equals(parameter.ConstantValue, arg.ResolveResult.ConstantValue);
}
[Flags]

4
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -2278,9 +2278,9 @@ namespace ICSharpCode.Decompiler.CSharp @@ -2278,9 +2278,9 @@ namespace ICSharpCode.Decompiler.CSharp
typeHint = NullableType.GetUnderlyingType(typeHint);
// Convert to type hint, if this is possible without loss of accuracy
if (typeHint.IsKnownType(KnownTypeCode.Boolean)) {
if (object.Equals(rr.ConstantValue, 0)) {
if (object.Equals(rr.ConstantValue, 0) || object.Equals(rr.ConstantValue, 0u)) {
rr = new ConstantResolveResult(typeHint, false);
} else if (object.Equals(rr.ConstantValue, 1)) {
} else if (object.Equals(rr.ConstantValue, 1) || object.Equals(rr.ConstantValue, 1u)) {
rr = new ConstantResolveResult(typeHint, true);
}
} else if (typeHint.Kind == TypeKind.Enum || typeHint.IsKnownType(KnownTypeCode.Char) || typeHint.IsCSharpSmallIntegerType()) {

Loading…
Cancel
Save