Browse Source

Add support for mkrefany opcode.

pull/124/head
Daniel Grunwald 15 years ago
parent
commit
1e66e970bf
  1. 9
      ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs
  2. 5
      ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs

9
ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs

@ -593,7 +593,14 @@ namespace ICSharpCode.Decompiler.Ast
CountExpression = DivideBySize(arg1, type) CountExpression = DivideBySize(arg1, type)
}; };
} }
case ILCode.Mkrefany: return InlineAssembly(byteCode, args); case ILCode.Mkrefany:
{
DirectionExpression dir = arg1 as DirectionExpression;
if (dir != null)
return new IdentifierExpression("__makeref").Invoke(dir.Expression.Detach());
else
return InlineAssembly(byteCode, args);
}
case ILCode.Newobj: { case ILCode.Newobj: {
Cecil.TypeReference declaringType = ((MethodReference)operand).DeclaringType; Cecil.TypeReference declaringType = ((MethodReference)operand).DeclaringType;
if (declaringType is ArrayType) { if (declaringType is ArrayType) {

5
ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs

@ -453,6 +453,11 @@ namespace ICSharpCode.Decompiler.ILAst
} }
return elementType; return elementType;
} }
case ILCode.Mkrefany:
if (forceInferChildren) {
InferTypeForExpression(expr.Arguments[0], (TypeReference)expr.Operand);
}
return typeSystem.TypedReference;
#endregion #endregion
#region Arithmetic instructions #region Arithmetic instructions
case ILCode.Not: // bitwise complement case ILCode.Not: // bitwise complement

Loading…
Cancel
Save