AS3 parser - assign fix

This commit is contained in:
Jindra Pet��k
2014-04-04 19:30:24 +02:00
parent 8734eb3381
commit b44f35dd70
4 changed files with 29 additions and 2 deletions
@@ -1450,10 +1450,14 @@ public class ActionScriptParser {
if (!(expr instanceof AssignableAVM2Item)) {
throw new ParseException("Invalid assignment", lexer.yyline());
}
((AssignableAVM2Item) expr).setAssignedValue(assigned);
AssignableAVM2Item as = ((AssignableAVM2Item)expr).copy();
if(as instanceof NameAVM2Item){
variables.add((NameAVM2Item)as);
}
as.setAssignedValue(assigned);
if (expr instanceof NameAVM2Item) {
((NameAVM2Item) expr).setDefinition(false);
ret = expr;
ret = as;
}
ret = expr;
break;
@@ -49,6 +49,8 @@ public abstract class AssignableAVM2Item extends AVM2Item {
this(null);
}
public abstract AssignableAVM2Item copy();
public AssignableAVM2Item(GraphTargetItem storeValue) {
super(null, PRECEDENCE_PRIMARY);
this.assignedValue = storeValue;
@@ -65,6 +65,19 @@ public class NameAVM2Item extends AssignableAVM2Item {
public GraphTargetItem redirect;
@Override
public AssignableAVM2Item copy() {
NameAVM2Item c = new NameAVM2Item(type, line, variableName, assignedValue, definition, openedNamespaces);
c.setNs(ns);
c.regNumber = regNumber;
c.unresolved = unresolved;
c.nsKind = nsKind;
c.setIndex(index);
return c;
}
public void setNs(GraphTargetItem ns) {
this.ns = ns;
}
@@ -59,6 +59,14 @@ public class PropertyAVM2Item extends AssignableAVM2Item {
public GraphTargetItem index;
private List<Integer> openedNamespaces;
@Override
public AssignableAVM2Item copy() {
PropertyAVM2Item p =new PropertyAVM2Item(object, propertyName, index, abc, otherABCs, openedNamespaces);
return p;
}
public PropertyAVM2Item(GraphTargetItem object, String propertyName, GraphTargetItem index, ABC abc, List<ABC> otherABCs, List<Integer> openedNamespaces) {
this.propertyName = propertyName;
this.object = object;