diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java index f7aa985f9..fcbf21d60 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java @@ -92,6 +92,7 @@ import com.jpexs.decompiler.flash.action.model.operations.EqActionItem; import com.jpexs.decompiler.flash.action.model.operations.GeActionItem; import com.jpexs.decompiler.flash.action.model.operations.GtActionItem; import com.jpexs.decompiler.flash.action.model.operations.InstanceOfActionItem; +import com.jpexs.decompiler.flash.action.model.operations.LShiftActionItem; import com.jpexs.decompiler.flash.action.model.operations.LeActionItem; import com.jpexs.decompiler.flash.action.model.operations.LtActionItem; import com.jpexs.decompiler.flash.action.model.operations.ModuloActionItem; @@ -99,6 +100,7 @@ import com.jpexs.decompiler.flash.action.model.operations.MultiplyActionItem; import com.jpexs.decompiler.flash.action.model.operations.NeqActionItem; import com.jpexs.decompiler.flash.action.model.operations.PreDecrementActionItem; import com.jpexs.decompiler.flash.action.model.operations.PreIncrementActionItem; +import com.jpexs.decompiler.flash.action.model.operations.RShiftActionItem; import com.jpexs.decompiler.flash.action.model.operations.StrictEqActionItem; import com.jpexs.decompiler.flash.action.model.operations.StrictNeqActionItem; import com.jpexs.decompiler.flash.action.model.operations.SubtractActionItem; @@ -121,6 +123,7 @@ import com.jpexs.decompiler.graph.model.ContinueItem; import com.jpexs.decompiler.graph.model.DoWhileItem; import com.jpexs.decompiler.graph.model.ForItem; import com.jpexs.decompiler.graph.model.IfItem; +import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.decompiler.graph.model.NotItem; import com.jpexs.decompiler.graph.model.OrItem; import com.jpexs.decompiler.graph.model.ParenthesisItem; @@ -173,13 +176,13 @@ public class ActionScriptParser { GraphTargetItem ret = null; ParsedSymbol s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.STRING_OP); ret = new VariableActionItem(s.value.toString(), null, false); variables.add((VariableActionItem) ret); s = lex(); while (s.type == SymbolType.DOT) { s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.STRING_OP); ret = new GetMemberActionItem(null, ret, pushConst(s.value.toString())); s = lex(); } @@ -243,7 +246,7 @@ public class ActionScriptParser { private GraphTargetItem variable(HashMap registerVars, boolean inFunction, boolean inMethod, List variables) throws IOException, ParseException { GraphTargetItem ret = null; ParsedSymbol s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER); + expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP); ret = new VariableActionItem(s.value.toString(), null, false); variables.add((VariableActionItem) ret); ret = (member(ret, registerVars, inFunction, inMethod, variables)); @@ -378,6 +381,8 @@ public class ActionScriptParser { GetMemberActionItem mem = (GetMemberActionItem) nameStr; if (mem.memberName instanceof VariableActionItem) { classNameStr = ((VariableActionItem) mem.memberName).getVariableName(); + }else if(mem.memberName instanceof DirectValueActionItem){ + classNameStr = ((DirectValueActionItem)mem.memberName).toStringNoQuotes(LocalData.empty); } } else if (nameStr instanceof VariableActionItem) { VariableActionItem var = (VariableActionItem) nameStr; @@ -1333,7 +1338,7 @@ public class ActionScriptParser { private GraphTargetItem expressionRemainder(GraphTargetItem expr, HashMap registerVars, boolean inFunction, boolean inMethod, boolean allowRemainder, List variables) throws IOException, ParseException { GraphTargetItem ret = null; ParsedSymbol s = lex(); - switch (s.type) { + switch (s.type) { case DOT: lexer.pushback(s); ret = memberOrCall(expr, registerVars, inFunction, inMethod, variables); @@ -1344,6 +1349,12 @@ public class ActionScriptParser { GraphTargetItem terOnFalse = expression(registerVars, inFunction, inMethod, false, variables); ret = new TernarOpItem(null, expr, terOnTrue, terOnFalse); break; + case SHIFT_LEFT: + ret = new LShiftActionItem(null, expr, expression(registerVars, inFunction, inMethod, false, variables)); + break; + case SHIFT_RIGHT: + ret = new RShiftActionItem(null, expr, expression(registerVars, inFunction, inMethod, false, variables)); + break; case BITAND: ret = new BitAndActionItem(null, expr, expression(registerVars, inFunction, inMethod, false, variables)); break;