From 9aa65c5702eaaff164419fbf29b023943c620424 Mon Sep 17 00:00:00 2001 From: de4dot Date: Mon, 26 Dec 2011 01:03:39 +0100 Subject: [PATCH] Fix block order bug. --- blocks/ForwardScanOrder.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/blocks/ForwardScanOrder.cs b/blocks/ForwardScanOrder.cs index f3915324..9729ca92 100644 --- a/blocks/ForwardScanOrder.cs +++ b/blocks/ForwardScanOrder.cs @@ -136,7 +136,7 @@ namespace de4dot.blocks { void addToNewList(BaseBlock bb) { if (inNewList.ContainsKey(bb) || !scopeBlock.isOurBaseBlock(bb)) return; - inNewList[bb] = true; + inNewList[bb] = false; var blockInfo = blockInfos[bb]; var block = bb as Block; @@ -145,19 +145,22 @@ namespace de4dot.blocks { } else { foreach (var source in block.Sources) { - if (scopeBlock.isOurBaseBlock(source)) { - addToNewList(source); // Make sure it's before this block + if (!scopeBlock.isOurBaseBlock(source)) + continue; + int oldCount = newList.Count; + addToNewList(source); // Make sure it's before this block + if (oldCount != newList.Count) break; - } } } + inNewList[bb] = true; newList.Add(bb); } bool isInNewList(IEnumerable blocks) { foreach (var block in blocks) { - if (inNewList.ContainsKey(block)) + if (inNewList.ContainsKey(block) && inNewList[block]) return true; } return false;