From b53aed8bbe77b82123df2a3cdc4d4fd35a457848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Wed, 10 Apr 2013 19:44:39 +0200 Subject: [PATCH] FlashPlayer path modified to "lib/FlashPlayer.exe" Source Formatting Few refactorings --- .../decompiler/flash/abc/avm2/AVM2Code.java | 26 +-- .../instructions/localregs/DecLocalIIns.java | 3 +- .../instructions/localregs/IncLocalIns.java | 2 +- .../abc/avm2/treemodel/IncLocalTreeItem.java | 2 +- .../jpexs/decompiler/flash/action/Action.java | 26 +-- .../action/flashlite/ActionStrictMode.java | 2 +- .../flash/action/gui/ActionPanel.java | 13 +- .../ASMParsedSymbol.java} | 8 +- .../action/parser/{ => pcode}/ASMParser.java | 17 +- .../action/parser/{ => pcode}/FlasmLexer.java | 173 +++++++++--------- .../action/parser/{ => pcode}/Label.java | 2 +- .../action/parser/{ => pcode}/flasm.flex | 39 ++-- .../flash/action/swf3/ActionGetURL.java | 2 +- .../flash/action/swf3/ActionGoToLabel.java | 2 +- .../flash/action/swf3/ActionGotoFrame.java | 2 +- .../flash/action/swf3/ActionSetTarget.java | 2 +- .../flash/action/swf3/ActionWaitForFrame.java | 2 +- .../flash/action/swf4/ActionGetURL2.java | 2 +- .../flash/action/swf4/ActionGotoFrame2.java | 2 +- .../flash/action/swf4/ActionIf.java | 7 +- .../flash/action/swf4/ActionJump.java | 2 +- .../flash/action/swf4/ActionPush.java | 36 ++-- .../action/swf4/ActionWaitForFrame2.java | 2 +- .../flash/action/swf5/ActionConstantPool.java | 8 +- .../action/swf5/ActionDefineFunction.java | 6 +- .../action/swf5/ActionStoreRegister.java | 7 +- .../flash/action/swf5/ActionWith.java | 6 +- .../action/swf7/ActionDefineFunction2.java | 29 ++- .../flash/action/swf7/ActionTry.java | 23 ++- .../action/treemodel/SetMemberTreeItem.java | 4 + .../jpexs/decompiler/flash/graph/Graph.java | 17 +- .../flash/graph/GraphSourceItemContainer.java | 4 +- .../flash/gui/player/FlashPlayerPanel.java | 4 +- 33 files changed, 266 insertions(+), 216 deletions(-) rename trunk/src/com/jpexs/decompiler/flash/action/parser/{ParsedSymbol.java => pcode/ASMParsedSymbol.java} (87%) rename trunk/src/com/jpexs/decompiler/flash/action/parser/{ => pcode}/ASMParser.java (95%) rename trunk/src/com/jpexs/decompiler/flash/action/parser/{ => pcode}/FlasmLexer.java (92%) rename trunk/src/com/jpexs/decompiler/flash/action/parser/{ => pcode}/Label.java (91%) rename trunk/src/com/jpexs/decompiler/flash/action/parser/{ => pcode}/flasm.flex (64%) diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index bbb930a49..577608b4e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -2411,24 +2411,24 @@ public class AVM2Code implements Serializable { public boolean skipUsed = false; } - private static int removeTraps(boolean secondPass, boolean useVisited,List localData, Stack stack, List output, AVM2GraphSource code, int ip, int lastIp, List visited,HashMap decisions) { + private static int removeTraps(boolean secondPass, boolean useVisited, List localData, Stack stack, List output, AVM2GraphSource code, int ip, int lastIp, List visited, HashMap decisions) { boolean debugMode = false; int ret = 0; while ((ip > -1) && ip < code.size()) { - if(useVisited && visited.contains(ip)){ + if (useVisited && visited.contains(ip)) { break; } - if(!visited.contains(ip)){ + if (!visited.contains(ip)) { visited.add(ip); } lastIp = ip; GraphSourceItem ins = code.get(ip); - if(ins.isIgnored()){ + if (ins.isIgnored()) { ip++; continue; - } + } if (debugMode) { - System.out.println((useVisited?"useV ":"")+"Visit " + ip + ": " + ins + " stack:" + Highlighting.stripHilights(stack.toString())); + System.out.println((useVisited ? "useV " : "") + "Visit " + ip + ": " + ins + " stack:" + Highlighting.stripHilights(stack.toString())); } if ((ins instanceof AVM2Instruction) && (((AVM2Instruction) ins).definition instanceof NewFunctionIns)) { stack.push(new BooleanTreeItem(null, true)); @@ -2454,7 +2454,7 @@ public class AVM2Code implements Serializable { Decision dec = new Decision(); if (decisions.containsKey(ins)) { dec = decisions.get(ins); - }else{ + } else { decisions.put(ins, dec); } if (condition) { @@ -2472,7 +2472,7 @@ public class AVM2Code implements Serializable { } } GraphTargetItem tar = stack.pop(); - if (secondPass && (dec.jumpUsed != dec.skipUsed)) { + if (secondPass && (dec.jumpUsed != dec.skipUsed)) { for (GraphSourceItemPos pos : tar.getNeededSources()) { if (pos.item != ins) { pos.item.setIgnored(true); @@ -2480,7 +2480,7 @@ public class AVM2Code implements Serializable { } } - ret += removeTraps(secondPass,useVisited, localData, stack, output, code, condition ? branches.get(0) : branches.get(1), ip, visited,decisions); + ret += removeTraps(secondPass, useVisited, localData, stack, output, code, condition ? branches.get(0) : branches.get(1), ip, visited, decisions); } else { if (ins.isBranch() && (!ins.isJump())) { stack.pop(); @@ -2489,7 +2489,7 @@ public class AVM2Code implements Serializable { for (int b : branches) { Stack brStack = (Stack) stack.clone(); if (b >= 0) { - ret += removeTraps(secondPass,useVisited||(!ins.isJump()), localData, brStack, output, code, b, ip, visited,decisions); + ret += removeTraps(secondPass, useVisited || (!ins.isJump()), localData, brStack, output, code, b, ip, visited, decisions); } else { if (debugMode) { System.out.println("Negative branch:" + b); @@ -2508,8 +2508,8 @@ public class AVM2Code implements Serializable { } public static int removeTraps(List localData, AVM2GraphSource code, int addr) { - HashMap decisions=new HashMap(); - removeTraps(false,false, localData, new Stack(), new ArrayList(), code, code.adr2pos(addr), 0,new ArrayList(), decisions); - return removeTraps(true,false, localData, new Stack(), new ArrayList(), code, code.adr2pos(addr), 0,new ArrayList(),decisions); + HashMap decisions = new HashMap(); + removeTraps(false, false, localData, new Stack(), new ArrayList(), code, code.adr2pos(addr), 0, new ArrayList(), decisions); + return removeTraps(true, false, localData, new Stack(), new ArrayList(), code, code.adr2pos(addr), 0, new ArrayList(), decisions); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIIns.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIIns.java index bbd7e92bc..4fe5d6247 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIIns.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIIns.java @@ -23,7 +23,6 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.treemodel.DecLocalTreeItem; import com.jpexs.decompiler.flash.abc.avm2.treemodel.IntegerValueTreeItem; -import com.jpexs.decompiler.flash.abc.avm2.treemodel.operations.AddTreeItem; import com.jpexs.decompiler.flash.abc.avm2.treemodel.operations.SubtractTreeItem; import com.jpexs.decompiler.flash.abc.types.MethodInfo; import com.jpexs.decompiler.flash.graph.GraphTargetItem; @@ -61,6 +60,6 @@ public class DecLocalIIns extends InstructionDefinition { int regIndex = ins.operands[0]; output.add(new DecLocalTreeItem(ins, regIndex)); localRegs.put(regIndex, new SubtractTreeItem(ins, localRegs.get(regIndex), new IntegerValueTreeItem(ins, new Long(1)))); - + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java index 7658f1de8..81ac04460 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java @@ -39,6 +39,6 @@ public class IncLocalIns extends InstructionDefinition { public void translate(boolean isStatic, int classIndex, java.util.HashMap localRegs, Stack stack, java.util.Stack scopeStack, ConstantPool constants, AVM2Instruction ins, MethodInfo[] method_info, List output, com.jpexs.decompiler.flash.abc.types.MethodBody body, com.jpexs.decompiler.flash.abc.ABC abc, HashMap localRegNames, List fullyQualifiedNames) { int regIndex = ins.operands[0]; output.add(new IncLocalTreeItem(ins, regIndex)); - localRegs.put(regIndex, new AddTreeItem(ins, localRegs.get(regIndex), new IntegerValueTreeItem(ins, new Long(1)))); + localRegs.put(regIndex, new AddTreeItem(ins, localRegs.get(regIndex), new IntegerValueTreeItem(ins, new Long(1)))); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/IncLocalTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/IncLocalTreeItem.java index d73c5e8d9..bf7954659 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/IncLocalTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/IncLocalTreeItem.java @@ -33,5 +33,5 @@ public class IncLocalTreeItem extends TreeItem { @Override public String toString(ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { return localRegName(localRegNames, regIndex) + hilight("++"); - } + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/Action.java b/trunk/src/com/jpexs/decompiler/flash/action/Action.java index 3080ffedb..da4a7df61 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/Action.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/Action.java @@ -19,10 +19,10 @@ package com.jpexs.decompiler.flash.action; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; -import com.jpexs.decompiler.flash.action.parser.ASMParser; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; -import com.jpexs.decompiler.flash.action.parser.ParsedSymbol; +import com.jpexs.decompiler.flash.action.parser.pcode.ASMParsedSymbol; +import com.jpexs.decompiler.flash.action.parser.pcode.ASMParser; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.swf4.*; import com.jpexs.decompiler.flash.action.swf5.*; import com.jpexs.decompiler.flash.action.swf6.ActionEnumerate2; @@ -215,8 +215,8 @@ public class Action implements GraphSourceItem { * @throws ParseException When read object is not String */ protected String lexString(FlasmLexer lex) throws IOException, ParseException { - ParsedSymbol symb = lex.yylex(); - if (symb.type != ParsedSymbol.TYPE_STRING) { + ASMParsedSymbol symb = lex.yylex(); + if (symb.type != ASMParsedSymbol.TYPE_STRING) { throw new ParseException("String expected", lex.yyline()); } return (String) symb.value; @@ -230,8 +230,8 @@ public class Action implements GraphSourceItem { * @throws ParseException When read object is not Block startServer */ protected void lexBlockOpen(FlasmLexer lex) throws IOException, ParseException { - ParsedSymbol symb = lex.yylex(); - if (symb.type != ParsedSymbol.TYPE_BLOCK_START) { + ASMParsedSymbol symb = lex.yylex(); + if (symb.type != ASMParsedSymbol.TYPE_BLOCK_START) { throw new ParseException("Block startServer ", lex.yyline()); } } @@ -245,8 +245,8 @@ public class Action implements GraphSourceItem { * @throws ParseException When read object is not Identifier */ protected String lexIdentifier(FlasmLexer lex) throws IOException, ParseException { - ParsedSymbol symb = lex.yylex(); - if (symb.type != ParsedSymbol.TYPE_IDENTIFIER) { + ASMParsedSymbol symb = lex.yylex(); + if (symb.type != ASMParsedSymbol.TYPE_IDENTIFIER) { throw new ParseException("Identifier expected", lex.yyline()); } return (String) symb.value; @@ -261,8 +261,8 @@ public class Action implements GraphSourceItem { * @throws ParseException When read object is not long value */ protected long lexLong(FlasmLexer lex) throws IOException, ParseException { - ParsedSymbol symb = lex.yylex(); - if (symb.type != ParsedSymbol.TYPE_INTEGER) { + ASMParsedSymbol symb = lex.yylex(); + if (symb.type != ASMParsedSymbol.TYPE_INTEGER) { throw new ParseException("Integer expected", lex.yyline()); } return (Long) symb.value; @@ -277,8 +277,8 @@ public class Action implements GraphSourceItem { * @throws ParseException When read object is not boolean value */ protected boolean lexBoolean(FlasmLexer lex) throws IOException, ParseException { - ParsedSymbol symb = lex.yylex(); - if (symb.type != ParsedSymbol.TYPE_BOOLEAN) { + ASMParsedSymbol symb = lex.yylex(); + if (symb.type != ASMParsedSymbol.TYPE_BOOLEAN) { throw new ParseException("Boolean expected", lex.yyline()); } return (Boolean) symb.value; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/flashlite/ActionStrictMode.java b/trunk/src/com/jpexs/decompiler/flash/action/flashlite/ActionStrictMode.java index 48157369e..a0d7f0d61 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/flashlite/ActionStrictMode.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/flashlite/ActionStrictMode.java @@ -19,8 +19,8 @@ package com.jpexs.decompiler.flash.action.flashlite; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.treemodel.StrictModeTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.io.ByteArrayOutputStream; 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 b0767a63c..24c98ca49 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/gui/ActionPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/gui/ActionPanel.java @@ -20,8 +20,8 @@ import com.jpexs.decompiler.flash.Main; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.abc.gui.LineMarkedEditorPane; import com.jpexs.decompiler.flash.action.ActionGraph; -import com.jpexs.decompiler.flash.action.parser.ASMParser; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.ASMParser; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.gui.GraphFrame; import com.jpexs.decompiler.flash.gui.View; @@ -118,7 +118,16 @@ public class ActionPanel extends JPanel implements ActionListener { //com.jpexs.decompiler.flash.action.Action.setActionsAddresses(as, 0, SWF.DEFAULT_VERSION); String s = com.jpexs.decompiler.flash.action.Action.actionsToSource(as, SWF.DEFAULT_VERSION); decompiledHilights = Highlighting.getInstrHighlights(s); - decompiledEditor.setText(Highlighting.stripHilights(s)); + String stripped = Highlighting.stripHilights(s); + /*try { + ActionScriptParser.parse(stripped); + } catch (ParseException ex) { + JOptionPane.showMessageDialog(null, ex.getMessage()); + Logger.getLogger(ActionPanel.class.getName()).log(Level.SEVERE, null, ex); + } catch (IOException ex) { + Logger.getLogger(ActionPanel.class.getName()).log(Level.SEVERE, null, ex); + }*/ + decompiledEditor.setText(stripped); } setEditMode(false); Main.stopWork(); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/ParsedSymbol.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParsedSymbol.java similarity index 87% rename from trunk/src/com/jpexs/decompiler/flash/action/parser/ParsedSymbol.java rename to trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParsedSymbol.java index 3f84ad5f9..272134e4f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/ParsedSymbol.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParsedSymbol.java @@ -14,9 +14,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.jpexs.decompiler.flash.action.parser; +package com.jpexs.decompiler.flash.action.parser.pcode; -public class ParsedSymbol { +public class ASMParsedSymbol { public int type; public Object value; @@ -38,12 +38,12 @@ public class ParsedSymbol { public static final int TYPE_EOL = 16; public static final int TYPE_CONSTANT_LITERAL = 17; - public ParsedSymbol(int type, Object value) { + public ASMParsedSymbol(int type, Object value) { this.type = type; this.value = value; } - public ParsedSymbol(int type) { + public ASMParsedSymbol(int type) { this.type = type; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/ASMParser.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java similarity index 95% rename from trunk/src/com/jpexs/decompiler/flash/action/parser/ASMParser.java rename to trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java index 9503cb5fc..b0d4ed3ca 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/ASMParser.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java @@ -14,11 +14,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.jpexs.decompiler.flash.action.parser; +package com.jpexs.decompiler.flash.action.parser.pcode; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.flashlite.ActionFSCommand2; import com.jpexs.decompiler.flash.action.flashlite.ActionStrictMode; +import com.jpexs.decompiler.flash.action.parser.ParseException; import com.jpexs.decompiler.flash.action.special.ActionNop; import com.jpexs.decompiler.flash.action.swf3.*; import com.jpexs.decompiler.flash.action.swf4.*; @@ -43,10 +44,10 @@ public class ASMParser { Stack containers = new Stack(); HashMap containerPos = new HashMap(); while (true) { - ParsedSymbol symb = lexer.yylex(); - if (symb.type == ParsedSymbol.TYPE_LABEL) { + ASMParsedSymbol symb = lexer.yylex(); + if (symb.type == ASMParsedSymbol.TYPE_LABEL) { labels.add(new Label((String) symb.value, address)); - } else if (symb.type == ParsedSymbol.TYPE_COMMENT) { + } else if (symb.type == ASMParsedSymbol.TYPE_COMMENT) { if (!list.isEmpty()) { String cmt = (String) symb.value; if (cmt.equals("compileTime")) { @@ -56,7 +57,7 @@ public class ASMParser { } } } - } else if (symb.type == ParsedSymbol.TYPE_BLOCK_END) { + } else if (symb.type == ASMParsedSymbol.TYPE_BLOCK_END) { if (containers.isEmpty()) { throw new ParseException("Block end without start", lexer.yyline()); } @@ -66,7 +67,7 @@ public class ASMParser { if (!a.parseDivision(pos, address, lexer)) { containers.pop(); } - } else if (symb.type == ParsedSymbol.TYPE_INSTRUCTION_NAME) { + } else if (symb.type == ASMParsedSymbol.TYPE_INSTRUCTION_NAME) { String instructionName = ((String) symb.value).toLowerCase(); Action a = null; if (instructionName.equals("GetURL".toLowerCase())) { @@ -298,8 +299,8 @@ public class ASMParser { if (a != null) { list.add(a); } - } else if (symb.type == ParsedSymbol.TYPE_EOL) { - } else if ((symb.type == ParsedSymbol.TYPE_BLOCK_END) || (symb.type == ParsedSymbol.TYPE_EOF)) { + } else if (symb.type == ASMParsedSymbol.TYPE_EOL) { + } else if ((symb.type == ASMParsedSymbol.TYPE_BLOCK_END) || (symb.type == ASMParsedSymbol.TYPE_EOF)) { return list; } else { throw new ParseException("Label or Instruction name expected, found:" + symb.type + " " + symb.value, lexer.yyline()); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/FlasmLexer.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java similarity index 92% rename from trunk/src/com/jpexs/decompiler/flash/action/parser/FlasmLexer.java rename to trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java index 25bcffdcb..0f8af16ef 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/FlasmLexer.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java @@ -1,8 +1,9 @@ -/* The following code was generated by JFlex 1.4.3 on 3.4.13 22:09 */ +/* The following code was generated by JFlex 1.4.3 on 7.4.13 15:38 */ /* Flash assembler language lexer specification */ -package com.jpexs.decompiler.flash.action.parser; +package com.jpexs.decompiler.flash.action.parser.pcode; +import com.jpexs.decompiler.flash.action.parser.ParseException; import com.jpexs.decompiler.flash.action.swf4.ConstantIndex; import com.jpexs.decompiler.flash.action.swf4.Null; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; @@ -10,9 +11,9 @@ import com.jpexs.decompiler.flash.action.swf4.Undefined; /** * This class is a scanner generated by - * JFlex 1.4.3 on 3.4.13 22:09 from the + * JFlex 1.4.3 on 7.4.13 15:38 from the * specification file - * D:/Dokumenty/Programovani/JavaSE/FFDec/trunk/src/com/jpexs/decompiler/flash/action/parser/flasm.flex + * D:/Dokumenty/Programovani/JavaSE/FFDec/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/flasm.flex */ public final class FlasmLexer { @@ -722,7 +723,7 @@ public final class FlasmLexer { * @return the next token * @exception java.io.IOException if any I/O-Error occurs */ - public ParsedSymbol yylex() throws java.io.IOException, ParseException { + public ASMParsedSymbol yylex() throws java.io.IOException, ParseException { int zzInput; int zzAction; @@ -851,152 +852,152 @@ public final class FlasmLexer { zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 9: { - return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER, yytext()); - } - case 31: - break; case 23: { string.append('\''); } + case 31: + break; + case 25: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN, Boolean.TRUE); + } case 32: break; - case 30: { - return new ParsedSymbol(ParsedSymbol.TYPE_CONSTANT, new ConstantIndex(Integer.parseInt(yytext().substring(8)))); - } - case 33: - break; - case 10: { - return new ParsedSymbol(ParsedSymbol.TYPE_INTEGER, new Long(Long.parseLong((yytext())))); - } - case 34: - break; - case 7: { - yybegin(YYINITIAL); - return new ParsedSymbol(ParsedSymbol.TYPE_EOL); - } - case 35: - break; case 19: { char val = (char) Integer.parseInt(yytext().substring(1), 8); string.append(val); } - case 36: + case 33: break; case 4: { string.append(yytext()); } - case 37: + case 34: break; - case 2: { - yybegin(PARAMETERS); - return new ParsedSymbol(ParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); + case 7: { + yybegin(YYINITIAL); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOL); } - case 38: + case 35: break; case 16: { string.append('\r'); } - case 39: + case 36: break; case 12: { yybegin(STRING); string.setLength(0); } + case 37: + break; + case 26: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_NULL, new Null()); + } + case 38: + break; + case 3: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_END); + } + case 39: + break; + case 30: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_CONSTANT, new ConstantIndex(Integer.parseInt(yytext().substring(8)))); + } case 40: break; - case 6: { - yybegin(PARAMETERS); - // length also includes the trailing quote - return new ParsedSymbol(ParsedSymbol.TYPE_STRING, string.toString()); - } - case 41: - break; - case 8: { - return new ParsedSymbol(ParsedSymbol.TYPE_COMMENT, yytext().substring(1)); - } - case 42: - break; - case 27: { - return new ParsedSymbol(ParsedSymbol.TYPE_BOOLEAN, Boolean.FALSE); - } - case 43: - break; case 22: { string.append('\b'); } - case 44: + case 41: break; - case 13: { - String s = yytext(); - return new ParsedSymbol(ParsedSymbol.TYPE_LABEL, s.substring(0, s.length() - 1)); + case 9: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_IDENTIFIER, yytext()); } - case 45: + case 42: break; case 5: { throw new ParseException("Unterminated string at end of line", yyline + 1); } - case 46: + case 43: break; - case 11: { - yybegin(YYINITIAL); - return new ParsedSymbol(ParsedSymbol.TYPE_BLOCK_START); + case 27: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN, Boolean.FALSE); } - case 47: + case 44: + break; + case 24: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_FLOAT, new Double(Double.parseDouble((yytext())))); + } + case 45: break; case 15: { string.append('\t'); } + case 46: + break; + case 6: { + yybegin(PARAMETERS); + // length also includes the trailing quote + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_STRING, string.toString()); + } + case 47: + break; + case 2: { + yybegin(PARAMETERS); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); + } case 48: break; case 28: { - return new ParsedSymbol(ParsedSymbol.TYPE_REGISTER, new RegisterNumber(Integer.parseInt(yytext().substring(8)))); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_REGISTER, new RegisterNumber(Integer.parseInt(yytext().substring(8)))); } case 49: break; - case 24: { - return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT, new Double(Double.parseDouble((yytext())))); + case 13: { + String s = yytext(); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_LABEL, s.substring(0, s.length() - 1)); } case 50: break; - case 25: { - return new ParsedSymbol(ParsedSymbol.TYPE_BOOLEAN, Boolean.TRUE); - } - case 51: - break; - case 26: { - return new ParsedSymbol(ParsedSymbol.TYPE_NULL, new Null()); - } - case 52: - break; case 20: { string.append('\\'); } - case 53: + case 51: break; case 14: { throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); } - case 54: + case 52: + break; + case 29: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_UNDEFINED, new Undefined()); + } + case 53: break; case 18: { string.append('\n'); } + case 54: + break; + case 10: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INTEGER, new Long(Long.parseLong((yytext())))); + } case 55: break; - case 3: { - return new ParsedSymbol(ParsedSymbol.TYPE_BLOCK_END); - } - case 56: - break; - case 29: { - return new ParsedSymbol(ParsedSymbol.TYPE_UNDEFINED, new Undefined()); - } - case 57: - break; case 17: { string.append('\f'); } + case 56: + break; + case 8: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_COMMENT, yytext().substring(1)); + } + case 57: + break; + case 11: { + yybegin(YYINITIAL); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_START); + } case 58: break; case 21: { @@ -1012,7 +1013,7 @@ public final class FlasmLexer { if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; { - return new ParsedSymbol(ParsedSymbol.TYPE_EOF); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOF); } } else { zzScanError(ZZ_NO_MATCH); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/Label.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/Label.java similarity index 91% rename from trunk/src/com/jpexs/decompiler/flash/action/parser/Label.java rename to trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/Label.java index b7bb53be7..c38ce89a6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/Label.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/Label.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.jpexs.decompiler.flash.action.parser; +package com.jpexs.decompiler.flash.action.parser.pcode; public class Label { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/flasm.flex b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/flasm.flex similarity index 64% rename from trunk/src/com/jpexs/decompiler/flash/action/parser/flasm.flex rename to trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/flasm.flex index 2214292e8..d911a60a7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/flasm.flex +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/flasm.flex @@ -1,7 +1,8 @@ /* Flash assembler language lexer specification */ -package com.jpexs.decompiler.flash.action.parser; +package com.jpexs.decompiler.flash.action.parser.pcode; +import com.jpexs.decompiler.flash.action.parser.ParseException; import com.jpexs.decompiler.flash.action.swf4.ConstantIndex; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.swf4.Undefined; @@ -16,7 +17,7 @@ import com.jpexs.decompiler.flash.action.swf4.Null; %char %line %column -%type ParsedSymbol +%type ASMParsedSymbol %throws ParseException %{ @@ -104,14 +105,14 @@ Constant= constant{PositiveNumberLiteral} {Label} { String s=yytext(); - return new ParsedSymbol(ParsedSymbol.TYPE_LABEL,s.substring(0,s.length()-1)); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_LABEL,s.substring(0,s.length()-1)); } /* identifiers */ {InstructionName} { yybegin(PARAMETERS); - return new ParsedSymbol(ParsedSymbol.TYPE_INSTRUCTION_NAME,yytext()); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INSTRUCTION_NAME,yytext()); } - {EndOfBlock} { return new ParsedSymbol(ParsedSymbol.TYPE_BLOCK_END); } + {EndOfBlock} { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_END); } } { @@ -123,20 +124,20 @@ Constant= constant{PositiveNumberLiteral} /* numeric literals */ - {NumberLiteral} { return new ParsedSymbol(ParsedSymbol.TYPE_INTEGER,new Long(Long.parseLong((yytext())))); } - {FloatLiteral} { return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT,new Double(Double.parseDouble((yytext())))); } - {LineTerminator} {yybegin(YYINITIAL); return new ParsedSymbol(ParsedSymbol.TYPE_EOL); } - {Comment} {return new ParsedSymbol(ParsedSymbol.TYPE_COMMENT,yytext().substring(1));} - {StartOfBlock} { yybegin(YYINITIAL); return new ParsedSymbol(ParsedSymbol.TYPE_BLOCK_START); } - {True} {return new ParsedSymbol(ParsedSymbol.TYPE_BOOLEAN,Boolean.TRUE);} - {False} {return new ParsedSymbol(ParsedSymbol.TYPE_BOOLEAN,Boolean.FALSE);} - {Null} {return new ParsedSymbol(ParsedSymbol.TYPE_NULL,new Null());} - {Undefined} {return new ParsedSymbol(ParsedSymbol.TYPE_UNDEFINED,new Undefined());} + {NumberLiteral} { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INTEGER,new Long(Long.parseLong((yytext())))); } + {FloatLiteral} { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_FLOAT,new Double(Double.parseDouble((yytext())))); } + {LineTerminator} {yybegin(YYINITIAL); return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOL); } + {Comment} {return new ASMParsedSymbol(ASMParsedSymbol.TYPE_COMMENT,yytext().substring(1));} + {StartOfBlock} { yybegin(YYINITIAL); return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_START); } + {True} {return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN,Boolean.TRUE);} + {False} {return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN,Boolean.FALSE);} + {Null} {return new ASMParsedSymbol(ASMParsedSymbol.TYPE_NULL,new Null());} + {Undefined} {return new ASMParsedSymbol(ASMParsedSymbol.TYPE_UNDEFINED,new Undefined());} - {Register} { return new ParsedSymbol(ParsedSymbol.TYPE_REGISTER,new RegisterNumber(Integer.parseInt(yytext().substring(8)))); } - {Constant} { return new ParsedSymbol(ParsedSymbol.TYPE_CONSTANT,new ConstantIndex(Integer.parseInt(yytext().substring(8)))); } + {Register} { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_REGISTER,new RegisterNumber(Integer.parseInt(yytext().substring(8)))); } + {Constant} { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_CONSTANT,new ConstantIndex(Integer.parseInt(yytext().substring(8)))); } - {Identifier} { return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER,yytext()); } + {Identifier} { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_IDENTIFIER,yytext()); } } @@ -144,7 +145,7 @@ Constant= constant{PositiveNumberLiteral} \" { yybegin(PARAMETERS); // length also includes the trailing quote - return new ParsedSymbol(ParsedSymbol.TYPE_STRING,string.toString()); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_STRING,string.toString()); } {StringCharacter}+ { string.append( yytext() ); } @@ -169,4 +170,4 @@ Constant= constant{PositiveNumberLiteral} /* error fallback */ .|\n { } -<> { return new ParsedSymbol(ParsedSymbol.TYPE_EOF); } +<> { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOF); } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGetURL.java b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGetURL.java index 96e2d5d53..71a5bdf0d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGetURL.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGetURL.java @@ -19,8 +19,8 @@ package com.jpexs.decompiler.flash.action.swf3; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.treemodel.GetURLTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.helpers.Helper; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java index 62095cc7d..f043802fa 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java @@ -19,8 +19,8 @@ package com.jpexs.decompiler.flash.action.swf3; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.treemodel.GotoLabelTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.helpers.Helper; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java index 0dc8fd1c8..645cebec0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java @@ -19,8 +19,8 @@ package com.jpexs.decompiler.flash.action.swf3; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.treemodel.GotoFrameTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.io.ByteArrayOutputStream; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java index 3a9443c1b..7eed72792 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionSetTarget.java @@ -19,8 +19,8 @@ package com.jpexs.decompiler.flash.action.swf3; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.treemodel.SetTargetTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.helpers.Helper; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java index 3aef1c7a3..d4a06b6be 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java @@ -19,8 +19,8 @@ package com.jpexs.decompiler.flash.action.swf3; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.treemodel.WaitForFrameTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.io.ByteArrayOutputStream; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java index 0fe8bb407..3d0b791f2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java @@ -19,8 +19,8 @@ package com.jpexs.decompiler.flash.action.swf4; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.treemodel.GetURL2TreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.io.ByteArrayOutputStream; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java index c5313930d..8aab402b2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java @@ -19,8 +19,8 @@ package com.jpexs.decompiler.flash.action.swf4; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.treemodel.GotoFrame2TreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.io.ByteArrayOutputStream; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionIf.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionIf.java index a412e0060..03ca5aa5a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionIf.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionIf.java @@ -20,8 +20,8 @@ import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.ActionGraphSource; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.graph.GraphSource; import com.jpexs.decompiler.flash.graph.GraphSourceItem; import com.jpexs.decompiler.flash.helpers.Helper; @@ -48,6 +48,11 @@ public class ActionIf extends Action { this.offset = offset; } + public ActionIf(int offset) { + super(0x9D, 2); + setJumpOffset(offset); + } + public ActionIf(SWFInputStream sis) throws IOException { super(0x9D, 2); setJumpOffset(sis.readSI16()); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionJump.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionJump.java index 20406273d..d1d4d7259 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionJump.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionJump.java @@ -20,8 +20,8 @@ import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.ActionGraphSource; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.graph.GraphSource; import com.jpexs.decompiler.flash.graph.GraphSourceItem; import com.jpexs.decompiler.flash.helpers.Helper; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java index c4eb7444f..c024ae4a7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java @@ -19,9 +19,9 @@ package com.jpexs.decompiler.flash.action.swf4; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; -import com.jpexs.decompiler.flash.action.parser.ParsedSymbol; +import com.jpexs.decompiler.flash.action.parser.pcode.ASMParsedSymbol; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.treemodel.DirectValueTreeItem; import com.jpexs.decompiler.flash.graph.GraphSourceItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; @@ -142,6 +142,14 @@ public class ActionPush extends Action { return surroundWithAction(baos.toByteArray(), version); } + public ActionPush(Object... values) throws IOException, ParseException { + super(0x96, 0); + this.values = new ArrayList(); + for (Object o : values) { + this.values.add(o); + } + } + public ActionPush(FlasmLexer lexer, List constantPool) throws IOException, ParseException { super(0x96, 0); this.constantPool = constantPool; @@ -149,9 +157,9 @@ public class ActionPush extends Action { int count = 0; loop: while (true) { - ParsedSymbol symb = lexer.yylex(); + ASMParsedSymbol symb = lexer.yylex(); switch (symb.type) { - case ParsedSymbol.TYPE_STRING: + case ASMParsedSymbol.TYPE_STRING: count++; if (constantPool.contains((String) symb.value)) { values.add(new ConstantIndex(constantPool.indexOf(symb.value), constantPool)); @@ -159,24 +167,24 @@ public class ActionPush extends Action { values.add(symb.value); } break; - case ParsedSymbol.TYPE_FLOAT: - case ParsedSymbol.TYPE_NULL: - case ParsedSymbol.TYPE_UNDEFINED: - case ParsedSymbol.TYPE_REGISTER: - case ParsedSymbol.TYPE_BOOLEAN: - case ParsedSymbol.TYPE_INTEGER: - case ParsedSymbol.TYPE_CONSTANT: + case ASMParsedSymbol.TYPE_FLOAT: + case ASMParsedSymbol.TYPE_NULL: + case ASMParsedSymbol.TYPE_UNDEFINED: + case ASMParsedSymbol.TYPE_REGISTER: + case ASMParsedSymbol.TYPE_BOOLEAN: + case ASMParsedSymbol.TYPE_INTEGER: + case ASMParsedSymbol.TYPE_CONSTANT: count++; values.add(symb.value); break; - case ParsedSymbol.TYPE_EOL: - case ParsedSymbol.TYPE_EOF: + case ASMParsedSymbol.TYPE_EOL: + case ASMParsedSymbol.TYPE_EOF: if (count == 0) { throw new ParseException("Arguments expected", lexer.yyline()); } else { break loop; } - case ParsedSymbol.TYPE_COMMENT: + case ASMParsedSymbol.TYPE_COMMENT: break; default: throw new ParseException("Arguments expected", lexer.yyline()); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java index 018cdf53d..266a7c2a8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java @@ -19,8 +19,8 @@ package com.jpexs.decompiler.flash.action.swf4; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.treemodel.WaitForFrame2TreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.io.ByteArrayOutputStream; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java index 0f8a4e1e3..b5188bf68 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java @@ -19,9 +19,9 @@ package com.jpexs.decompiler.flash.action.swf5; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; -import com.jpexs.decompiler.flash.action.parser.ParsedSymbol; +import com.jpexs.decompiler.flash.action.parser.pcode.ASMParsedSymbol; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.helpers.Helper; import java.io.ByteArrayOutputStream; @@ -47,8 +47,8 @@ public class ActionConstantPool extends Action { public ActionConstantPool(FlasmLexer lexer) throws IOException, ParseException { super(0x88, 0); while (true) { - ParsedSymbol symb = lexer.yylex(); - if (symb.type == ParsedSymbol.TYPE_STRING) { + ASMParsedSymbol symb = lexer.yylex(); + if (symb.type == ASMParsedSymbol.TYPE_STRING) { constantPool.add((String) symb.value); } else { lexer.yypushback(lexer.yylength()); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java index cb4814dbb..24cc3a728 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java @@ -20,9 +20,9 @@ import com.jpexs.decompiler.flash.ReReadableInputStream; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; -import com.jpexs.decompiler.flash.action.parser.Label; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; +import com.jpexs.decompiler.flash.action.parser.pcode.Label; import com.jpexs.decompiler.flash.action.treemodel.FunctionTreeItem; import com.jpexs.decompiler.flash.graph.GraphSourceItem; import com.jpexs.decompiler.flash.graph.GraphSourceItemContainer; @@ -194,8 +194,6 @@ public class ActionDefineFunction extends Action implements GraphSourceItemConta return new HashMap(); } - - @Override public void translateContainer(List> content, Stack stack, List output, HashMap regNames, HashMap variables, HashMap functions) { FunctionTreeItem fti = new FunctionTreeItem(this, functionName, paramNames, content.get(0), constantPool, 1); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionStoreRegister.java b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionStoreRegister.java index 61c2756fa..717169449 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionStoreRegister.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionStoreRegister.java @@ -19,8 +19,8 @@ package com.jpexs.decompiler.flash.action.swf5; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.treemodel.StoreRegisterTreeItem; import com.jpexs.decompiler.flash.graph.GraphSourceItemPos; @@ -35,6 +35,11 @@ public class ActionStoreRegister extends Action { public int registerNumber; + public ActionStoreRegister(int registerNumber) { + super(0x87, 1); + this.registerNumber = registerNumber; + } + public ActionStoreRegister(SWFInputStream sis) throws IOException { super(0x87, 1); registerNumber = sis.readUI8(); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionWith.java b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionWith.java index b2570b6be..f5933e3e8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionWith.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionWith.java @@ -20,9 +20,9 @@ import com.jpexs.decompiler.flash.ReReadableInputStream; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; -import com.jpexs.decompiler.flash.action.parser.Label; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; +import com.jpexs.decompiler.flash.action.parser.pcode.Label; import com.jpexs.decompiler.flash.action.treemodel.clauses.WithTreeItem; import com.jpexs.decompiler.flash.graph.GraphSourceItem; import com.jpexs.decompiler.flash.graph.GraphSourceItemContainer; @@ -121,7 +121,7 @@ public class ActionWith extends Action implements GraphSourceItemContainer { public long getHeaderSize() { return surroundWithAction(new byte[]{0, 0}, version).length; } - + @Override public HashMap getRegNames() { return new HashMap(); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java b/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java index 8e3178133..83683bbd2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java @@ -20,9 +20,9 @@ import com.jpexs.decompiler.flash.ReReadableInputStream; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; -import com.jpexs.decompiler.flash.action.parser.Label; import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; +import com.jpexs.decompiler.flash.action.parser.pcode.Label; import com.jpexs.decompiler.flash.action.treemodel.FunctionTreeItem; import com.jpexs.decompiler.flash.graph.GraphSourceItem; import com.jpexs.decompiler.flash.graph.GraphSourceItemContainer; @@ -58,6 +58,25 @@ public class ActionDefineFunction2 extends Action implements GraphSourceItemCont public List constantPool; private long hdrSize; + public ActionDefineFunction2(String functionName, boolean preloadParentFlag, boolean preloadRootFlag, boolean suppressSuperFlag, boolean preloadSuperFlag, boolean suppressArgumentsFlag, boolean preloadArgumentsFlag, boolean suppressThisFlag, boolean preloadThisFlag, boolean preloadGlobalFlag, int registerCount, int codeSize, int version, List paramNames, List paramRegisters) { + super(0x8E, 0); + this.functionName = functionName; + this.preloadParentFlag = preloadParentFlag; + this.preloadRootFlag = preloadRootFlag; + this.suppressSuperFlag = suppressSuperFlag; + this.preloadSuperFlag = preloadSuperFlag; + this.suppressArgumentsFlag = suppressArgumentsFlag; + this.preloadArgumentsFlag = preloadArgumentsFlag; + this.suppressThisFlag = suppressThisFlag; + this.preloadThisFlag = preloadThisFlag; + this.preloadGlobalFlag = preloadGlobalFlag; + this.registerCount = registerCount; + this.codeSize = codeSize; + this.version = version; + this.paramNames = paramNames; + this.paramRegisters = paramRegisters; + } + public ActionDefineFunction2(int actionLength, SWFInputStream sis, ReReadableInputStream rri, int version) throws IOException { super(0x8E, actionLength); long posBef = sis.getPos(); @@ -284,7 +303,7 @@ public class ActionDefineFunction2 extends Action implements GraphSourceItemCont } @Override - public HashMap getRegNames(){ + public HashMap getRegNames() { HashMap funcRegNames = new HashMap(); for (int f = 0; f < paramNames.size(); f++) { int reg = paramRegisters.get(f); @@ -319,9 +338,9 @@ public class ActionDefineFunction2 extends Action implements GraphSourceItemCont } return funcRegNames; } - + @Override - public void translateContainer(List> content, Stack stack, List output, HashMap regNames, HashMap variables, HashMap functions) { + public void translateContainer(List> content, Stack stack, List output, HashMap regNames, HashMap variables, HashMap functions) { FunctionTreeItem fti = new FunctionTreeItem(this, functionName, paramNames, content.get(0), constantPool, getFirstRegister()); functions.put(functionName, fti); stack.push(fti); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionTry.java b/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionTry.java index 48abe2607..6251ef0b9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionTry.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionTry.java @@ -20,7 +20,10 @@ import com.jpexs.decompiler.flash.ReReadableInputStream; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.*; +import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.ASMParsedSymbol; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; +import com.jpexs.decompiler.flash.action.parser.pcode.Label; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.treemodel.DirectValueTreeItem; import com.jpexs.decompiler.flash.action.treemodel.TreeItem; @@ -98,14 +101,14 @@ public class ActionTry extends Action implements GraphSourceItemContainer { super(0x8F, 0); this.version = version; - ParsedSymbol symb = lexer.yylex(); - if (symb.type == ParsedSymbol.TYPE_STRING) { + ASMParsedSymbol symb = lexer.yylex(); + if (symb.type == ASMParsedSymbol.TYPE_STRING) { catchInRegisterFlag = false; catchName = (String) symb.value; - } else if (symb.type == ParsedSymbol.TYPE_REGISTER) { + } else if (symb.type == ASMParsedSymbol.TYPE_REGISTER) { catchRegister = (Integer) symb.value; catchInRegisterFlag = true; - } else if (symb.type == ParsedSymbol.TYPE_BLOCK_START) { + } else if (symb.type == ASMParsedSymbol.TYPE_BLOCK_START) { return; } else { throw new ParseException("Unknown symbol after Try", lexer.yyline()); @@ -202,16 +205,16 @@ public class ActionTry extends Action implements GraphSourceItemContainer { @Override public boolean parseDivision(int pos, long addr, FlasmLexer lexer) { try { - ParsedSymbol symb = lexer.yylex(); + ASMParsedSymbol symb = lexer.yylex(); //catchBlockFlag = false; - if (symb.type == ParsedSymbol.TYPE_INSTRUCTION_NAME) { + if (symb.type == ASMParsedSymbol.TYPE_INSTRUCTION_NAME) { if (((String) symb.value).toLowerCase().equals("catch")) { trySize = addr - getAddress() - getHeaderSize(); catchBlockFlag = true; lexBlockOpen(lexer); return true; } - if (symb.type == ParsedSymbol.TYPE_INSTRUCTION_NAME) { + if (symb.type == ASMParsedSymbol.TYPE_INSTRUCTION_NAME) { if (((String) symb.value).toLowerCase().equals("finally")) { if (catchBlockFlag) { catchSize = addr - getAddress() - getHeaderSize() - trySize; @@ -271,9 +274,9 @@ public class ActionTry extends Action implements GraphSourceItemContainer { public String toString() { return "Try"; } - + @Override - public HashMap getRegNames(){ + public HashMap getRegNames() { return new HashMap(); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetMemberTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetMemberTreeItem.java index 5c01e7402..0819dbcdb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetMemberTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetMemberTreeItem.java @@ -35,6 +35,10 @@ public class SetMemberTreeItem extends TreeItem implements SetTypeTreeItem { @Override public String toString(ConstantPool constants) { + if (!((objectName instanceof DirectValueTreeItem) && (((DirectValueTreeItem) objectName).value instanceof String))) { + //if(!(functionName instanceof GetVariableTreeItem)) + return object.toString(constants) + "[" + stripQuotes(objectName, constants) + "]" + "=" + value.toString(constants); + } return object.toString(constants) + "." + stripQuotes(objectName, constants) + "=" + value.toString(constants); } diff --git a/trunk/src/com/jpexs/decompiler/flash/graph/Graph.java b/trunk/src/com/jpexs/decompiler/flash/graph/Graph.java index 682420739..b9cd9e892 100644 --- a/trunk/src/com/jpexs/decompiler/flash/graph/Graph.java +++ b/trunk/src/com/jpexs/decompiler/flash/graph/Graph.java @@ -992,10 +992,9 @@ public class Graph { if (debugMode) { System.err.println("ONFALSE: (inside " + part + ")"); } - if((next == part.nextParts.get(0)) || (part.nextParts.get(0).path.equals(part.path) || part.nextParts.get(0).path.length() < part.path.length())) - { - onFalse=new ArrayList(); - }else{ + if ((next == part.nextParts.get(0)) || (part.nextParts.get(0).path.equals(part.path) || part.nextParts.get(0).path.length() < part.path.length())) { + onFalse = new ArrayList(); + } else { onFalse = (printGraph(prepareBranchLocalData(localData), falseStack, allParts, part, part.nextParts.get(0), next == null ? stopPart : next, loops, forFinalCommands)); } if (debugMode) { @@ -1009,13 +1008,13 @@ public class Graph { if (whileTrue) { retw = new ArrayList(); retw.add(new IfItem(null, expr, onTrue, onFalse)); - + List body = new ArrayList(); - if(next!=null){ - body=printGraph(prepareBranchLocalData(localData), stack, allParts, part,next, stopPart, loops, forFinalCommands); + if (next != null) { + body = printGraph(prepareBranchLocalData(localData), stack, allParts, part, next, stopPart, loops, forFinalCommands); } retw.addAll(body); - + retx.add(new WhileItem(null, whileTrueLoop, new TrueItem(null), retw)); next = null; } else { @@ -1056,7 +1055,7 @@ public class Graph { if (doWhile) { loopBodyStart = next; } - if(whileTrue){ + if (whileTrue) { loopBodyStart = part; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/graph/GraphSourceItemContainer.java b/trunk/src/com/jpexs/decompiler/flash/graph/GraphSourceItemContainer.java index eb7ee2c0d..b6bb3d6f6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/graph/GraphSourceItemContainer.java +++ b/trunk/src/com/jpexs/decompiler/flash/graph/GraphSourceItemContainer.java @@ -1,6 +1,6 @@ package com.jpexs.decompiler.flash.graph; -import com.jpexs.decompiler.flash.action.parser.FlasmLexer; +import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; import java.util.HashMap; import java.util.List; import java.util.Stack; @@ -20,6 +20,6 @@ public interface GraphSourceItemContainer { public boolean parseDivision(int pos, long addr, FlasmLexer lexer); public HashMap getRegNames(); - + public void translateContainer(List> contents, Stack stack, List output, HashMap regNames, HashMap variables, HashMap functions); } diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java b/trunk/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java index fb2146642..63c0d3acf 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java @@ -15,7 +15,6 @@ import java.awt.Graphics; import java.awt.Panel; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; -import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; @@ -84,8 +83,7 @@ public class FlashPlayerPanel extends Panel { SHELLEXECUTEINFO sei = new SHELLEXECUTEINFO(); sei.fMask = 0x00000040; - String path = new File(new File(".").getAbsolutePath()).getParentFile().getAbsolutePath(); - sei.lpFile = new WString(path + "\\lib\\FlashPlayer.exe"); + sei.lpFile = new WString("lib\\FlashPlayer.exe"); sei.lpParameters = new WString(hwnd.getPointer().hashCode() + " " + hwndFrame.getPointer().hashCode()); sei.nShow = WinUser.SW_NORMAL; Shell32.INSTANCE.ShellExecuteEx(sei);