diff --git a/trunk/src/com/jpexs/decompiler/flash/action/Action.java b/trunk/src/com/jpexs/decompiler/flash/action/Action.java index 6ed7c51d5..4db19ab80 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/Action.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/Action.java @@ -982,34 +982,40 @@ public class Action implements GraphSourceItem { IfItem it = (IfItem) t; if (it.expression instanceof NotItem) { NotItem nti = (NotItem) it.expression; - if (nti.value instanceof GetMemberTreeItem) { + if ((nti.value instanceof GetMemberTreeItem) || (nti.value instanceof GetVariableTreeItem)) { if (true) { //it.onFalse.isEmpty()){ //||(it.onFalse.get(0) instanceof UnsupportedTreeItem)) { if ((it.onTrue.size() == 1) && (it.onTrue.get(0) instanceof SetMemberTreeItem) && (((SetMemberTreeItem) it.onTrue.get(0)).value instanceof NewObjectTreeItem)) { //ignore } else { List parts = it.onTrue; - className = getWithoutGlobal((GetMemberTreeItem) nti.value); + className = getWithoutGlobal(nti.value); if (parts.size() >= 1) { - if (parts.get(0) instanceof SetMemberTreeItem) { - SetMemberTreeItem smt = (SetMemberTreeItem) parts.get(0); + int ipos = 0; + while ((parts.get(ipos) instanceof IfItem) + && ((((IfItem) parts.get(ipos)).onTrue.size() == 1) && (((IfItem) parts.get(ipos)).onTrue.get(0) instanceof SetMemberTreeItem) && (((SetMemberTreeItem) ((IfItem) parts.get(ipos)).onTrue.get(0)).value instanceof NewObjectTreeItem))) { + + ipos++; + } + if (parts.get(ipos) instanceof SetMemberTreeItem) { + SetMemberTreeItem smt = (SetMemberTreeItem) parts.get(ipos); if (smt.value instanceof StoreRegisterTreeItem) { - parts.add(0, smt.value); + parts.add(ipos, smt.value); smt.value = ((StoreRegisterTreeItem) smt.value).value; } } - if (parts.get(0) instanceof StoreRegisterTreeItem) { - StoreRegisterTreeItem str1 = (StoreRegisterTreeItem) parts.get(0); + if (parts.get(ipos) instanceof StoreRegisterTreeItem) { + StoreRegisterTreeItem str1 = (StoreRegisterTreeItem) parts.get(ipos); int classReg = str1.register.number; int instanceReg = -1; - if ((parts.size() >= 2) && (parts.get(1) instanceof SetMemberTreeItem)) { - GraphTargetItem ti1 = ((SetMemberTreeItem) parts.get(1)).value; - GraphTargetItem ti2 = ((StoreRegisterTreeItem) parts.get(0)).value; + if ((parts.size() >= ipos + 2) && (parts.get(ipos + 1) instanceof SetMemberTreeItem)) { + GraphTargetItem ti1 = ((SetMemberTreeItem) parts.get(ipos + 1)).value; + GraphTargetItem ti2 = ((StoreRegisterTreeItem) parts.get(ipos + 0)).value; if (ti1 == ti2) { - if (((SetMemberTreeItem) parts.get(1)).value instanceof FunctionTreeItem) { - ((FunctionTreeItem) ((SetMemberTreeItem) parts.get(1)).value).calculatedFunctionName = (className instanceof GetMemberTreeItem) ? ((GetMemberTreeItem) className).memberName : className; - functions.add((FunctionTreeItem) ((SetMemberTreeItem) parts.get(1)).value); - int pos = 2; + if (((SetMemberTreeItem) parts.get(ipos + 1)).value instanceof FunctionTreeItem) { + ((FunctionTreeItem) ((SetMemberTreeItem) parts.get(ipos + 1)).value).calculatedFunctionName = (className instanceof GetMemberTreeItem) ? ((GetMemberTreeItem) className).memberName : className; + functions.add((FunctionTreeItem) ((SetMemberTreeItem) parts.get(ipos + 1)).value); + int pos = ipos + 2; if (parts.size() <= pos) { ok = false; break; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/ActionGraph.java b/trunk/src/com/jpexs/decompiler/flash/action/ActionGraph.java index dc2cd7e2c..635eec2ae 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/ActionGraph.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/ActionGraph.java @@ -160,7 +160,7 @@ public class ActionGraph extends Graph { int cnt = 1; while (part.nextParts.size() > 1 && part.nextParts.get(1).getHeight() > 1 - && code.get(part.nextParts.get(1).end) instanceof ActionIf + && code.get(part.nextParts.get(1).end >= code.size() ? code.size() - 1 : part.nextParts.get(1).end) instanceof ActionIf && ((top = translatePartGetStack(localData, part.nextParts.get(1), stack)) instanceof StrictEqTreeItem)) { cnt++; part = part.nextParts.get(1); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/gui/ActionPanel.java b/trunk/src/com/jpexs/decompiler/flash/action/gui/ActionPanel.java index 0ae5e601e..979475508 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/gui/ActionPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/gui/ActionPanel.java @@ -62,7 +62,7 @@ public class ActionPanel extends JPanel implements ActionListener { public JButton saveButton = new JButton("Save", View.getIcon("save16")); public JButton editButton = new JButton("Edit", View.getIcon("edit16")); public JButton cancelButton = new JButton("Cancel", View.getIcon("cancel16")); - public JLabel betaLabel = new JLabel("(Beta)"); + public JLabel experimentalLabel = new JLabel("(Experimental)"); public JButton editDecompiledButton = new JButton("Edit", View.getIcon("edit16")); public JButton saveDecompiledButton = new JButton("Save", View.getIcon("save16")); public JButton cancelDecompiledButton = new JButton("Cancel", View.getIcon("cancel16")); @@ -251,7 +251,7 @@ public class ActionPanel extends JPanel implements ActionListener { JPanel decButtonsPan = new JPanel(new FlowLayout()); decButtonsPan.add(editDecompiledButton); - decButtonsPan.add(betaLabel); + decButtonsPan.add(experimentalLabel); decButtonsPan.add(saveDecompiledButton); decButtonsPan.add(cancelDecompiledButton); @@ -418,7 +418,7 @@ public class ActionPanel extends JPanel implements ActionListener { decompiledEditor.setEditable(true); saveDecompiledButton.setVisible(true); editDecompiledButton.setVisible(false); - betaLabel.setVisible(false); + experimentalLabel.setVisible(false); cancelDecompiledButton.setVisible(true); decompiledEditor.getCaret().setVisible(true); decLabel.setIcon(View.getIcon("editing16")); @@ -426,7 +426,7 @@ public class ActionPanel extends JPanel implements ActionListener { decompiledEditor.setEditable(false); saveDecompiledButton.setVisible(false); editDecompiledButton.setVisible(true); - betaLabel.setVisible(true); + experimentalLabel.setVisible(true); cancelDecompiledButton.setVisible(false); decompiledEditor.getCaret().setVisible(true); decLabel.setIcon(null); @@ -477,7 +477,7 @@ public class ActionPanel extends JPanel implements ActionListener { saveDecompiledButton.setVisible(false); cancelDecompiledButton.setVisible(false); editDecompiledButton.setVisible(true); - betaLabel.setVisible(true); + experimentalLabel.setVisible(true); decompiledEditor.setEditable(false); editDecompiledMode = false; } catch (IOException ex) {