Browse Source

Add support for mkrefany opcode.

pull/124/head
Daniel Grunwald 14 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 @@ -593,7 +593,14 @@ namespace ICSharpCode.Decompiler.Ast
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: {
Cecil.TypeReference declaringType = ((MethodReference)operand).DeclaringType;
if (declaringType is ArrayType) {

5
ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs

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

Loading…
Cancel
Save