Browse Source

Fixed handling of user-defined conversions between primitive types.

Closes icsharpcode/NRefactory#68.
newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
a7816c2f51
  1. 6
      ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs

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

@ -1260,7 +1260,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1260,7 +1260,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
if (c == Conversion.IdentityConversion)
return rr;
else if (rr.IsCompileTimeConstant && c != Conversion.None)
else if (rr.IsCompileTimeConstant && c != Conversion.None && !c.IsUserDefined)
return ResolveCast(targetType, rr);
else
return new ConversionResolveResult(targetType, rr, c, checkForOverflow);
@ -1269,7 +1269,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1269,7 +1269,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
public ResolveResult ResolveCast(IType targetType, ResolveResult expression)
{
// C# 4.0 spec: §7.7.6 Cast expressions
if (expression.IsCompileTimeConstant) {
Conversion c = conversions.ExplicitConversion(expression, targetType);
if (expression.IsCompileTimeConstant && !c.IsUserDefined) {
TypeCode code = ReflectionHelper.GetTypeCode(targetType);
if (code >= TypeCode.Boolean && code <= TypeCode.Decimal && expression.ConstantValue != null) {
try {
@ -1293,7 +1294,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1293,7 +1294,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
}
}
}
Conversion c = conversions.ExplicitConversion(expression, targetType);
return new ConversionResolveResult(targetType, expression, c, checkForOverflow);
}

Loading…
Cancel
Save