From 4c443039897d3925baf60741231f6dfea6176e86 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 16 Nov 2014 18:37:31 +0100 Subject: [PATCH] implement LdFld and StFld instructions --- .../CSharp/ExpressionBuilder.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs index a019fb11e..0172d53ea 100644 --- a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs +++ b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs @@ -94,6 +94,12 @@ namespace ICSharpCode.Decompiler.CSharp } return expr.WithRR(new ResolveResult(variable.Type)); } + + ExpressionWithResolveResult ConvertField(IField field) + { + Expression expr = new IdentifierExpression(field.Name); + return expr.WithRR(new ResolveResult(field.ReturnType)); + } TranslatedExpression IsType(IsInst inst) { @@ -466,6 +472,16 @@ namespace ICSharpCode.Decompiler.CSharp return Assignment(result, value).WithILInstruction(inst); } + protected internal override TranslatedExpression VisitLdFld(LdFld inst) + { + return ConvertField(inst.Field).WithILInstruction(inst); + } + + protected internal override TranslatedExpression VisitStFld(StFld inst) + { + return Assignment(ConvertField(inst.Field).WithoutILInstruction(), Translate(inst.Value)).WithILInstruction(inst); + } + protected internal override TranslatedExpression VisitUnboxAny(UnboxAny inst) { var arg = Translate(inst.Argument);