diff --git a/src/AstBuilder.cs b/src/AstBuilder.cs index 145147dbd..d6027e55d 100644 --- a/src/AstBuilder.cs +++ b/src/AstBuilder.cs @@ -26,8 +26,11 @@ namespace Decompiler string code = csOutVisitor.Text; code = code.Replace(":\r\n\t\t\t", ": "); + code = code.Replace(": }", ":\r\n\t\t\t}"); code = code.Replace(":\r\n\t\t", ": "); + code = code.Replace(": }", ":\r\n\t\t}"); code = code.Replace(":\r\n\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 9ec2ebf4e..1faf0c2b1 100644 --- a/src/AstMetodBodyBuilder.cs +++ b/src/AstMetodBodyBuilder.cs @@ -29,7 +29,8 @@ namespace Decompiler astBlock.Children.Add(astLocalVar); } - foreach(StackExpression expr in exprCol) { + for(int i = 0; i < exprCol.Count; i++) { + StackExpression expr = exprCol[i]; Ast.Statement astStatement = null; try { List args = new List(); @@ -57,6 +58,12 @@ namespace Decompiler if (expr.FirstByteCode.BranchesHere.Count > 0) { astBlock.Children.Add(new Ast.LabelStatement(string.Format("IL_{0:X2}", expr.FirstByteCode.Offset))); } + // Skip last return statement + if (i == exprCol.Count - 1 && + expr.ExpressionByteCode.OpCode.Code == Code.Ret && + expr.ExpressionByteCode.PopCount == 0) { + continue; + } astBlock.Children.Add(astStatement); }