Browse Source

Fixed type inference for "condition ? someEnum : 0"

newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
a9c743c0ec
  1. 4
      ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs
  2. 7
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/ConditionalOperatorTests.cs

4
ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs

@ -1868,8 +1868,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1868,8 +1868,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
resultType = SpecialType.Dynamic;
isValid = TryConvert(ref trueExpression, resultType) & TryConvert(ref falseExpression, resultType);
} else if (HasType(trueExpression) && HasType(falseExpression)) {
Conversion t2f = conversions.ImplicitConversion(trueExpression.Type, falseExpression.Type);
Conversion f2t = conversions.ImplicitConversion(falseExpression.Type, trueExpression.Type);
Conversion t2f = conversions.ImplicitConversion(trueExpression, falseExpression.Type);
Conversion f2t = conversions.ImplicitConversion(falseExpression, trueExpression.Type);
// The operator is valid:
// a) if there's a conversion in one direction but not the other
// b) if there are conversions in both directions, and the types are equivalent

7
ICSharpCode.NRefactory.Tests/CSharp/Resolver/ConditionalOperatorTests.cs

@ -144,5 +144,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -144,5 +144,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
AssertType(typeof(long), resolver.ResolveConditional(
MakeConstant(true), MakeConstant(1), MakeResult(typeof(long))));
}
[Test]
public void EnumAndZeroLiteral()
{
AssertType(typeof(StringComparison), resolver.ResolveConditional(
MakeResult(typeof(bool)), MakeResult(typeof(StringComparison)), MakeConstant(0)));
}
}
}

Loading…
Cancel
Save