Issue #866 Unary operators associativity fix (! for example)

This commit is contained in:
Jindra Petřík
2015-05-30 20:53:43 +02:00
parent e49dc85db6
commit 61107b2fd3
2 changed files with 11 additions and 11 deletions

View File

@@ -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:

View File

@@ -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);