From 8a6f9a9b91b9e31a79b058648fdc679c16d023d4 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 28 Apr 1999 16:24:24 +0000 Subject: [PATCH] merge not generated names when combining. create name on call of guessName use hashCode as name if it is not yet guessed git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@689 379699f6-c40d-0410-875b-85095c16579e --- jode/jode/decompiler/LocalInfo.java | 31 +++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/jode/jode/decompiler/LocalInfo.java b/jode/jode/decompiler/LocalInfo.java index 3487a13..3d51576 100644 --- a/jode/jode/decompiler/LocalInfo.java +++ b/jode/jode/decompiler/LocalInfo.java @@ -39,7 +39,7 @@ public class LocalInfo { private static int serialnr = 0; private static int nextAnonymousSlot = -1; private int slot; - private boolean nameIsGenerated; + private boolean nameIsGenerated = false; private boolean isUnique; private String name; private Type type; @@ -93,6 +93,8 @@ public class LocalInfo { } else { if (this != li) { shadow = li; + if (!nameIsGenerated) + shadow.name = li.name; // GlobalOptions.err.println("combining "+name+"("+type+") and " // +li.name+"("+li.type+")"); li.setType(type); @@ -149,23 +151,20 @@ public class LocalInfo { return getLocalInfo().name != null; } - /** - * Get the name of this local. - */ - public String getName() { + public String guessName() { if (shadow != null) { while (shadow.shadow != null) { shadow = shadow.shadow; } - return shadow.getName(); + return shadow.guessName(); } - if (name == null) { + if (name == null) { Enumeration enum = hints.elements(); while (enum.hasMoreElements()) { LocalVarEntry entry = (LocalVarEntry) enum.nextElement(); if (type.isOfType(entry.getType())) { name = entry.getName(); - type = entry.getType(); + setType(entry.getType()); return name; } } @@ -177,7 +176,23 @@ public class LocalInfo { + (slot >= 0 ? "_" + slot : "") + "_" + serialnr++ + "_"; isUnique = true; } + } + return name; + } + + /** + * Get the name of this local. + */ + public String getName() { + if (shadow != null) { + while (shadow.shadow != null) { + shadow = shadow.shadow; + } + return shadow.getName(); } + if (name == null) { + return "local_" + slot + "_"+ Integer.toHexString(hashCode()); + } return name; }