From 5d4517fd003983ff5448ae506b297d8ee25c9406 Mon Sep 17 00:00:00 2001 From: Honfika Date: Fri, 28 Mar 2014 22:33:39 +0100 Subject: [PATCH] loop mismatch problem fixed, do-while formatting fixed, added some code formatting properties --- .../flash/abc/avm2/model/WithAVM2Item.java | 6 ++++- .../avm2/model/clauses/ForEachInAVM2Item.java | 6 ++++- .../abc/avm2/model/clauses/ForInAVM2Item.java | 6 ++++- .../flash/abc/types/traits/Traits.java | 3 ++- .../action/model/clauses/ForInActionItem.java | 6 ++++- .../action/model/clauses/TryActionItem.java | 6 ++++- .../action/model/clauses/WithActionItem.java | 6 ++++- .../flash/helpers/CodeFormatting.java | 25 +++++++++++++++++++ .../decompiler/graph/model/DoWhileItem.java | 9 ++++--- .../jpexs/decompiler/graph/model/ForItem.java | 6 ++++- .../jpexs/decompiler/graph/model/IfItem.java | 6 ++++- .../decompiler/graph/model/SwitchItem.java | 6 ++++- .../graph/model/UniversalLoopItem.java | 6 ++++- .../decompiler/graph/model/WhileItem.java | 6 ++++- 14 files changed, 88 insertions(+), 15 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java index 5fa82cf80..a326c870b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java @@ -43,7 +43,11 @@ public class WithAVM2Item extends AVM2Item { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - writer.append("with("); + writer.append("with"); + if (writer.getFormatting().spaceBeforeParenthesesWithParentheses) { + writer.append(" "); + } + writer.append("("); scope.toString(writer, localData); writer.append(")").newLine(); writer.append("{").newLine(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java index ded67593f..5556a9156 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java @@ -82,7 +82,11 @@ public class ForEachInAVM2Item extends LoopItem implements Block { if (labelUsed) { writer.append("loop" + loop.id + ":").newLine(); } - writer.append("for each ("); + writer.append("for each"); + if (writer.getFormatting().spaceBeforeParenthesesForEachParentheses) { + writer.append(" "); + } + writer.append("("); expression.toString(writer, localData); writer.append(")").newLine(); writer.append("{").newLine(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java index 911b78a4c..157e447a9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java @@ -82,7 +82,11 @@ public class ForInAVM2Item extends LoopItem implements Block { if (labelUsed) { writer.append("loop" + loop.id + ":").newLine(); } - writer.append("for ("); + writer.append("for"); + if (writer.getFormatting().spaceBeforeParenthesesForParentheses) { + writer.append(" "); + } + writer.append("("); expression.toString(writer, localData); writer.append(")").newLine(); writer.append("{").newLine(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java index c9d554e69..5864f5824 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java @@ -159,7 +159,8 @@ public class Traits implements Serializable { futureResults = new ArrayList<>(); for (int t = 0; t < traits.size(); t++) { - TraitConvertTask task = new TraitConvertTask(traits.get(t), parent, makePackages, path, abcTags, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, t, parallel); + // each convert task needs a separate NulWriter, because they are executed parallel + TraitConvertTask task = new TraitConvertTask(traits.get(t), parent, makePackages, path, abcTags, abc, isStatic, exportMode, scriptIndex, classIndex, new NulWriter(), fullyQualifiedNames, t, parallel); Future future = executor.submit(task); futureResults.add(future); } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java index bbe07ed5c..0c25383c3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/ForInActionItem.java @@ -81,7 +81,11 @@ public class ForInActionItem extends LoopActionItem implements Block { if (labelUsed) { writer.append("loop" + loop.id + ":").newLine(); } - writer.append("for("); + writer.append("for"); + if (writer.getFormatting().spaceBeforeParenthesesForParentheses) { + writer.append(" "); + } + writer.append("("); if ((variableName instanceof DirectValueActionItem) && (((DirectValueActionItem) variableName).value instanceof RegisterNumber)) { writer.append("var "); } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java index be17901b2..b4c1dc01e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/TryActionItem.java @@ -76,7 +76,11 @@ public class TryActionItem extends ActionItem implements Block { writer.append("}"); for (int e = 0; e < catchExceptions.size(); e++) { writer.newLine(); - writer.append("catch("); + writer.append("catch"); + if (writer.getFormatting().spaceBeforeParenthesesCatchParentheses) { + writer.append(" "); + } + writer.append("("); catchExceptions.get(e).toStringNoQuotes(writer, localData); writer.append(")").newLine(); writer.append("{").newLine(); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/WithActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/WithActionItem.java index 867dbd77f..f9f24607b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/WithActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/clauses/WithActionItem.java @@ -48,7 +48,11 @@ public class WithActionItem extends ActionItem { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - writer.append("with("); + writer.append("with"); + if (writer.getFormatting().spaceBeforeParenthesesWithParentheses) { + writer.append(" "); + } + writer.append("("); scope.toString(writer, localData); writer.append(")").newLine(); writer.append("{").newLine(); diff --git a/trunk/src/com/jpexs/decompiler/flash/helpers/CodeFormatting.java b/trunk/src/com/jpexs/decompiler/flash/helpers/CodeFormatting.java index 28acc5665..7297326ff 100644 --- a/trunk/src/com/jpexs/decompiler/flash/helpers/CodeFormatting.java +++ b/trunk/src/com/jpexs/decompiler/flash/helpers/CodeFormatting.java @@ -25,4 +25,29 @@ public class CodeFormatting { public String newLineChars = "\r\n"; public String indentString = " "; public boolean beginBlockOnNewLine = true; + + // spaces + // before parentheses + public boolean spaceBeforeParenthesesMethodCallParentheses = false; + public boolean spaceBeforeParenthesesMethodCallEmptyParentheses = false; + public boolean spaceBeforeArrayAccessBrackets = false; + public boolean spaceBeforeParenthesesMethodDeclarationParentheses = false; + public boolean spaceBeforeParenthesesMethodDeclarationEmptyParentheses = false; + public boolean spaceBeforeParenthesesIfParentheses = false; + public boolean spaceBeforeParenthesesWithParentheses = false; + public boolean spaceBeforeParenthesesWhileParentheses = false; + public boolean spaceBeforeParenthesesCatchParentheses = false; + public boolean spaceBeforeParenthesesSwitchParentheses = false; + public boolean spaceBeforeParenthesesForParentheses = false; + public boolean spaceBeforeParenthesesForEachParentheses = false; + + // around operators + public boolean spaceAroundOperatorsAssignmentOperators = false; // =, +=,... + public boolean spaceAroundOperatorsLogicalOperators = false; // &&, || + public boolean spaceAroundOperatorsEqualityOperators = false; // ==, != + public boolean spaceAroundOperatorsRelationalOperator = false; // <, >, <=, >= + public boolean spaceAroundOperatorsBitwiseOperator = false; // &, |, ^ + public boolean spaceAroundOperatorsAdditiveOperator = false; // +, - + public boolean spaceAroundOperatorsMultiplicativeOperator = false; // *, /, % + public boolean spaceAroundOperatorsShiftOperator = false; // <<, >> } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java b/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java index 644aa638a..7ade97552 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java @@ -65,14 +65,17 @@ public class DoWhileItem extends LoopItem implements Block { } writer.append("do"); writer.startBlock(); - writer.indent(); for (GraphTargetItem ti : commands) { if (!ti.isEmpty()) { ti.toStringSemicoloned(writer, localData).newLine(); } } - writer.endBlock(); - writer.append("while("); + writer.endBlock().newLine(); + writer.append("while"); + if (writer.getFormatting().spaceBeforeParenthesesWhileParentheses) { + writer.append(" "); + } + writer.append("("); for (int i = 0; i < expression.size(); i++) { if (expression.get(i).isEmpty()) { diff --git a/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java b/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java index b63f556ae..1366cc36e 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java @@ -68,7 +68,11 @@ public class ForItem extends LoopItem implements Block { if (labelUsed) { writer.append("loop" + loop.id + ":").newLine(); } - writer.append("for("); + writer.append("for"); + if (writer.getFormatting().spaceBeforeParenthesesForParentheses) { + writer.append(" "); + } + writer.append("("); int p = 0; for (int i = 0; i < firstCommands.size(); i++) { if (firstCommands.get(i).isEmpty()) { diff --git a/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java b/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java index 80107c21e..586df72e1 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java @@ -81,7 +81,11 @@ public class IfItem extends GraphTargetItem implements Block { elseBranch = onTrue; } } - writer.append("if("); + writer.append("if"); + if (writer.getFormatting().spaceBeforeParenthesesIfParentheses) { + writer.append(" "); + } + writer.append("("); expr.toString(writer, localData); writer.append(")").startBlock(); for (GraphTargetItem ti : ifBranch) { diff --git a/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java b/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java index c9e7649a0..7465d1b91 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java @@ -70,7 +70,11 @@ public class SwitchItem extends LoopItem implements Block { if (labelUsed) { writer.append("loopswitch" + loop.id + ":").newLine(); } - writer.append("switch("); + writer.append("switch"); + if (writer.getFormatting().spaceBeforeParenthesesSwitchParentheses) { + writer.append(" "); + } + writer.append("("); switchedObject.toString(writer, localData); writer.append(")").startBlock(); for (int i = 0; i < caseCommands.size(); i++) { diff --git a/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java b/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java index c66c93787..d859e1c44 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java @@ -53,7 +53,11 @@ public class UniversalLoopItem extends LoopItem implements Block { if (labelUsed) { writer.append("loop" + loop.id + ":").newLine(); } - writer.append("while(true)").startBlock(); + writer.append("while").startBlock(); + if (writer.getFormatting().spaceBeforeParenthesesWhileParentheses) { + writer.append(" "); + } + writer.append("(true)").startBlock(); for (GraphTargetItem ti : commands) { if (!ti.isEmpty()) { ti.toStringSemicoloned(writer, localData).newLine(); diff --git a/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java b/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java index be6294ee9..87aab30b4 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java @@ -58,7 +58,11 @@ public class WhileItem extends LoopItem implements Block { if (labelUsed) { writer.append("loop" + loop.id + ":").newLine(); } - writer.append("while("); + writer.append("while"); + if (writer.getFormatting().spaceBeforeParenthesesWhileParentheses) { + writer.append(" "); + } + writer.append("("); for (int i = 0; i < expression.size(); i++) { if (expression.get(i).isEmpty()) { continue;