diff --git a/jode/jode/decompiler/LocalVariableRangeList.java b/jode/jode/decompiler/LocalVariableRangeList.java index c692b31..c863c1a 100644 --- a/jode/jode/decompiler/LocalVariableRangeList.java +++ b/jode/jode/decompiler/LocalVariableRangeList.java @@ -52,8 +52,21 @@ public class LocalVariableRangeList { before = after; after = after.next; } - if (after != null && li.start + li.length > after.start) + if (after != null && li.start + li.length > after.start) { + if (after.getType().equals(li.getType()) + && after.getName().equals(li.getName())) { + /* Same type, same name and overlapping range. + * This is the same local: extend after to the common + * range and don't add li. + */ + after.length += after.start - li.start; + after.start = li.start; + if (li.length > after.length) + after.length = li.length; + return; + } Decompiler.err.println("warning: non disjoint locals"); + } li.next = after; if (before == null) list = li;