diff --git a/trunk/src/com/jpexs/asdec/action/Action.java b/trunk/src/com/jpexs/asdec/action/Action.java index 8c24d8e76..95031e93c 100644 --- a/trunk/src/com/jpexs/asdec/action/Action.java +++ b/trunk/src/com/jpexs/asdec/action/Action.java @@ -683,7 +683,7 @@ public class Action { List doBody = actionsToTree(registerNames, unknownJumps, loopList, jumpsOrIfs, stack, constants, actions, ip, adr2ip(actions, jif.getAddress(), version) - 1, version); Loop currentLoop = new Loop(ip, adr2ip(actions, jif.getAddress(), version) + 1); loopList.add(currentLoop); - output.add(new DoWhileTreeItem(action, adr2ip(actions, jif.getAddress(), version) + 1, ip, doBody, stack.pop())); + output.add(new DoWhileTreeItem(action, adr2ip(actions, jif.getAddress(), version) + 1, ip, doBody, stack.isEmpty()?new DirectValueTreeItem(null, new Boolean(true), constants):stack.pop())); ip = adr2ip(actions, jif.getAddress(), version) + 1; continue loopip; } @@ -1038,7 +1038,9 @@ public class Action { private static List checkClass(List output) { List ret = new ArrayList(); List functions = new ArrayList(); + List staticFunctions = new ArrayList(); HashMap vars = new HashMap(); + HashMap staticVars = new HashMap(); TreeItem className; TreeItem extendsOp = null; List implementsOp = new ArrayList(); @@ -1057,7 +1059,7 @@ public class Action { className = getWithoutGlobal((GetMemberTreeItem) nti.value); if (parts.size() >= 1) { if (parts.get(0) instanceof StoreRegisterTreeItem) { - int firstReg = ((StoreRegisterTreeItem) parts.get(0)).register.number; + int classReg = ((StoreRegisterTreeItem) parts.get(0)).register.number; if ((parts.size() >= 2) && (parts.get(1) instanceof SetMemberTreeItem)) { TreeItem ti1 = ((SetMemberTreeItem) parts.get(1)).value; TreeItem ti2 = ((StoreRegisterTreeItem) parts.get(0)).value; @@ -1080,8 +1082,8 @@ public class Action { TreeItem obj = ((GetMemberTreeItem) ((StoreRegisterTreeItem) parts.get(pos)).value).object; if (obj instanceof DirectValueTreeItem) { if (((DirectValueTreeItem) obj).value instanceof RegisterNumber) { - if (((RegisterNumber) ((DirectValueTreeItem) obj).value).number == firstReg) { - int secondReg = ((StoreRegisterTreeItem) parts.get(pos)).register.number; + if (((RegisterNumber) ((DirectValueTreeItem) obj).value).number == classReg) { + int instanceReg = ((StoreRegisterTreeItem) parts.get(pos)).register.number; pos++; if (parts.size() <= pos) { ok = false; @@ -1097,14 +1099,21 @@ public class Action { SetMemberTreeItem smt = (SetMemberTreeItem) parts.get(pos); if (smt.object instanceof DirectValueTreeItem) { if (((DirectValueTreeItem) smt.object).value instanceof RegisterNumber) { - if (((RegisterNumber) ((DirectValueTreeItem) smt.object).value).number == secondReg) { + if (((RegisterNumber) ((DirectValueTreeItem) smt.object).value).number == instanceReg) { if (smt.value instanceof FunctionTreeItem) { ((FunctionTreeItem) smt.value).calculatedFunctionName = smt.objectName; functions.add((FunctionTreeItem) smt.value); } else { vars.put(smt.objectName, smt.value); } - } else { + } else if (((RegisterNumber) ((DirectValueTreeItem) smt.object).value).number == classReg) { + if (smt.value instanceof FunctionTreeItem) { + ((FunctionTreeItem) smt.value).calculatedFunctionName = smt.objectName; + staticFunctions.add((FunctionTreeItem) smt.value); + } else { + staticVars.put(smt.objectName, smt.value); + } + }else{ ok = false; } } @@ -1135,7 +1144,7 @@ public class Action { } if (ok) { List output2 = new ArrayList(); - output2.add(new ClassTreeItem(className, extendsOp, implementsOp, functions, vars)); + output2.add(new ClassTreeItem(className, extendsOp, implementsOp, functions, vars,staticFunctions,staticVars)); return output2; } } else { diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/clauses/ClassTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/clauses/ClassTreeItem.java index 75d36236f..a7e1b175e 100644 --- a/trunk/src/com/jpexs/asdec/action/treemodel/clauses/ClassTreeItem.java +++ b/trunk/src/com/jpexs/asdec/action/treemodel/clauses/ClassTreeItem.java @@ -28,18 +28,22 @@ import java.util.List; public class ClassTreeItem extends TreeItem implements Block { public List functions; + public List staticFunctions; public TreeItem extendsOp; public List implementsOp; public TreeItem className; public HashMap vars; + public HashMap staticVars; - public ClassTreeItem(TreeItem className, TreeItem extendsOp, List implementsOp, List functions, HashMap vars) { + public ClassTreeItem(TreeItem className, TreeItem extendsOp, List implementsOp, List functions, HashMap vars,List staticFunctions,HashMap staticVars) { super(null, NOPRECEDENCE); this.className = className; this.functions = functions; this.vars = vars; this.extendsOp = extendsOp; this.implementsOp = implementsOp; + this.staticFunctions=staticFunctions; + this.staticVars=staticVars; } @Override