diff --git a/src/AstBuilder.cs b/src/AstBuilder.cs index 97d9db2d1..5eb70cd7d 100644 --- a/src/AstBuilder.cs +++ b/src/AstBuilder.cs @@ -25,6 +25,9 @@ namespace Decompiler astCompileUnit.AcceptVisitor(csOutVisitor, null); string code = csOutVisitor.Text; + code = code.Replace(":\r\n\t\t\t", ": "); + code = code.Replace(":\r\n\t\t", ": "); + code = code.Replace(":\r\n\t", ": "); code = code.Replace("\t", " "); code = code.Replace("\"/*", "//"); code = code.Replace("*/\";", ""); diff --git a/src/AstMetodBodyBuilder.cs b/src/AstMetodBodyBuilder.cs index f22b5dfa2..e3265810c 100644 --- a/src/AstMetodBodyBuilder.cs +++ b/src/AstMetodBodyBuilder.cs @@ -29,7 +29,7 @@ namespace Decompiler opCode.FlowControl == FlowControl.Next ? string.Empty : "Flow=" + opCode.FlowControl, opCode.OpCodeType == OpCodeType.Macro ? "(macro)" : string.Empty); - astBlock.Children.Add(new Ast.ExpressionStatement(new PrimitiveExpression(description, description))); + Ast.Statement astStatement = null; try { object codeExpr = MakeCodeDomExpression( instr, @@ -37,12 +37,15 @@ namespace Decompiler new Ast.IdentifierExpression("arg2"), new Ast.IdentifierExpression("arg3")); if (codeExpr is Ast.Expression) { - astBlock.Children.Add(new ExpressionStatement((Ast.Expression)codeExpr)); + astStatement = new ExpressionStatement((Ast.Expression)codeExpr); } else if (codeExpr is Ast.Statement) { - astBlock.Children.Add((Ast.Statement)codeExpr); + astStatement = (Ast.Statement)codeExpr; } } catch (NotImplementedException) { + astStatement = new Ast.ExpressionStatement(new PrimitiveExpression(description, description)); } + astBlock.Children.Add(new Ast.LabelStatement(string.Format("IL_{0:X2}", instr.Offset))); + astBlock.Children.Add(astStatement); } return astBlock;