From 61107b2fd3855c78ad90c6e122b0df4bac62fa4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 30 May 2015 20:53:43 +0200 Subject: [PATCH] Issue #866 Unary operators associativity fix (! for example) --- .../abc/avm2/parser/script/ActionScriptParser.java | 10 +++++----- .../action/parser/script/ActionScriptParser.java | 12 ++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java index 9fc51c7df..c93a5435f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java @@ -2042,7 +2042,7 @@ public class ActionScriptParser { allowMemberOrCall = true; break; case NEGATE: - ret = expression(thisType, pkg, needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, false, variables); + ret = expressionPrimary(thisType, pkg, needsActivation, importedClasses, openedNamespaces, false, registerVars, inFunction, inMethod, false, variables); ret = new NegAVM2Item(null, ret); break; @@ -2056,7 +2056,7 @@ public class ActionScriptParser { } else { lexer.pushback(s); - GraphTargetItem num = expression(thisType, pkg, needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, true, variables); + GraphTargetItem num = expressionPrimary(thisType, pkg, needsActivation, importedClasses, openedNamespaces, false, registerVars, inFunction, inMethod, true, variables); if (num instanceof IntegerValueAVM2Item) { ((IntegerValueAVM2Item) num).value = -((IntegerValueAVM2Item) num).value; ret = num; @@ -2074,7 +2074,7 @@ public class ActionScriptParser { } break; case TYPEOF: - ret = new TypeOfAVM2Item(null, expression(thisType, pkg, needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, false, variables)); + ret = new TypeOfAVM2Item(null, expressionPrimary(thisType, pkg, needsActivation, importedClasses, openedNamespaces, false, registerVars, inFunction, inMethod, false, variables)); break; case TRUE: ret = new BooleanAVM2Item(null, true); @@ -2153,7 +2153,7 @@ public class ActionScriptParser { break; case DELETE: - GraphTargetItem varDel = expression(thisType, pkg, needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, true, variables);//name(thisType,false, openedNamespaces, registerVars, inFunction, inMethod, variables); + GraphTargetItem varDel = expressionPrimary(thisType, pkg, needsActivation, importedClasses, openedNamespaces, false, registerVars, inFunction, inMethod, true, variables);//name(thisType,false, openedNamespaces, registerVars, inFunction, inMethod, variables); if (!isNameOrProp(varDel)) { throw new AVM2ParseException("Not a property or name", lexer.yyline()); } @@ -2174,7 +2174,7 @@ public class ActionScriptParser { break; case NOT: - ret = new NotItem(null, expression(thisType, pkg, needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, false, variables)); + ret = new NotItem(null, expressionPrimary(thisType, pkg, needsActivation, importedClasses, openedNamespaces, false, registerVars, inFunction, inMethod, false, variables)); break; case PARENT_OPEN: diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java index 0e3286482..b13b9df6a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java @@ -1572,7 +1572,7 @@ public class ActionScriptParser { switch (s.type) { case NEGATE: versionRequired(s, 5); - ret = expression(inFunction, inMethod, false, variables); + ret = expressionPrimary(false, inFunction, inMethod, false, variables); ret = new BitXorActionItem(null, ret, new DirectValueActionItem(4.294967295E9)); break; @@ -1586,7 +1586,7 @@ public class ActionScriptParser { } else { lexer.pushback(s); - GraphTargetItem num = expression(inFunction, inMethod, true, variables); + GraphTargetItem num = expressionPrimary(false, inFunction, inMethod, true, variables); if ((num instanceof DirectValueActionItem) && (((DirectValueActionItem) num).value instanceof Long)) { ((DirectValueActionItem) num).value = -(Long) ((DirectValueActionItem) num).value; @@ -1610,7 +1610,7 @@ public class ActionScriptParser { } break; case TYPEOF: - ret = new TypeOfActionItem(null, expression(inFunction, inMethod, false, variables)); + ret = new TypeOfActionItem(null, expressionPrimary(false, inFunction, inMethod, false, variables)); allowMemberOrCall = true; break; case TRUE: @@ -1689,7 +1689,7 @@ public class ActionScriptParser { break; case DELETE: - GraphTargetItem varDel = expression(inFunction, inMethod, false, variables); + GraphTargetItem varDel = expressionPrimary(false, inFunction, inMethod, false, variables); if (varDel instanceof GetMemberActionItem) { GetMemberActionItem gm = (GetMemberActionItem) varDel; ret = new DeleteActionItem(null, gm.object, gm.memberName); @@ -1709,7 +1709,7 @@ public class ActionScriptParser { break; case NOT: - ret = new NotItem(null, expression(inFunction, inMethod, false, variables)); + ret = new NotItem(null, expressionPrimary(false, inFunction, inMethod, false, variables)); break; case PARENT_OPEN: @@ -1744,7 +1744,7 @@ public class ActionScriptParser { case THIS: case SUPER: if (s.value.equals("not")) { - ret = new NotItem(null, expression(inFunction, inMethod, false, variables)); + ret = new NotItem(null, expressionPrimary(false, inFunction, inMethod, false, variables)); } else { ret = new VariableActionItem(s.value.toString(), null, false); variables.add((VariableActionItem) ret);