Browse Source

implement special cases for enum type inference (addition); closes #299

pull/348/head
Siegfried Pammer 13 years ago
parent
commit
856c2e823c
  1. 12
      ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs

12
ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs

@ -985,12 +985,24 @@ namespace ICSharpCode.Decompiler.ILAst @@ -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);
}

Loading…
Cancel
Save