From 856c2e823c582d8d7e04b52ff40e964ac3e80886 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 13 Apr 2012 19:12:04 +0200 Subject: [PATCH] implement special cases for enum type inference (addition); closes #299 --- ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs b/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs index 9cb5523ab..6e8444a1c 100644 --- a/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs +++ b/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs @@ -985,12 +985,24 @@ namespace ICSharpCode.Decompiler.ILAst InferTypeForExpression(right, typeSystem.IntPtr); return leftPreferred; } + if (IsEnum(leftPreferred)) { + //E+U=E + left.InferredType = left.ExpectedType = leftPreferred; + InferTypeForExpression(right, GetEnumUnderlyingType(leftPreferred)); + return leftPreferred; + } TypeReference rightPreferred = DoInferTypeForExpression(right, expectedType); if (rightPreferred is PointerType) { InferTypeForExpression(left, typeSystem.IntPtr); right.InferredType = right.ExpectedType = rightPreferred; return rightPreferred; } + if (IsEnum(rightPreferred)) { + //U+E=E + right.InferredType = right.ExpectedType = rightPreferred; + InferTypeForExpression(left, GetEnumUnderlyingType(rightPreferred)); + return rightPreferred; + } return InferBinaryArguments(left, right, expectedType, leftPreferred: leftPreferred, rightPreferred: rightPreferred); }