diff --git a/ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs b/ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs index d8ac85076..a1555a3f9 100644 --- a/ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs +++ b/ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs @@ -175,9 +175,17 @@ namespace ICSharpCode.Decompiler.ILAst if (abortBeforeStep == ILAstOptimizationStep.IntroduceFixedStatements) return; foreach(ILBlock block in method.GetSelfAndChildrenRecursive()) { - for (int i = 0; i < block.Body.Count; i++) { + for (int i = block.Body.Count - 1; i >= 0; i--) { + // TODO: Move before loops + if (i < block.Body.Count) + IntroduceFixedStatements(block.Body, i); + } + } + foreach(ILBlock block in method.GetSelfAndChildrenRecursive()) { + for (int i = block.Body.Count - 1; i >= 0; i--) { // TODO: Move before loops - IntroduceFixedStatements(block.Body, i); + if (i < block.Body.Count) + IntroduceFixedStatements(block.Body, i); } } diff --git a/ICSharpCode.Decompiler/ILAst/InitializerPeepholeTransforms.cs b/ICSharpCode.Decompiler/ILAst/InitializerPeepholeTransforms.cs index e66cf577b..29d869526 100644 --- a/ICSharpCode.Decompiler/ILAst/InitializerPeepholeTransforms.cs +++ b/ICSharpCode.Decompiler/ILAst/InitializerPeepholeTransforms.cs @@ -162,7 +162,7 @@ namespace ICSharpCode.Decompiler.ILAst if (nextExpr.Match(ILCode.Callvirt, out addMethod, out args) && addMethod.Name == "Add" && addMethod.HasThis && - args.Count == 2 && + args.Count >= 2 && args[0].Match(ILCode.Ldloc, out v2) && v == v2) {