From a9c743c0ec0a2c8c2bb5e865cb763cc7b616d7a1 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 1 Dec 2011 14:27:37 +0100 Subject: [PATCH] Fixed type inference for "condition ? someEnum : 0" --- ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs | 4 ++-- .../CSharp/Resolver/ConditionalOperatorTests.cs | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs b/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs index 2f94c64721..58e77a3fe6 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs @@ -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 diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/ConditionalOperatorTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/ConditionalOperatorTests.cs index b0e02f59fc..c612f056b0 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/ConditionalOperatorTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/ConditionalOperatorTests.cs @@ -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))); + } } }