From d724241091f6b35d3d4b5c99970dc00f5990b7ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Mon, 31 Dec 2012 15:59:28 +0100 Subject: [PATCH] AS3: XML fix, with statement problem Loading dialog with loading phases --- trunk/src/com/jpexs/asdec/Main.java | 7 +++++++ .../src/com/jpexs/asdec/abc/avm2/AVM2Code.java | 17 ++++++++++++----- .../avm2/instructions/stack/PopScopeIns.java | 3 ++- .../src/com/jpexs/asdec/abc/gui/MainFrame.java | 12 ++++++++---- .../com/jpexs/asdec/abc/types/ScriptInfo.java | 2 +- .../com/jpexs/asdec/action/gui/MainFrame.java | 1 + .../src/com/jpexs/asdec/gui/LoadingDialog.java | 11 ++++++++--- 7 files changed, 39 insertions(+), 14 deletions(-) diff --git a/trunk/src/com/jpexs/asdec/Main.java b/trunk/src/com/jpexs/asdec/Main.java index 88c5f6b31..404772d00 100644 --- a/trunk/src/com/jpexs/asdec/Main.java +++ b/trunk/src/com/jpexs/asdec/Main.java @@ -149,6 +149,9 @@ public class Main { if (actionMainFrame != null) { actionMainFrame.setStatus(name); } + if(loadingDialog!=null){ + loadingDialog.setDetail(name); + } if (Main.isCommandLineMode()) { System.out.println(name); } @@ -162,6 +165,9 @@ public class Main { if (actionMainFrame != null) { actionMainFrame.setStatus(""); } + if(loadingDialog!=null){ + loadingDialog.setDetail(""); + } } public static SWF parseSWF(String file) throws Exception { @@ -188,6 +194,7 @@ public class Main { @Override protected Object doInBackground() throws Exception { try { + Main.startWork("Reading SWF..."); swf = parseSWF(Main.file); FileInputStream fis = new FileInputStream(file); DEBUG_COPY = true; diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java b/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java index 80ca5872a..009dca522 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java @@ -948,13 +948,16 @@ public class AVM2Code { return localRegNames; } - private void clearTemporaryRegisters(List output) { + public void clearTemporaryRegisters(List output) { for (int i = 0; i < output.size(); i++) { if (output.get(i) instanceof SetLocalTreeItem) { if (isKilled(((SetLocalTreeItem) output.get(i)).regIndex, 0, code.size() - 1)) { output.remove(i); i--; } + }else + if (output.get(i) instanceof WithTreeItem) { + clearTemporaryRegisters(((WithTreeItem) output.get(i)).items); } } } @@ -1418,7 +1421,7 @@ public class AVM2Code { output.add(new DoWhileTreeItem(ins, currentLoop.loopBreak, currentLoop.loopContinue, loopBody, expression)); } else { if (expression instanceof InTreeItem) { - TreeItem gti=((InTreeItem) expression).collection.getNotCoerced().getThroughRegister(); + TreeItem gti = ((InTreeItem) expression).collection.getNotCoerced().getThroughRegister(); if (gti instanceof FilteredCheckTreeItem) { boolean found = false; if (loopBody.size() == 1) { @@ -1434,9 +1437,12 @@ public class AVM2Code { SetPropertyTreeItem spt = (SetPropertyTreeItem) ft; if (spt.object instanceof LocalRegTreeItem) { int regIndex = ((LocalRegTreeItem) spt.object).regIndex; - InTreeItem iti=(InTreeItem) expression; - localRegs.put(regIndex, new FilterTreeItem(ins,iti.collection.getThroughRegister(),ift.expression)); + InTreeItem iti = (InTreeItem) expression; + localRegs.put(regIndex, new FilterTreeItem(ins, iti.collection.getThroughRegister(), ift.expression)); found = true; + addr = afterBackJumpAddr; + ip = adr2pos(addr); + continue iploop; } } } @@ -1447,7 +1453,8 @@ public class AVM2Code { if (!found) { throw new ConvertException("Unknown pattern: bad filter loop", ip); } - } else { + } + { boolean found = false; for (int g = ip + 1; g < jumpPos; g++) { if (code.get(g).definition instanceof NextValueIns) { diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/stack/PopScopeIns.java b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/stack/PopScopeIns.java index 7a9591885..dbd817dac 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/stack/PopScopeIns.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/stack/PopScopeIns.java @@ -17,6 +17,7 @@ package com.jpexs.asdec.abc.avm2.instructions.stack; import com.jpexs.asdec.abc.ABC; +import com.jpexs.asdec.abc.avm2.AVM2Code; import com.jpexs.asdec.abc.avm2.ConstantPool; import com.jpexs.asdec.abc.avm2.LocalDataArea; import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; @@ -55,7 +56,7 @@ public class PopScopeIns extends InstructionDefinition { } while (output.size() > i + 1) { output.remove(i + 1); - } + } /*int count=output.size()-1-(i+1); for(int c=0;c()); } } diff --git a/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java b/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java index 724419d04..23840fd1f 100644 --- a/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java +++ b/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java @@ -202,6 +202,7 @@ public class MainFrame extends JFrame implements TreeSelectionListener, ActionLi setJMenuBar(menuBar); setTitle(Main.applicationName + " - " + Main.getFileTitle()); + Main.stopWork(); } public void valueChanged(TreeSelectionEvent e) { diff --git a/trunk/src/com/jpexs/asdec/gui/LoadingDialog.java b/trunk/src/com/jpexs/asdec/gui/LoadingDialog.java index b18a39ba7..b91f0fcb3 100644 --- a/trunk/src/com/jpexs/asdec/gui/LoadingDialog.java +++ b/trunk/src/com/jpexs/asdec/gui/LoadingDialog.java @@ -24,6 +24,7 @@ import java.awt.event.WindowEvent; import java.awt.image.ImageObserver; import javax.swing.JFrame; import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.SwingConstants; /** @@ -33,16 +34,20 @@ import javax.swing.SwingConstants; */ public class LoadingDialog extends JFrame implements ImageObserver { - private JLabel loadingLabel = new JLabel("Loading SWF file, please wait..."); + private JLabel loadingLabel = new JLabel(""); private LoadingPanel loadingPanel; - + String load="Loading, please wait..."; + + public void setDetail(String d){ + loadingLabel.setText("
"+load+"
"+d+"
"); + } /** * Constructor */ public LoadingDialog() { setResizable(false); setTitle(Main.shortApplicationVerName); - setSize(300, 150); + setSize(250, 150); setLayout(new BorderLayout()); loadingPanel = new LoadingPanel(50, 50);