diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java index 971a185b2..667ebd817 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java @@ -18,7 +18,9 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PopIns; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -96,19 +98,31 @@ public abstract class AVM2Item extends GraphTargetItem { } /*@Override - public boolean hasReturnValue() { - return false; - }*/ - + public boolean hasReturnValue() { + return false; + }*/ @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { - if(!hasReturnValue()){ + if (!hasReturnValue()) { return toSource(localData, generator); } - List ret=toSource(localData, generator); + List ret = toSource(localData, generator); ret.add(new AVM2Instruction(0, new PopIns(), new int[]{}, new byte[0])); return ret; } - - + + protected AVM2Instruction ins(InstructionDefinition def, int... operands) { + return new AVM2Instruction(0, def, operands, new byte[0]); + } + + protected int getFreeRegister(SourceGeneratorLocalData localData, SourceGenerator generator) { + AVM2SourceGenerator g = (AVM2SourceGenerator) generator; + return g.getFreeRegister(localData); + } + + protected void killRegister(SourceGeneratorLocalData localData, SourceGenerator generator, int regNumber) { + AVM2SourceGenerator g = (AVM2SourceGenerator) generator; + g.killRegister(localData, regNumber); + } + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java index 3f94d8944..a9ab1855d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java @@ -43,12 +43,12 @@ public class AlchemyLoadAVM2Item extends AVM2Item { ofs.toString(writer, localData); return writer.append(") /*Alchemy*/"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java index dc476d858..c2f38edb1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java @@ -42,12 +42,12 @@ public class AlchemySignExtendAVM2Item extends AVM2Item { value.toString(writer, localData); return writer.append(") /*Alchemy*/"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java index 2ab27db44..e5dc869cb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java @@ -46,12 +46,12 @@ public class AlchemyStoreAVM2Item extends AVM2Item { value.toString(writer, localData); return writer.append(") /*Alchemy*/"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java index 42040e6da..e5ecbcc50 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java @@ -54,12 +54,12 @@ public class ApplyTypeAVM2Item extends AVM2Item { } return writer; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java index d3dda5f13..77a11923a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java @@ -52,19 +52,19 @@ public class BooleanAVM2Item extends AVM2Item { public boolean isCompileTime(Set dependencies) { return true; } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, - new AVM2Instruction(0, value?new PushTrueIns():new PushFalseIns(), new int[]{}, new byte[0]) + return toSourceMerge(localData, generator, + new AVM2Instruction(0, value ? new PushTrueIns() : new PushFalseIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return TypeItem.BOOLEAN; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java index b37ea42ff..b249f48b0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java @@ -62,12 +62,12 @@ public class CallAVM2Item extends AVM2Item { } return writer.append(")"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java index d160e5831..5f27ad881 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java @@ -51,11 +51,12 @@ public class CallMethodAVM2Item extends AVM2Item { } return writer.append(")"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; //FIXME } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java index a36d6d2c3..7a7b8e6ab 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java @@ -56,20 +56,19 @@ public class CallPropertyAVM2Item extends AVM2Item { } return writer.append(")"); } - - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, receiver, arguments, - new AVM2Instruction(0, new CallPropertyIns(), new int[]{((AVM2SourceGenerator)generator).propertyName(propertyName),arguments.size()}, new byte[0]) + return toSourceMerge(localData, generator, receiver, arguments, + new AVM2Instruction(0, new CallPropertyIns(), new int[]{((AVM2SourceGenerator) generator).propertyName(propertyName), arguments.size()}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java index 4f937ab95..062d74188 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java @@ -51,12 +51,12 @@ public class CallStaticAVM2Item extends AVM2Item { } return writer.append(")"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java index 5bd867356..517c66dd2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java @@ -56,12 +56,12 @@ public class CallSuperAVM2Item extends AVM2Item { } return writer.append(")"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java index 8376cedd3..957490a5f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java @@ -35,12 +35,12 @@ public class ClassAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append(className.getName(localData.constantsAvm2, localData.fullyQualifiedNames)); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java index cfa7ca065..967e2b2fa 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java @@ -104,9 +104,8 @@ public class CoerceAVM2Item extends AVM2Item { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { /*if (value.returnType().toString().equals(type)) { - return toSourceMerge(localData, generator, value); - }*/ - + return toSourceMerge(localData, generator, value); + }*/ AVM2Instruction ins; switch (type) { case "*": diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java index fa5042ce4..d0366366d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java @@ -51,12 +51,12 @@ public class ConstructAVM2Item extends AVM2Item { } return writer.append(")"); } - + @Override public GraphTargetItem returnType() { return object.returnType(); } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java index 2f9f4b3a4..5565f31a1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java @@ -55,12 +55,12 @@ public class ConstructPropAVM2Item extends AVM2Item { } return writer.append(")"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java index 0bdee77ff..42997bf5a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java @@ -54,12 +54,12 @@ public class ConstructSuperAVM2Item extends AVM2Item { } return writer.append(")"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return false; @@ -71,6 +71,5 @@ public class ConstructSuperAVM2Item extends AVM2Item { new AVM2Instruction(0, new ConstructSuperIns(), new int[]{args.size()}, new byte[0]) ); } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java index ddc84044b..f6a162464 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java @@ -73,12 +73,12 @@ public class ConvertAVM2Item extends AVM2Item { dependencies.add(value); return value.isCompileTime(dependencies); } - + @Override public GraphTargetItem returnType() { return new TypeItem(type); } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java index 89b85ef09..fda55f8af 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java @@ -36,12 +36,12 @@ public class DecLocalAVM2Item extends AVM2Item { writer.append(localRegName(localData.localRegNames, regIndex)); return writer.append("--"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java index 59adbcbb7..6df33959c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java @@ -50,12 +50,12 @@ public class DecrementAVM2Item extends AVM2Item { public Object getResult() { return EcmaScript.toNumber(value.getResult()) - 1; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java index 06e8b61e8..d7ee97a47 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java @@ -40,12 +40,12 @@ public class DefaultXMLNamespace extends AVM2Item { writer.append("default xml namespace = "); return ns.toString(writer, localData); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java index b7cd7fb0c..8bfbabe78 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java @@ -39,12 +39,12 @@ public class EscapeXAttrAVM2Item extends AVM2Item { value.toString(writer, localData); return writer.append("}"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java index ff4691195..ff8a032be 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java @@ -41,12 +41,12 @@ public class EscapeXElemAVM2Item extends AVM2Item { expression.toString(writer, localData); return writer.append("}"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java index fba6b85ba..573e18f15 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java @@ -39,12 +39,12 @@ public class FilteredCheckAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { return object.toString(writer, localData); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindDefAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindDefAVM2Item.java index ecbbe9ab1..9ec0b9f73 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindDefAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindDefAVM2Item.java @@ -36,12 +36,12 @@ public class FindDefAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append(propertyName.getNamespace(localData.constantsAvm2).getName(localData.constantsAvm2)); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java index 1dceca589..a8bd170e8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java @@ -35,12 +35,12 @@ public class FindPropertyAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java index b360e00ab..4a2a76b66 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java @@ -52,19 +52,19 @@ public class FloatValueAVM2Item extends NumberValueAVM2Item { public boolean isCompileTime(Set dependencies) { return true; } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, - new AVM2Instruction(0, new PushDoubleIns(), new int[]{((AVM2SourceGenerator)generator).abc.constants.getDoubleId(value, true)}, new byte[0]) + return toSourceMerge(localData, generator, + new AVM2Instruction(0, new PushDoubleIns(), new int[]{((AVM2SourceGenerator) generator).abc.constants.getDoubleId(value, true)}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java index 5a50a564f..2c40df52b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java @@ -154,12 +154,12 @@ public class FullMultinameAVM2Item extends AVM2Item { } return true; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java index df433febc..cc06677fb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java @@ -39,12 +39,12 @@ public class GetDescendantsAVM2Item extends AVM2Item { writer.append(".."); return multiname.toString(writer, localData); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java index e000046d3..bc6775714 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java @@ -36,12 +36,12 @@ public class GetLexAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append(propertyName.getName(localData.constantsAvm2, localData.fullyQualifiedNames)); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java index bd736297a..fdc63e6e5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java @@ -43,19 +43,19 @@ public class GetPropertyAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { return formatProperty(writer, object, propertyName, localData); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, object, - new AVM2Instruction(0, new GetPropertyIns(), new int[]{((AVM2SourceGenerator)generator).propertyName(propertyName)}, new byte[0]) + return toSourceMerge(localData, generator, object, + new AVM2Instruction(0, new GetPropertyIns(), new int[]{((AVM2SourceGenerator) generator).propertyName(propertyName)}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java index 8aa222426..a42999f00 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java @@ -41,12 +41,12 @@ public class GetSlotAVM2Item extends AVM2Item { } return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames)); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java index c6341c427..5459b0b51 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java @@ -45,12 +45,12 @@ public class GetSuperAVM2Item extends AVM2Item { writer.append("super."); return propertyName.toString(writer, localData); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java index d01bd0e34..aa4345d7a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java @@ -43,12 +43,12 @@ public class HasNextAVM2Item extends AVM2Item { writer.append(" hasNext "); return object.toString(writer, localData); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java index f7d5159c8..e9b730b4b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java @@ -39,12 +39,12 @@ public class InAVM2Item extends AVM2Item { writer.append(" in "); return collection.toString(writer, localData); } - + @Override public GraphTargetItem returnType() { return TypeItem.BOOLEAN; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java index d39e85a3a..334e83aa9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java @@ -36,12 +36,12 @@ public class IncLocalAVM2Item extends AVM2Item { writer.append(localRegName(localData.localRegNames, regIndex)); return writer.append("++"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java index cd1aab7c8..7401517d5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java @@ -50,12 +50,12 @@ public class IncrementAVM2Item extends AVM2Item { public Object getResult() { return EcmaScript.toNumber(value.getResult()) + 1; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java index 99041313f..c4f2ee3e0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java @@ -52,12 +52,12 @@ public class InitPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, A public GraphTargetItem getValue() { return value; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java index c235281f4..e11396b5a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java @@ -63,17 +63,17 @@ public class IntegerValueAVM2Item extends NumberValueAVM2Item { } else if (value >= 0 && value <= 65535) { ins = new AVM2Instruction(0, new PushShortIns(), new int[]{(int) (long) value}, new byte[0]); } else { - ins = new AVM2Instruction(0, new PushIntIns(), new int[]{((AVM2SourceGenerator)generator).abc.constants.getIntId(value, true)}, new byte[0]); + ins = new AVM2Instruction(0, new PushIntIns(), new int[]{((AVM2SourceGenerator) generator).abc.constants.getIntId(value, true)}, new byte[0]); } return toSourceMerge(localData, generator, ins); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java index 6b2eea6f7..29c4b8cce 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java @@ -86,35 +86,35 @@ public class LocalRegAVM2Item extends AVM2Item { public boolean isCompileTime(Set dependencies) { return isCT; } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { AVM2Instruction ins; - switch(regIndex){ - case 0: - ins = new AVM2Instruction(0, new GetLocal0Ins(), new int[]{},new byte[0]); + switch (regIndex) { + case 0: + ins = new AVM2Instruction(0, new GetLocal0Ins(), new int[]{}, new byte[0]); break; - case 1: - ins = new AVM2Instruction(0, new GetLocal1Ins(), new int[]{},new byte[0]); + case 1: + ins = new AVM2Instruction(0, new GetLocal1Ins(), new int[]{}, new byte[0]); break; - case 2: - ins = new AVM2Instruction(0, new GetLocal2Ins(), new int[]{},new byte[0]); + case 2: + ins = new AVM2Instruction(0, new GetLocal2Ins(), new int[]{}, new byte[0]); break; - case 3: - ins = new AVM2Instruction(0, new GetLocal3Ins(), new int[]{},new byte[0]); + case 3: + ins = new AVM2Instruction(0, new GetLocal3Ins(), new int[]{}, new byte[0]); break; default: - ins = new AVM2Instruction(0, new GetLocalIns(), new int[]{regIndex},new byte[0]); + ins = new AVM2Instruction(0, new GetLocalIns(), new int[]{regIndex}, new byte[0]); break; } return toSourceMerge(localData, generator, ins); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java index c10c0c2de..135a9971e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java @@ -36,16 +36,16 @@ public class NameSpaceAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { if (namespaceIndex == 0) { return writer.append("*"); - } + } ConstantPool constants = localData.constantsAvm2; return writer.append(constants.getNamespace(namespaceIndex).toString(constants)); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java index 9eb86a4f8..d47e7e852 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java @@ -46,12 +46,12 @@ public class NameValuePair extends AVM2Item { } return writer; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java index b45148f27..73272f176 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java @@ -37,19 +37,19 @@ public class NanAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append("NaN"); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, + return toSourceMerge(localData, generator, new AVM2Instruction(0, new PushNanIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java index 956b263b5..f3af90b9f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java @@ -35,12 +35,12 @@ public class NewActivationAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append("newactivation()"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java index ee57536b5..ef895a902 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java @@ -47,12 +47,12 @@ public class NewArrayAVM2Item extends AVM2Item { } return writer.append("]"); } - + @Override public GraphTargetItem returnType() { return TypeItem.ARRAY; } - + @Override public boolean hasReturnValue() { return true; @@ -62,8 +62,7 @@ public class NewArrayAVM2Item extends AVM2Item { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, values, new AVM2Instruction(0, new NewArrayIns(), new int[]{values.size()}, new byte[0]) - ); + ); } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java index c80ec87a1..5bb7cfcc6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java @@ -79,12 +79,12 @@ public class NewFunctionAVM2Item extends AVM2Item { writer.append("}"); return writer; } - + @Override public GraphTargetItem returnType() { return new TypeItem("Function"); } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java index 6cf3b357e..f955d9218 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java @@ -65,12 +65,12 @@ public class NewObjectAVM2Item extends AVM2Item { } return writer; } - + @Override public GraphTargetItem returnType() { return new TypeItem("Object"); } - + @Override public boolean hasReturnValue() { return true; @@ -78,15 +78,14 @@ public class NewObjectAVM2Item extends AVM2Item { @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - List args=new ArrayList<>(); - for(NameValuePair p:pairs){ + List args = new ArrayList<>(); + for (NameValuePair p : pairs) { args.add(p.name); args.add(p.value); } return toSourceMerge(localData, generator, args, new AVM2Instruction(0, new NewObjectIns(), new int[]{pairs.size()}, new byte[0]) - ); + ); } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java index 29e8a19de..d7df9b5f7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java @@ -47,12 +47,12 @@ public class NextNameAVM2Item extends AVM2Item { obj.toString(writer, localData); return writer.append(")"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java index 446bbc711..0ad55c7af 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java @@ -47,12 +47,12 @@ public class NextValueAVM2Item extends AVM2Item { obj.toString(writer, localData); return writer.append(")"); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java index 5cceef3f0..a1522b975 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java @@ -49,19 +49,19 @@ public class NullAVM2Item extends AVM2Item { public Object getResult() { return new Null(); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, + return toSourceMerge(localData, generator, new AVM2Instruction(0, new PushNullIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("null"); } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java index 3d4b31cc8..d0b00256d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java @@ -16,11 +16,19 @@ */ package com.jpexs.decompiler.flash.abc.avm2.model; +import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.DecrementIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.IncrementIns; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.AssignableAVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; +import java.util.ArrayList; +import java.util.List; public class PostDecrementAVM2Item extends AVM2Item implements AssignmentAVM2Item { @@ -41,14 +49,34 @@ public class PostDecrementAVM2Item extends AVM2Item implements AssignmentAVM2Ite public boolean hasSideEffect() { return true; } - + @Override public GraphTargetItem returnType() { return object.returnType(); } - + @Override public boolean hasReturnValue() { return true; } + + @Override + public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { + if (object instanceof AssignableAVM2Item) { + return ((AssignableAVM2Item) object).toSourceChange(localData, generator, null, toSourceMerge(localData, generator, + new AVM2Instruction(0, new DecrementIns(), new int[]{}, new byte[0]) + ), true); + } + return new ArrayList<>(); //? + } + + @Override + public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { + if (object instanceof AssignableAVM2Item) { + return ((AssignableAVM2Item) object).toSourceChange(localData, generator, null, toSourceMerge(localData, generator, + new AVM2Instruction(0, new DecrementIns(), new int[]{}, new byte[0]) + ), false); + } + return new ArrayList<>(); //? + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java index caafec32f..03ac078cf 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java @@ -28,6 +28,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.other.SetPropertyIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.DupIns; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.AssignableAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.script.NameAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.script.PropertyAVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -70,52 +71,22 @@ public class PostIncrementAVM2Item extends AVM2Item implements AssignmentAVM2Ite @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - AVM2SourceGenerator g = (AVM2SourceGenerator) generator; - int objectTempReg = g.getFreeRegister(localData); - if (object instanceof PropertyAVM2Item) { - PropertyAVM2Item p = (PropertyAVM2Item) object; - int propertyId = p.resolveProperty(); - Object obj = p.object; - GraphTargetItem index = p.index; - if (obj == null) { - obj = new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{propertyId}, new byte[0]); - } - - List ret = toSourceMerge(localData, generator, obj, - new AVM2Instruction(0, new DupIns(), new int[]{}, new byte[0]), - new AVM2Instruction(0, new SetLocalIns(), new int[]{objectTempReg}, new byte[0]) - ); - int indexTempReg = 0; - if (index != null) { - indexTempReg = g.getFreeRegister(localData); - ret.addAll(toSourceMerge(localData, generator, index, - new AVM2Instruction(0, new DupIns(), new int[]{}, new byte[0]), - new AVM2Instruction(0, new SetLocalIns(), new int[]{indexTempReg}, new byte[0]) - )); - } - - ret.addAll(toSourceMerge(localData, generator, - new AVM2Instruction(0, new GetPropertyIns(), new int[]{}, new byte[0]), - new AVM2Instruction(0, new DupIns(), new int[]{}, new byte[0]), - new AVM2Instruction(0, new IncrementIns(), new int[]{}, new byte[0]), - new AVM2Instruction(0, new GetLocalIns(), new int[]{objectTempReg}, new byte[0]) - )); - - if (index != null) { - ret.add(new AVM2Instruction(0, new GetLocalIns(), new int[]{indexTempReg}, new byte[0])); - } - ret.add(new AVM2Instruction(0, new SetPropertyIns(), new int[]{propertyId}, new byte[0])); - ret.add(new AVM2Instruction(0, new KillIns(), new int[]{objectTempReg}, new byte[0])); - if (index != null) { - ret.add(new AVM2Instruction(0, new KillIns(), new int[]{indexTempReg}, new byte[0])); - } - return ret; + if (object instanceof AssignableAVM2Item) { + return ((AssignableAVM2Item) object).toSourceChange(localData, generator, null, toSourceMerge(localData, generator, + new AVM2Instruction(0, new IncrementIns(), new int[]{}, new byte[0]) + ), true); } - if(object instanceof NameAVM2Item){ - //TODO - + return new ArrayList<>(); //? + } + + @Override + public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { + if (object instanceof AssignableAVM2Item) { + return ((AssignableAVM2Item) object).toSourceChange(localData, generator, null, toSourceMerge(localData, generator, + new AVM2Instruction(0, new IncrementIns(), new int[]{}, new byte[0]) + ), false); } - return toSourceMerge(localData, generator, object); + return new ArrayList<>(); //? } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java index 3e35ca721..0c2364e84 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java @@ -41,19 +41,19 @@ public class ReturnValueAVM2Item extends AVM2Item implements ExitItem { writer.append("return "); return value.toString(writer, localData); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, value, + return toSourceMerge(localData, generator, value, new AVM2Instruction(0, new ReturnValueIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java index 37ce16e81..e7f301348 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java @@ -38,18 +38,18 @@ public class ReturnVoidAVM2Item extends AVM2Item implements ExitItem { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append("return"); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, new AVM2Instruction(0, new ReturnVoidIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java index cb56249c3..7c05003a8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java @@ -38,12 +38,12 @@ public class ScriptAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append("script" + scriptIndex); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java index 8c41a9449..2eab87179 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java @@ -53,12 +53,12 @@ public class SetGlobalSlotAVM2Item extends AVM2Item { public boolean hasSideEffect() { return true; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java index 847971dfa..501f4bd9e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java @@ -64,62 +64,59 @@ public class SetLocalAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assig public boolean hasSideEffect() { return true; } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { AVM2Instruction ins; - switch(regIndex){ - case 0: - ins = new AVM2Instruction(0, new SetLocal0Ins(), new int[]{},new byte[0]); + switch (regIndex) { + case 0: + ins = new AVM2Instruction(0, new SetLocal0Ins(), new int[]{}, new byte[0]); break; - case 1: - ins = new AVM2Instruction(0, new SetLocal1Ins(), new int[]{},new byte[0]); + case 1: + ins = new AVM2Instruction(0, new SetLocal1Ins(), new int[]{}, new byte[0]); break; - case 2: - ins = new AVM2Instruction(0, new SetLocal2Ins(), new int[]{},new byte[0]); + case 2: + ins = new AVM2Instruction(0, new SetLocal2Ins(), new int[]{}, new byte[0]); break; - case 3: - ins = new AVM2Instruction(0, new SetLocal3Ins(), new int[]{},new byte[0]); + case 3: + ins = new AVM2Instruction(0, new SetLocal3Ins(), new int[]{}, new byte[0]); break; default: - ins = new AVM2Instruction(0, new SetLocalIns(), new int[]{regIndex},new byte[0]); + ins = new AVM2Instruction(0, new SetLocalIns(), new int[]{regIndex}, new byte[0]); break; } - return toSourceMerge(localData, generator, value, - new AVM2Instruction(0, new DupIns(), new int[]{},new byte[0]) - ,ins); + return toSourceMerge(localData, generator, value, + new AVM2Instruction(0, new DupIns(), new int[]{}, new byte[0]), ins); } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { AVM2Instruction ins; - switch(regIndex){ - case 0: - ins = new AVM2Instruction(0, new SetLocal0Ins(), new int[]{},new byte[0]); + switch (regIndex) { + case 0: + ins = new AVM2Instruction(0, new SetLocal0Ins(), new int[]{}, new byte[0]); break; - case 1: - ins = new AVM2Instruction(0, new SetLocal1Ins(), new int[]{},new byte[0]); + case 1: + ins = new AVM2Instruction(0, new SetLocal1Ins(), new int[]{}, new byte[0]); break; - case 2: - ins = new AVM2Instruction(0, new SetLocal2Ins(), new int[]{},new byte[0]); + case 2: + ins = new AVM2Instruction(0, new SetLocal2Ins(), new int[]{}, new byte[0]); break; - case 3: - ins = new AVM2Instruction(0, new SetLocal3Ins(), new int[]{},new byte[0]); + case 3: + ins = new AVM2Instruction(0, new SetLocal3Ins(), new int[]{}, new byte[0]); break; default: - ins = new AVM2Instruction(0, new SetLocalIns(), new int[]{regIndex},new byte[0]); + ins = new AVM2Instruction(0, new SetLocalIns(), new int[]{regIndex}, new byte[0]); break; } return toSourceMerge(localData, generator, value, ins); } - - - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java index 74861f0fd..855e9721e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java @@ -69,18 +69,19 @@ public class SetPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, As public boolean hasSideEffect() { return true; } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, object, value, - new AVM2Instruction(0, new SetPropertyIns(), new int[]{((AVM2SourceGenerator)generator).propertyName(propertyName)}, new byte[0]) + return toSourceMerge(localData, generator, object, value, + new AVM2Instruction(0, new SetPropertyIns(), new int[]{((AVM2SourceGenerator) generator).propertyName(propertyName)}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java index e1e50cde3..841ee4579 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java @@ -82,12 +82,12 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign public boolean hasSideEffect() { return true; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java index 747b5ed40..43423f1e3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java @@ -57,12 +57,12 @@ public class SetSuperAVM2Item extends AVM2Item { public boolean hasSideEffect() { return true; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java index f4f307450..b9350ee00 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java @@ -53,18 +53,19 @@ public class StringAVM2Item extends AVM2Item { public Object getResult() { return value; } + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, - new AVM2Instruction(0, new PushStringIns(), new int[]{((AVM2SourceGenerator)generator).str(value)}, new byte[0]) + return toSourceMerge(localData, generator, + new AVM2Instruction(0, new PushStringIns(), new int[]{((AVM2SourceGenerator) generator).str(value)}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return TypeItem.STRING; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java index a621aca7f..346a60ed6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java @@ -46,18 +46,18 @@ public class ThisAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append("this"); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, new AVM2Instruction(0, new GetLocal0Ins(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java index 77228d244..782041e0c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java @@ -35,12 +35,12 @@ public class ThrowAVM2Item extends AVM2Item { writer.append("throw "); return value.toString(writer, localData); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java index 0cc618e8d..fcdfaf09f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java @@ -50,20 +50,20 @@ public class UndefinedAVM2Item extends AVM2Item { public Object getResult() { return new Undefined(); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Undefined"); - } - + } + @Override public boolean hasReturnValue() { return true; } - - @Override + + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, + return toSourceMerge(localData, generator, new AVM2Instruction(0, new PushUndefinedIns(), new int[]{}, new byte[0]) ); } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java index 3cefc45c2..0c336dc43 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java @@ -35,12 +35,12 @@ public class UnparsedAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append(value); } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; 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 a326c870b..295538362 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 @@ -63,12 +63,12 @@ public class WithAVM2Item extends AVM2Item { public boolean needsSemicolon() { return false; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java index 2ffc0339b..bc29d1f5f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java @@ -40,12 +40,12 @@ public class WithEndAVM2Item extends AVM2Item { public boolean needsSemicolon() { return false; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java index 18637defd..cc5148f65 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java @@ -35,12 +35,12 @@ public class WithObjectAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer; } - + @Override public GraphTargetItem returnType() { return TypeItem.UNBOUNDED; - } - + } + @Override public boolean hasReturnValue() { return false; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java index 3df2710ce..600e234d5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java @@ -47,12 +47,12 @@ public class XMLAVM2Item extends AVM2Item { } return writer; } - + @Override public GraphTargetItem returnType() { return new TypeItem("XML"); - } - + } + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java index 561d52281..936cc5829 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java @@ -68,7 +68,7 @@ public class AddAVM2Item extends BinaryOpItem { @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new AddIns(), new int[]{}, new byte[0]) ); } @@ -77,6 +77,5 @@ public class AddAVM2Item extends BinaryOpItem { public GraphTargetItem returnType() { return new UnboundedTypeItem(); } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AsTypeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AsTypeAVM2Item.java index 861bb59dc..193224d18 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AsTypeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AsTypeAVM2Item.java @@ -30,10 +30,10 @@ public class AsTypeAVM2Item extends BinaryOpItem { public AsTypeAVM2Item(AVM2Instruction instruction, GraphTargetItem value, GraphTargetItem type) { super(instruction, PRECEDENCE_RELATIONAL, value, type, "as"); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new AsTypeIns(), new int[]{}, new byte[0]) ); } @@ -42,6 +42,5 @@ public class AsTypeAVM2Item extends BinaryOpItem { public GraphTargetItem returnType() { return rightSide; } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java index f64fd1a25..68bb46db0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java @@ -37,13 +37,14 @@ public class BitAndAVM2Item extends BinaryOpItem { public Object getResult() { return ((long) (double) EcmaScript.toNumber(leftSide.getResult())) & ((long) (double) EcmaScript.toNumber(rightSide.getResult())); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new BitAndIns(), new int[]{}, new byte[0]) ); } + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java index ffa06ace0..94aaa95c6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java @@ -37,13 +37,14 @@ public class BitNotAVM2Item extends UnaryOpItem { public Object getResult() { return ~((long) (double) EcmaScript.toNumber(value.getResult())); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, value, + return toSourceMerge(localData, generator, value, new AVM2Instruction(0, new BitNotIns(), new int[]{}, new byte[0]) ); } + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java index 2f74b72cc..ce9eb926c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java @@ -37,14 +37,14 @@ public class BitOrAVM2Item extends BinaryOpItem { public Object getResult() { return ((long) (double) EcmaScript.toNumber(leftSide.getResult())) | ((long) (double) EcmaScript.toNumber(rightSide.getResult())); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new BitOrIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java index 3f5c664a2..8ce5ff55e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java @@ -37,15 +37,14 @@ public class BitXorAVM2Item extends BinaryOpItem { public Object getResult() { return ((long) (double) EcmaScript.toNumber(leftSide.getResult())) ^ ((long) (double) EcmaScript.toNumber(rightSide.getResult())); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new BitXorIns(), new int[]{}, new byte[0]) ); } - - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java index 3ae6dbca9..a88e04b8c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java @@ -48,20 +48,19 @@ public class DeletePropertyAVM2Item extends AVM2Item { propertyName.toString(writer, localData); return writer.append("]"); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, object, - new AVM2Instruction(0, new DeletePropertyIns(), new int[]{((AVM2SourceGenerator)generator).propertyName(propertyName)}, new byte[0]) + return toSourceMerge(localData, generator, object, + new AVM2Instruction(0, new DeletePropertyIns(), new int[]{((AVM2SourceGenerator) generator).propertyName(propertyName)}, new byte[0]) ); } - - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java index a300d66c7..45c3908ff 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java @@ -64,14 +64,14 @@ public class DivideAVM2Item extends BinaryOpItem { return super.appendTo(writer, localData); } } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new DivideIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java index c0f58369e..ebff0ce80 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java @@ -43,14 +43,14 @@ public class EqAVM2Item extends BinaryOpItem implements LogicalOpItem { public GraphTargetItem invert() { return new NeqAVM2Item(src, leftSide, rightSide); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new EqualsIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java index bc3a74c34..70e7594cc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java @@ -50,14 +50,14 @@ public class GeAVM2Item extends BinaryOpItem implements LogicalOpItem { } return ret;//undefined } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new GreaterEqualsIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java index f3ca3eca0..f71f49b9e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java @@ -43,14 +43,14 @@ public class GtAVM2Item extends BinaryOpItem implements LogicalOpItem { public Object getResult() { return EcmaScript.compare(rightSide.getResult(), leftSide.getResult()); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new GreaterThanIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java index 5d19fbc5b..f2fd54f98 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java @@ -31,14 +31,14 @@ public class InAVM2Item extends BinaryOpItem { public InAVM2Item(AVM2Instruction instruction, GraphTargetItem name, GraphTargetItem object) { super(instruction, PRECEDENCE_RELATIONAL, name, object, "in"); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new InIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java index 361a05b90..07eaee944 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java @@ -31,14 +31,14 @@ public class InstanceOfAVM2Item extends BinaryOpItem { public InstanceOfAVM2Item(AVM2Instruction instruction, GraphTargetItem value, GraphTargetItem type) { super(instruction, PRECEDENCE_RELATIONAL, value, type, "instanceof"); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new InstanceOfIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java index 7505b4868..6831207dd 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java @@ -31,14 +31,14 @@ public class IsTypeAVM2Item extends BinaryOpItem { public IsTypeAVM2Item(AVM2Instruction instruction, GraphTargetItem value, GraphTargetItem type) { super(instruction, PRECEDENCE_RELATIONAL, value, type, "is"); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new IsTypeIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java index c2c3fcd2f..a17da5171 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java @@ -37,17 +37,17 @@ public class LShiftAVM2Item extends BinaryOpItem { public Object getResult() { return ((int) (double) EcmaScript.toNumber(leftSide.getResult())) << ((int) (double) EcmaScript.toNumber(rightSide.getResult())); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new LShiftIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); } - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LeAVM2Item.java index b12b550e1..1385bc3be 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LeAVM2Item.java @@ -50,14 +50,14 @@ public class LeAVM2Item extends BinaryOpItem implements LogicalOpItem { } return ret;//undefined } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new LessEqualsIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java index 1ace3fc9b..c1b979a0b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java @@ -43,14 +43,14 @@ public class LtAVM2Item extends BinaryOpItem implements LogicalOpItem { public Object getResult() { return EcmaScript.compare(leftSide.getResult(), rightSide.getResult()); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new LessThanIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java index 9fae5818a..3c0418d3e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java @@ -64,14 +64,14 @@ public class ModuloAVM2Item extends BinaryOpItem { return super.appendTo(writer, localData); } } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new ModuloIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java index 8d0eaa625..cb29e7f26 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java @@ -61,14 +61,14 @@ public class MultiplyAVM2Item extends BinaryOpItem { return super.appendTo(writer, localData); } } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new MultiplyIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java index a3ca9f37b..f34eea505 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java @@ -37,14 +37,14 @@ public class NegAVM2Item extends UnaryOpItem { public Object getResult() { return -EcmaScript.toNumber(value.getResult()); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, value, + return toSourceMerge(localData, generator, value, new AVM2Instruction(0, new NegateIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java index 699992a2b..e2eeda19d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java @@ -44,15 +44,15 @@ public class NeqAVM2Item extends BinaryOpItem implements LogicalOpItem { public GraphTargetItem invert() { return new EqAVM2Item(src, leftSide, rightSide); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new EqualsIns(), new int[]{}, new byte[0]), new AVM2Instruction(0, new NotIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreDecrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreDecrementAVM2Item.java index b51e9b952..336ff61f5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreDecrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreDecrementAVM2Item.java @@ -18,11 +18,15 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.DecrementIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.IncrementIns; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.AssignableAVM2Item; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.UnaryOpItem; +import java.util.ArrayList; import java.util.List; public class PreDecrementAVM2Item extends UnaryOpItem implements AssignmentAVM2Item { @@ -38,12 +42,27 @@ public class PreDecrementAVM2Item extends UnaryOpItem implements AssignmentAVM2I @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return super.toSource(localData, generator); //TODO + if (value instanceof AssignableAVM2Item) { + return ((AssignableAVM2Item) value).toSourceChange(localData, generator, toSourceMerge(localData, generator, + new AVM2Instruction(0, new DecrementIns(), new int[]{}, new byte[0]) + ), null, true); + } + return new ArrayList<>(); //? } - + + @Override + public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { + if (value instanceof AssignableAVM2Item) { + return ((AssignableAVM2Item) value).toSourceChange(localData, generator, toSourceMerge(localData, generator, + new AVM2Instruction(0, new DecrementIns(), new int[]{}, new byte[0]) + ), null, false); + } + return new ArrayList<>(); //? + } + @Override public GraphTargetItem returnType() { return value.returnType(); } - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreIncrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreIncrementAVM2Item.java index d4cda305b..6968ed4c8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreIncrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreIncrementAVM2Item.java @@ -18,10 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.IncrementIns; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.AssignableAVM2Item; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.UnaryOpItem; +import java.util.ArrayList; import java.util.List; public class PreIncrementAVM2Item extends UnaryOpItem { @@ -34,12 +37,27 @@ public class PreIncrementAVM2Item extends UnaryOpItem { public boolean hasSideEffect() { return true; } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return super.toSource(localData, generator); //TODO + if (value instanceof AssignableAVM2Item) { + return ((AssignableAVM2Item) value).toSourceChange(localData, generator, toSourceMerge(localData, generator, + new AVM2Instruction(0, new IncrementIns(), new int[]{}, new byte[0]) + ), null, true); + } + return new ArrayList<>(); //? } - + + @Override + public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { + if (value instanceof AssignableAVM2Item) { + return ((AssignableAVM2Item) value).toSourceChange(localData, generator, toSourceMerge(localData, generator, + new AVM2Instruction(0, new IncrementIns(), new int[]{}, new byte[0]) + ), null, false); + } + return new ArrayList<>(); //? + } + @Override public GraphTargetItem returnType() { return value.returnType(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java index d2eeed0fd..eba862c61 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java @@ -37,14 +37,14 @@ public class RShiftAVM2Item extends BinaryOpItem { public Object getResult() { return ((long) (double) EcmaScript.toNumber(leftSide.getResult())) >> ((long) (double) EcmaScript.toNumber(rightSide.getResult())); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new RShiftIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java index 76405cf0b..d00f9fa50 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java @@ -46,14 +46,14 @@ public class StrictEqAVM2Item extends BinaryOpItem implements LogicalOpItem { public GraphTargetItem invert() { return new StrictNeqAVM2Item(src, leftSide, rightSide); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new StrictEqualsIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java index 041d0ae82..aa0b56450 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java @@ -47,15 +47,15 @@ public class StrictNeqAVM2Item extends BinaryOpItem implements LogicalOpItem { return EcmaScript.type(x) != EcmaScript.type(y) || (!EcmaScript.equals(x, y)); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new StrictEqualsIns(), new int[]{}, new byte[0]), new AVM2Instruction(0, new NotIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new TypeItem("Boolean"); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java index bc93f2db5..5ebe73c0a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java @@ -61,14 +61,14 @@ public class SubtractAVM2Item extends BinaryOpItem { return super.appendTo(writer, localData); } } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new SubtractIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java index 43ffe7055..efbd4e712 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java @@ -66,14 +66,14 @@ public class TypeOfAVM2Item extends UnaryOpItem { //TODO: function,xml return "object"; } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, value, + return toSourceMerge(localData, generator, value, new AVM2Instruction(0, new TypeOfIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java index a8e3847d2..1b08ca213 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java @@ -37,14 +37,14 @@ public class URShiftAVM2Item extends BinaryOpItem { public Object getResult() { return ((long) (double) EcmaScript.toNumber(leftSide.getResult())) >>> ((long) (double) EcmaScript.toNumber(rightSide.getResult())); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return toSourceMerge(localData, generator, leftSide, rightSide, + return toSourceMerge(localData, generator, leftSide, rightSide, new AVM2Instruction(0, new URShiftIns(), new int[]{}, new byte[0]) ); } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java index cd87f3dfc..9b4668c39 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java @@ -565,29 +565,26 @@ public class AVM2SourceGenerator implements SourceGenerator { } public void generateClass(int initScope, PackageAVM2Item pkg, ClassInfo classInfo, InstanceInfo instanceInfo, SourceGeneratorLocalData localData, boolean isInterface, String name, String superName, GraphTargetItem extendsVal, List implementsStr, GraphTargetItem constructor, List traitItems) throws ParseException { + localData.currentClass = pkg.packageName.equals("") ? name : pkg.packageName + "." + name; List ret = new ArrayList<>(); if (extendsVal == null && !isInterface) { extendsVal = new TypeItem("Object"); } ParsedSymbol s = null; - Trait[] it = generateTraitsPhase1(pkg, name, superName, false, localData, traitItems, instanceInfo.instance_traits); Trait[] st = generateTraitsPhase1(pkg, name, superName, true, localData, traitItems, classInfo.static_traits); generateTraitsPhase2(initScope, pkg, name, superName, false, localData, traitItems, instanceInfo.instance_traits, it); generateTraitsPhase2(initScope, pkg, name, superName, true, localData, traitItems, classInfo.static_traits, st); if (constructor == null) { - instanceInfo.iinit_index = method(initScope+1, false, false, 0, name, extendsVal != null ? extendsVal.toString() : null, true, localData, new ArrayList(), new ArrayList(), new ArrayList(), new ArrayList(), TypeItem.UNBOUNDED/*?? FIXME*/); + instanceInfo.iinit_index = method(initScope + 1, false, false, 0, name, extendsVal != null ? extendsVal.toString() : null, true, localData, new ArrayList(), new ArrayList(), new ArrayList(), new ArrayList(), TypeItem.UNBOUNDED/*?? FIXME*/); } else { MethodAVM2Item m = (MethodAVM2Item) constructor; Reference hasArgs = new Reference<>(Boolean.FALSE); calcRegisters(localData, m, hasArgs); - instanceInfo.iinit_index = method(initScope+1, m.hasRest, hasArgs.getVal(), m.line, name, extendsVal != null ? extendsVal.toString() : null, true, localData, m.paramTypes, m.paramNames, m.paramValues, m.body, TypeItem.UNBOUNDED/*?? FIXME*/); + instanceInfo.iinit_index = method(initScope + 1, m.hasRest, hasArgs.getVal(), m.line, name, extendsVal != null ? extendsVal.toString() : null, true, localData, m.paramTypes, m.paramNames, m.paramValues, m.body, TypeItem.UNBOUNDED/*?? FIXME*/); } - - - //Class initializer MethodInfo mi = new MethodInfo(new int[0], 0, 0, 0, new ValueKind[0], new int[0]); MethodBody mb = new MethodBody(); @@ -649,11 +646,11 @@ public class AVM2SourceGenerator implements SourceGenerator { if (!cai.isDynamic) { ii.flags |= InstanceInfo.CLASS_SEALED; } - if(cai.isFinal){ + if (cai.isFinal) { ii.flags |= InstanceInfo.CLASS_FINAL; } - ii.flags |= InstanceInfo.CLASS_PROTECTEDNS; - ii.protectedNS = abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PROTECTED, abc.constants.getStringId(pkg.packageName.equals("")?cai.className:pkg.packageName+":"+cai.className, true)), 0, true); + ii.flags |= InstanceInfo.CLASS_PROTECTEDNS; + ii.protectedNS = abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PROTECTED, abc.constants.getStringId(pkg.packageName + ":" + cai.className, true)), 0, true); } if (cls instanceof InterfaceAVM2Item) { InterfaceAVM2Item iai = (InterfaceAVM2Item) cls; @@ -665,7 +662,7 @@ public class AVM2SourceGenerator implements SourceGenerator { } public int traitName(String pkg, String className, int nsKind, String var) { - return abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(var), namespace(nsKind, nsKind == Namespace.KIND_PRIVATE && className != null ? ("".equals(pkg) ? className : pkg + ":" + className) : ""), 0, 0, new ArrayList()), true); + return abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(var), namespace(nsKind, nsKind != Namespace.KIND_PACKAGE && className != null ? (pkg + ":" + className) : ""), 0, 0, new ArrayList()), true); } public int typeName(SourceGeneratorLocalData localData, GraphTargetItem type) { @@ -773,14 +770,16 @@ public class AVM2SourceGenerator implements SourceGenerator { } for (int i = 0; i < paramValues.size(); i++) { - optional[i] = getValueKind(paramTypes.get(paramTypes.size() - paramValues.size() + i), paramTypes.get(i)); + optional[i] = getValueKind(Namespace.KIND_NAMESPACE/*FIXME*/, paramTypes.get(paramTypes.size() - paramValues.size() + i), paramTypes.get(i)); } MethodInfo mi = new MethodInfo(param_types, constructor ? 0 : typeName(localData, retType), 0/*name_index*/, 0, optional, param_names); if (hasArguments) { mi.setFlagNeed_Arguments(); } - mi.setFlagHas_paramnames(); + if (!paramNames.isEmpty()) { + mi.setFlagHas_paramnames(); + } if (!paramValues.isEmpty()) { mi.setFlagHas_optional(); } @@ -833,8 +832,8 @@ public class AVM2SourceGenerator implements SourceGenerator { mbody.code.code.add(1, new AVM2Instruction(0, new PushScopeIns(), new int[]{}, new byte[0])); InstructionDefinition lastDef = mbody.code.code.get(mbody.code.code.size() - 1).definition; - if (!(lastDef instanceof ReturnVoidIns) || (lastDef instanceof ReturnValueIns)) { - if (retType.equals("void") || constructor) { + if (!((lastDef instanceof ReturnVoidIns) || (lastDef instanceof ReturnValueIns))) { + if (retType.toString().equals("*") || retType.toString().equals("void") || constructor) { mbody.code.code.add(new AVM2Instruction(0, new ReturnVoidIns(), new int[]{}, new byte[0])); } else { mbody.code.code.add(new AVM2Instruction(0, new PushUndefinedIns(), new int[]{}, new byte[0])); @@ -848,7 +847,7 @@ public class AVM2SourceGenerator implements SourceGenerator { return mbody.method_info; } - public ValueKind getValueKind(GraphTargetItem type, GraphTargetItem val) { + public ValueKind getValueKind(int nsKind, GraphTargetItem type, GraphTargetItem val) { if (val instanceof BooleanAVM2Item) { BooleanAVM2Item bi = (BooleanAVM2Item) val; @@ -865,10 +864,15 @@ public class AVM2SourceGenerator implements SourceGenerator { isNs = true; } } + + if ((type instanceof TypeItem) && (((TypeItem) type).fullTypeName.equals("Namespace"))) { + isNs = true; + } + if (val instanceof StringAVM2Item) { StringAVM2Item sval = (StringAVM2Item) val; if (isNs) { - return new ValueKind(namespace(Namespace.KIND_NAMESPACE, sval.value), ValueKind.CONSTANT_Namespace); + return new ValueKind(namespace(nsKind, sval.value), Namespace.KIND_NAMESPACE); } else { return new ValueKind(str(sval.value), ValueKind.CONSTANT_Utf8); } @@ -896,11 +900,11 @@ public class AVM2SourceGenerator implements SourceGenerator { continue; } if (item instanceof InterfaceAVM2Item) { - generateClass(abc.class_info.get(((TraitClass) traits[k]).class_info),abc.instance_info.get(((TraitClass) traits[k]).class_info), initScope, pkg, localData, (InterfaceAVM2Item) item); + generateClass(abc.class_info.get(((TraitClass) traits[k]).class_info), abc.instance_info.get(((TraitClass) traits[k]).class_info), initScope, pkg, localData, (InterfaceAVM2Item) item); } if (item instanceof ClassAVM2Item) { - generateClass(abc.class_info.get(((TraitClass) traits[k]).class_info),abc.instance_info.get(((TraitClass) traits[k]).class_info) , initScope, pkg, localData, (ClassAVM2Item) item); + generateClass(abc.class_info.get(((TraitClass) traits[k]).class_info), abc.instance_info.get(((TraitClass) traits[k]).class_info), initScope, pkg, localData, (ClassAVM2Item) item); } if ((item instanceof MethodAVM2Item) || (item instanceof GetterAVM2Item) || (item instanceof SetterAVM2Item)) { MethodAVM2Item mai = (MethodAVM2Item) item; @@ -910,7 +914,7 @@ public class AVM2SourceGenerator implements SourceGenerator { Reference hasArgs = new Reference<>(Boolean.FALSE); calcRegisters(localData, mai, hasArgs); - ((TraitMethodGetterSetter) traits[k]).method_info = method(initScope+1/*class scope*/, mai.hasRest, hasArgs.getVal(), mai.line, className, superName, false, localData, mai.paramTypes, mai.paramNames, mai.paramValues, mai.body, mai.retType); + ((TraitMethodGetterSetter) traits[k]).method_info = method(initScope + 1/*class scope*/, mai.hasRest, hasArgs.getVal(), mai.line, className, superName, false, localData, mai.paramTypes, mai.paramNames, mai.paramValues, mai.body, mai.retType); } else if (item instanceof FunctionAVM2Item) { FunctionAVM2Item fai = (FunctionAVM2Item) item; Reference hasArgs = new Reference<>(Boolean.FALSE); @@ -931,7 +935,7 @@ public class AVM2SourceGenerator implements SourceGenerator { InstanceInfo ii = new InstanceInfo(); abc.class_info.add(ci); abc.instance_info.add(ii); - tc.class_info = abc.instance_info.size()-1; + tc.class_info = abc.instance_info.size() - 1; tc.kindType = Trait.TRAIT_CLASS; tc.name_index = traitName(pkg.packageName, className, ((InterfaceAVM2Item) item).namespaceKind, ((InterfaceAVM2Item) item).name); tc.slot_id = slot_id++; @@ -944,20 +948,18 @@ public class AVM2SourceGenerator implements SourceGenerator { ClassInfo ci = new ClassInfo(); InstanceInfo instanceInfo = new InstanceInfo(); abc.class_info.add(ci); - abc.instance_info.add(instanceInfo); - tc.class_info = abc.instance_info.size()-1; - - - instanceInfo.name_index = abc.constants.addMultiname(new Multiname(Multiname.QNAME, abc.constants.getStringId(((ClassAVM2Item) item).className, true), - abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(pkg.packageName, true)), 0, true), 0, 0, new ArrayList())); + abc.instance_info.add(instanceInfo); + tc.class_info = abc.instance_info.size() - 1; - if (((ClassAVM2Item)item).extendsOp != null) { - instanceInfo.super_index = typeName(localData, ((ClassAVM2Item)item).extendsOp); + instanceInfo.name_index = abc.constants.addMultiname(new Multiname(Multiname.QNAME, abc.constants.getStringId(((ClassAVM2Item) item).className, true), + abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(pkg.packageName, true)), 0, true), 0, 0, new ArrayList())); + + if (((ClassAVM2Item) item).extendsOp != null) { + instanceInfo.super_index = typeName(localData, ((ClassAVM2Item) item).extendsOp); } else if (true) { //(!isInterface) { instanceInfo.super_index = abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str("Object"), namespace(Namespace.KIND_PACKAGE, ""), 0, 0, new ArrayList()), true); } - - + tc.kindType = Trait.TRAIT_CLASS; tc.name_index = traitName(pkg.packageName, className, ((ClassAVM2Item) item).namespaceKind, ((ClassAVM2Item) item).className); tc.slot_id = slot_id++; @@ -971,6 +973,7 @@ public class AVM2SourceGenerator implements SourceGenerator { String var = null; GraphTargetItem val = null; GraphTargetItem type = null; + boolean isNamespace = false; int nsKind = 0; if (item instanceof SlotAVM2Item) { SlotAVM2Item sai = (SlotAVM2Item) item; @@ -991,11 +994,12 @@ public class AVM2SourceGenerator implements SourceGenerator { val = cai.value; type = cai.type; nsKind = cai.getNsKind(); + isNamespace = type.toString().equals("Namespace"); } tsc.name_index = traitName(pkg.packageName, className, nsKind, var); - tsc.type_index = typeName(localData, type); + tsc.type_index = isNamespace ? 0 : typeName(localData, type); - ValueKind vk = getValueKind(type, val); + ValueKind vk = getValueKind(nsKind, type, val); if (vk == null) { tsc.value_kind = ValueKind.CONSTANT_Undefined; } else { @@ -1056,7 +1060,7 @@ public class AVM2SourceGenerator implements SourceGenerator { List parents = new ArrayList<>(); parentNamesAddNames(abc, allABCs, abc.instance_info.get(tc.class_info).name_index, parents, new ArrayList(), new ArrayList()); if (documentClass) { - mb.code.code.add(ins(new GetScopeObjectIns(), 0)); + mb.code.code.add(ins(new GetScopeObjectIns(), 0)); traitScope++; } else { NamespaceSet nsset = new NamespaceSet(new int[]{abc.constants.constant_multiname.get(tc.name_index).namespace_index}); @@ -1123,7 +1127,8 @@ public class AVM2SourceGenerator implements SourceGenerator { } } } - for (InstanceInfo ii : abc.instance_info) { + for (int i = 0; i < abc.instance_info.size(); i++) { + InstanceInfo ii = abc.instance_info.get(i); Multiname clsName = ii.getName(abc.constants); if (obj.equals(clsName.getName(abc.constants, new ArrayList()))) { if (pkg.equals(clsName.getNamespace(abc.constants).getName(abc.constants))) { @@ -1139,6 +1144,16 @@ public class AVM2SourceGenerator implements SourceGenerator { } } + for (Trait t : abc.class_info.get(i).static_traits.traits) { + if (propertyName.equals(t.getName(abc).getName(abc.constants, new ArrayList()))) { + outName.setVal(obj); + outNs.setVal(pkg); + outPropNs.setVal(t.getName(abc).getNamespace(abc.constants).getName(abc.constants)); + outPropNsKind.setVal(t.getName(abc).getNamespace(abc.constants).kind); + return true; + } + } + Multiname superName = abc.constants.constant_multiname.get(ii.super_index); if (superName != null) { return searchProperty(abcs, superName.getNamespace(abc.constants).getName(abc.constants), superName.getName(abc.constants, new ArrayList()), propertyName, outName, outNs, outPropNs, outPropNsKind); @@ -1185,7 +1200,7 @@ public class AVM2SourceGenerator implements SourceGenerator { } } - public void calcRegisters(SourceGeneratorLocalData localData, FunctionAVM2Item fun, Reference hasArguments) { + public void calcRegisters(SourceGeneratorLocalData localData, FunctionAVM2Item fun, Reference hasArguments) throws ParseException { List registerNames = new ArrayList<>(); registerNames.add("this"); registerNames.addAll(fun.paramNames); @@ -1203,7 +1218,50 @@ public class AVM2SourceGenerator implements SourceGenerator { } } for (NameAVM2Item n : fun.subvariables) { - n.setRegNumber(registerNames.indexOf(n.getVariableName())); + if (n.unresolved) { + GraphTargetItem resolved = null; + List abcs = new ArrayList<>(); + abcs.add(abc); + abcs.addAll(allABCs); + String parts[] = new String[]{n.getVariableName()}; + if (n.getVariableName().contains(".")) { + parts = n.getVariableName().split("\\."); + } + loopi: + for (int i = 0; i < n.openedNamespaces.size(); i++) { + String ns = n.openedNamespaces.get(i); + String nspkg = ns; + String nsclass = null; + int nsKind = n.openedNamespacesKind.get(i); + if (nspkg.contains(":") && nsKind != Namespace.KIND_NAMESPACE) { + nsclass = nspkg.substring(nspkg.indexOf(":") + 1); + nspkg = nspkg.substring(0, nspkg.indexOf(":")); + } + for (int h = 0; h < abc.instance_info.size(); h++) { + InstanceInfo ii = abc.instance_info.get(h); + Multiname mn = abc.constants.constant_multiname.get(ii.name_index); + if (mn.getNamespace(abc.constants).getName(abc.constants).equals(nspkg) && (nsclass == null || (mn.getName(abc.constants, new ArrayList()).equals(nsclass)))) { + //found opened class + Reference outName = new Reference<>(""); + Reference outNs = new Reference<>(""); + Reference outPropNs = new Reference<>(""); + Reference outPropNsKind = new Reference<>(1); + if (AVM2SourceGenerator.searchProperty(abcs, nspkg, mn.getName(abc.constants, new ArrayList()), parts[0], outName, outNs, outPropNs, outPropNsKind)) { + resolved = new PropertyAVM2Item(null, parts[0], n.getIndex(), abcs, n.openedNamespaces, n.openedNamespacesKind); + break loopi; + } + } + } + + } + n.redirect = resolved; + if (resolved == null) { + throw new ParseException("Unknown variable or property:" + n.getVariableName(), n.line); + } + } + if (n.getVariableName() != null) { + n.setRegNumber(registerNames.indexOf(n.getVariableName())); + } } for (int i = 0; i < registerNames.size(); i++) { localData.registerVars.put(registerNames.get(i), i); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java index f60a391b3..9d3bfdaf8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java @@ -17,823 +17,865 @@ * along with this program. If not, see . */ package com.jpexs.decompiler.flash.abc.avm2.parser.script; + import com.jpexs.decompiler.flash.abc.avm2.parser.ParseException; import java.util.Stack; import java.util.List; import java.util.ArrayList; - /** - * This class is a scanner generated by - * JFlex 1.5.0-SNAPSHOT - * from the specification file D:/Dropbox/Programovani/JavaSE/FFDec/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex + * This class is a scanner generated by + * JFlex 1.5.0-SNAPSHOT from the + * specification file + * D:/Dropbox/Programovani/JavaSE/FFDec/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex */ public final class ActionScriptLexer { - /** This character denotes the end of file */ - public static final int YYEOF = -1; + /** + * This character denotes the end of file + */ + public static final int YYEOF = -1; - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; + /** + * initial size of the lookahead buffer + */ + private static final int ZZ_BUFFERSIZE = 16384; - /** lexical states */ - public static final int YYINITIAL = 0; - public static final int STRING = 2; - public static final int CHARLITERAL = 4; - public static final int XMLSTARTTAG = 6; - public static final int XML = 8; + /** + * lexical states + */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int CHARLITERAL = 4; + public static final int XMLSTARTTAG = 6; + public static final int XML = 8; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l - * at the beginning of a line - * l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 - }; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the + * beginning of a line l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 + }; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\7\1\3\1\2\1\103\1\104\1\1\16\7\4\0\1\14\1\72"+ - "\1\16\1\0\1\6\1\101\1\75\1\30\1\62\1\63\1\5\1\77"+ - "\1\71\1\26\1\11\1\4\1\17\3\23\4\24\2\20\1\10\1\70"+ - "\1\12\1\15\1\13\1\74\1\102\4\22\1\25\1\22\2\6\1\60"+ - "\4\6\1\61\11\6\1\21\2\6\1\66\1\27\1\67\1\100\1\6"+ - "\1\0\1\34\1\31\1\36\1\45\1\33\1\46\1\57\1\51\1\43"+ - "\1\6\1\35\1\47\1\54\1\41\1\40\1\52\1\6\1\32\1\37"+ - "\1\42\1\44\1\55\1\50\1\56\1\53\1\6\1\64\1\76\1\65"+ - "\1\73\6\7\1\105\32\7\2\0\4\6\4\0\1\6\2\0\1\7"+ - "\7\0\1\6\4\0\1\6\5\0\27\6\1\0\37\6\1\0\u01ca\6"+ - "\4\0\14\6\16\0\5\6\7\0\1\6\1\0\1\6\21\0\160\7"+ - "\5\6\1\0\2\6\2\0\4\6\10\0\1\6\1\0\3\6\1\0"+ - "\1\6\1\0\24\6\1\0\123\6\1\0\213\6\1\0\5\7\2\0"+ - "\236\6\11\0\46\6\2\0\1\6\7\0\47\6\11\0\55\7\1\0"+ - "\1\7\1\0\2\7\1\0\2\7\1\0\1\7\10\0\33\6\5\0"+ - "\3\6\15\0\4\7\7\0\1\6\4\0\13\7\5\0\53\6\37\7"+ - "\4\0\2\6\1\7\143\6\1\0\1\6\10\7\1\0\6\7\2\6"+ - "\2\7\1\0\4\7\2\6\12\7\3\6\2\0\1\6\17\0\1\7"+ - "\1\6\1\7\36\6\33\7\2\0\131\6\13\7\1\6\16\0\12\7"+ - "\41\6\11\7\2\6\4\0\1\6\5\0\26\6\4\7\1\6\11\7"+ - "\1\6\3\7\1\6\5\7\22\0\31\6\3\7\244\0\4\7\66\6"+ - "\3\7\1\6\22\7\1\6\7\7\12\6\2\7\2\0\12\7\1\0"+ - "\7\6\1\0\7\6\1\0\3\7\1\0\10\6\2\0\2\6\2\0"+ - "\26\6\1\0\7\6\1\0\1\6\3\0\4\6\2\0\1\7\1\6"+ - "\7\7\2\0\2\7\2\0\3\7\1\6\10\0\1\7\4\0\2\6"+ - "\1\0\3\6\2\7\2\0\12\7\4\6\7\0\1\6\5\0\3\7"+ - "\1\0\6\6\4\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6"+ - "\1\0\2\6\1\0\2\6\2\0\1\7\1\0\5\7\4\0\2\7"+ - "\2\0\3\7\3\0\1\7\7\0\4\6\1\0\1\6\7\0\14\7"+ - "\3\6\1\7\13\0\3\7\1\0\11\6\1\0\3\6\1\0\26\6"+ - "\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6\10\7"+ - "\1\0\3\7\1\0\3\7\2\0\1\6\17\0\2\6\2\7\2\0"+ - "\12\7\1\0\1\6\17\0\3\7\1\0\10\6\2\0\2\6\2\0"+ - "\26\6\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6"+ - "\7\7\2\0\2\7\2\0\3\7\10\0\2\7\4\0\2\6\1\0"+ - "\3\6\2\7\2\0\12\7\1\0\1\6\20\0\1\7\1\6\1\0"+ - "\6\6\3\0\3\6\1\0\4\6\3\0\2\6\1\0\1\6\1\0"+ - "\2\6\3\0\2\6\3\0\3\6\3\0\14\6\4\0\5\7\3\0"+ - "\3\7\1\0\4\7\2\0\1\6\6\0\1\7\16\0\12\7\11\0"+ - "\1\6\7\0\3\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0"+ - "\12\6\1\0\5\6\3\0\1\6\7\7\1\0\3\7\1\0\4\7"+ - "\7\0\2\7\1\0\2\6\6\0\2\6\2\7\2\0\12\7\22\0"+ - "\2\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0"+ - "\5\6\2\0\1\7\1\6\7\7\1\0\3\7\1\0\4\7\7\0"+ - "\2\7\7\0\1\6\1\0\2\6\2\7\2\0\12\7\1\0\2\6"+ - "\17\0\2\7\1\0\10\6\1\0\3\6\1\0\51\6\2\0\1\6"+ - "\7\7\1\0\3\7\1\0\4\7\1\6\10\0\1\7\10\0\2\6"+ - "\2\7\2\0\12\7\12\0\6\6\2\0\2\7\1\0\22\6\3\0"+ - "\30\6\1\0\11\6\1\0\1\6\2\0\7\6\3\0\1\7\4\0"+ - "\6\7\1\0\1\7\1\0\10\7\22\0\2\7\15\0\60\6\1\7"+ - "\2\6\7\7\4\0\10\6\10\7\1\0\12\7\47\0\2\6\1\0"+ - "\1\6\2\0\2\6\1\0\1\6\2\0\1\6\6\0\4\6\1\0"+ - "\7\6\1\0\3\6\1\0\1\6\1\0\1\6\2\0\2\6\1\0"+ - "\4\6\1\7\2\6\6\7\1\0\2\7\1\6\2\0\5\6\1\0"+ - "\1\6\1\0\6\7\2\0\12\7\2\0\2\6\42\0\1\6\27\0"+ - "\2\7\6\0\12\7\13\0\1\7\1\0\1\7\1\0\1\7\4\0"+ - "\2\7\10\6\1\0\44\6\4\0\24\7\1\0\2\7\5\6\13\7"+ - "\1\0\44\7\11\0\1\7\71\0\53\6\24\7\1\6\12\7\6\0"+ - "\6\6\4\7\4\6\3\7\1\6\3\7\2\6\7\7\3\6\4\7"+ - "\15\6\14\7\1\6\17\7\2\0\46\6\12\0\53\6\1\0\1\6"+ - "\3\0\u0149\6\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6"+ - "\2\0\51\6\1\0\4\6\2\0\41\6\1\0\4\6\2\0\7\6"+ - "\1\0\1\6\1\0\4\6\2\0\17\6\1\0\71\6\1\0\4\6"+ - "\2\0\103\6\2\0\3\7\40\0\20\6\20\0\125\6\14\0\u026c\6"+ - "\2\0\21\6\1\0\32\6\5\0\113\6\3\0\3\6\17\0\15\6"+ - "\1\0\4\6\3\7\13\0\22\6\3\7\13\0\22\6\2\7\14\0"+ - "\15\6\1\0\3\6\1\0\2\7\14\0\64\6\40\7\3\0\1\6"+ - "\3\0\2\6\1\7\2\0\12\7\41\0\3\7\2\0\12\7\6\0"+ - "\130\6\10\0\51\6\1\7\1\6\5\0\106\6\12\0\35\6\3\0"+ - "\14\7\4\0\14\7\12\0\12\7\36\6\2\0\5\6\13\0\54\6"+ - "\4\0\21\7\7\6\2\7\6\0\12\7\46\0\27\6\5\7\4\0"+ - "\65\6\12\7\1\0\35\7\2\0\13\7\6\0\12\7\15\0\1\6"+ - "\130\0\5\7\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0"+ - "\3\7\36\6\12\7\3\0\2\6\12\7\6\0\46\6\16\7\14\0"+ - "\44\6\24\7\10\0\12\7\3\0\3\6\12\7\44\6\122\0\3\7"+ - "\1\0\25\7\4\6\1\7\4\6\1\7\15\0\300\6\47\7\25\0"+ - "\4\7\u0116\6\2\0\6\6\2\0\46\6\2\0\6\6\2\0\10\6"+ - "\1\0\1\6\1\0\1\6\1\0\1\6\1\0\37\6\2\0\65\6"+ - "\1\0\7\6\1\0\1\6\3\0\3\6\1\0\7\6\3\0\4\6"+ - "\2\0\6\6\4\0\15\6\5\0\3\6\1\0\7\6\16\0\5\7"+ - "\30\0\1\103\1\103\5\7\20\0\2\6\23\0\1\6\13\0\5\7"+ - "\5\0\6\7\1\0\1\6\15\0\1\6\20\0\15\6\3\0\32\6"+ - "\26\0\15\7\4\0\1\7\3\0\14\7\21\0\1\6\4\0\1\6"+ - "\2\0\12\6\1\0\1\6\3\0\5\6\6\0\1\6\1\0\1\6"+ - "\1\0\1\6\1\0\4\6\1\0\13\6\2\0\4\6\5\0\5\6"+ - "\4\0\1\6\21\0\51\6\u0a77\0\57\6\1\0\57\6\1\0\205\6"+ - "\6\0\4\6\3\7\16\0\46\6\12\0\66\6\11\0\1\6\17\0"+ - "\1\7\27\6\11\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6"+ - "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\40\7"+ - "\57\0\1\6\u01d5\0\3\6\31\0\11\6\6\7\1\0\5\6\2\0"+ - "\5\6\4\0\126\6\2\0\2\7\2\0\3\6\1\0\132\6\1\0"+ - "\4\6\5\0\51\6\3\0\136\6\21\0\33\6\65\0\20\6\u0200\0"+ - "\u19b6\6\112\0\u51cc\6\64\0\u048d\6\103\0\56\6\2\0\u010d\6\3\0"+ - "\20\6\12\7\2\6\24\0\57\6\1\7\14\0\2\7\1\0\31\6"+ - "\10\0\120\6\2\7\45\0\11\6\2\0\147\6\2\0\4\6\1\0"+ - "\2\6\16\0\12\6\120\0\10\6\1\7\3\6\1\7\4\6\1\7"+ - "\27\6\5\7\20\0\1\6\7\0\64\6\14\0\2\7\62\6\21\7"+ - "\13\0\12\7\6\0\22\7\6\6\3\0\1\6\4\0\12\7\34\6"+ - "\10\7\2\0\27\6\15\7\14\0\35\6\3\0\4\7\57\6\16\7"+ - "\16\0\1\6\12\7\46\0\51\6\16\7\11\0\3\6\1\7\10\6"+ - "\2\7\2\0\12\7\6\0\27\6\3\0\1\6\1\7\4\0\60\6"+ - "\1\7\1\6\3\7\2\6\2\7\5\6\2\7\1\6\1\7\1\6"+ - "\30\0\3\6\43\0\6\6\2\0\6\6\2\0\6\6\11\0\7\6"+ - "\1\0\7\6\221\0\43\6\10\7\1\0\2\7\2\0\12\7\6\0"+ - "\u2ba4\6\14\0\27\6\4\0\61\6\u2104\0\u012e\6\2\0\76\6\2\0"+ - "\152\6\46\0\7\6\14\0\5\6\5\0\1\6\1\7\12\6\1\0"+ - "\15\6\1\0\5\6\1\0\1\6\1\0\2\6\1\0\2\6\1\0"+ - "\154\6\41\0\u016b\6\22\0\100\6\2\0\66\6\50\0\15\6\3\0"+ - "\20\7\20\0\7\7\14\0\2\6\30\0\3\6\31\0\1\6\6\0"+ - "\5\6\1\0\207\6\2\0\1\7\4\0\1\6\13\0\12\7\7\0"+ - "\32\6\4\0\1\6\1\0\32\6\13\0\131\6\3\0\6\6\2\0"+ - "\6\6\2\0\6\6\2\0\3\6\3\0\2\6\3\0\2\6\22\0"+ - "\3\7\4\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED + = "\11\7\1\3\1\2\1\103\1\104\1\1\16\7\4\0\1\14\1\72" + + "\1\16\1\0\1\6\1\101\1\75\1\30\1\62\1\63\1\5\1\77" + + "\1\71\1\26\1\11\1\4\1\17\3\23\4\24\2\20\1\10\1\70" + + "\1\12\1\15\1\13\1\74\1\102\4\22\1\25\1\22\2\6\1\60" + + "\4\6\1\61\11\6\1\21\2\6\1\66\1\27\1\67\1\100\1\6" + + "\1\0\1\34\1\31\1\36\1\45\1\33\1\46\1\57\1\51\1\43" + + "\1\6\1\35\1\47\1\54\1\41\1\40\1\52\1\6\1\32\1\37" + + "\1\42\1\44\1\55\1\50\1\56\1\53\1\6\1\64\1\76\1\65" + + "\1\73\6\7\1\105\32\7\2\0\4\6\4\0\1\6\2\0\1\7" + + "\7\0\1\6\4\0\1\6\5\0\27\6\1\0\37\6\1\0\u01ca\6" + + "\4\0\14\6\16\0\5\6\7\0\1\6\1\0\1\6\21\0\160\7" + + "\5\6\1\0\2\6\2\0\4\6\10\0\1\6\1\0\3\6\1\0" + + "\1\6\1\0\24\6\1\0\123\6\1\0\213\6\1\0\5\7\2\0" + + "\236\6\11\0\46\6\2\0\1\6\7\0\47\6\11\0\55\7\1\0" + + "\1\7\1\0\2\7\1\0\2\7\1\0\1\7\10\0\33\6\5\0" + + "\3\6\15\0\4\7\7\0\1\6\4\0\13\7\5\0\53\6\37\7" + + "\4\0\2\6\1\7\143\6\1\0\1\6\10\7\1\0\6\7\2\6" + + "\2\7\1\0\4\7\2\6\12\7\3\6\2\0\1\6\17\0\1\7" + + "\1\6\1\7\36\6\33\7\2\0\131\6\13\7\1\6\16\0\12\7" + + "\41\6\11\7\2\6\4\0\1\6\5\0\26\6\4\7\1\6\11\7" + + "\1\6\3\7\1\6\5\7\22\0\31\6\3\7\244\0\4\7\66\6" + + "\3\7\1\6\22\7\1\6\7\7\12\6\2\7\2\0\12\7\1\0" + + "\7\6\1\0\7\6\1\0\3\7\1\0\10\6\2\0\2\6\2\0" + + "\26\6\1\0\7\6\1\0\1\6\3\0\4\6\2\0\1\7\1\6" + + "\7\7\2\0\2\7\2\0\3\7\1\6\10\0\1\7\4\0\2\6" + + "\1\0\3\6\2\7\2\0\12\7\4\6\7\0\1\6\5\0\3\7" + + "\1\0\6\6\4\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6" + + "\1\0\2\6\1\0\2\6\2\0\1\7\1\0\5\7\4\0\2\7" + + "\2\0\3\7\3\0\1\7\7\0\4\6\1\0\1\6\7\0\14\7" + + "\3\6\1\7\13\0\3\7\1\0\11\6\1\0\3\6\1\0\26\6" + + "\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6\10\7" + + "\1\0\3\7\1\0\3\7\2\0\1\6\17\0\2\6\2\7\2\0" + + "\12\7\1\0\1\6\17\0\3\7\1\0\10\6\2\0\2\6\2\0" + + "\26\6\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6" + + "\7\7\2\0\2\7\2\0\3\7\10\0\2\7\4\0\2\6\1\0" + + "\3\6\2\7\2\0\12\7\1\0\1\6\20\0\1\7\1\6\1\0" + + "\6\6\3\0\3\6\1\0\4\6\3\0\2\6\1\0\1\6\1\0" + + "\2\6\3\0\2\6\3\0\3\6\3\0\14\6\4\0\5\7\3\0" + + "\3\7\1\0\4\7\2\0\1\6\6\0\1\7\16\0\12\7\11\0" + + "\1\6\7\0\3\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0" + + "\12\6\1\0\5\6\3\0\1\6\7\7\1\0\3\7\1\0\4\7" + + "\7\0\2\7\1\0\2\6\6\0\2\6\2\7\2\0\12\7\22\0" + + "\2\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0" + + "\5\6\2\0\1\7\1\6\7\7\1\0\3\7\1\0\4\7\7\0" + + "\2\7\7\0\1\6\1\0\2\6\2\7\2\0\12\7\1\0\2\6" + + "\17\0\2\7\1\0\10\6\1\0\3\6\1\0\51\6\2\0\1\6" + + "\7\7\1\0\3\7\1\0\4\7\1\6\10\0\1\7\10\0\2\6" + + "\2\7\2\0\12\7\12\0\6\6\2\0\2\7\1\0\22\6\3\0" + + "\30\6\1\0\11\6\1\0\1\6\2\0\7\6\3\0\1\7\4\0" + + "\6\7\1\0\1\7\1\0\10\7\22\0\2\7\15\0\60\6\1\7" + + "\2\6\7\7\4\0\10\6\10\7\1\0\12\7\47\0\2\6\1\0" + + "\1\6\2\0\2\6\1\0\1\6\2\0\1\6\6\0\4\6\1\0" + + "\7\6\1\0\3\6\1\0\1\6\1\0\1\6\2\0\2\6\1\0" + + "\4\6\1\7\2\6\6\7\1\0\2\7\1\6\2\0\5\6\1\0" + + "\1\6\1\0\6\7\2\0\12\7\2\0\2\6\42\0\1\6\27\0" + + "\2\7\6\0\12\7\13\0\1\7\1\0\1\7\1\0\1\7\4\0" + + "\2\7\10\6\1\0\44\6\4\0\24\7\1\0\2\7\5\6\13\7" + + "\1\0\44\7\11\0\1\7\71\0\53\6\24\7\1\6\12\7\6\0" + + "\6\6\4\7\4\6\3\7\1\6\3\7\2\6\7\7\3\6\4\7" + + "\15\6\14\7\1\6\17\7\2\0\46\6\12\0\53\6\1\0\1\6" + + "\3\0\u0149\6\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6" + + "\2\0\51\6\1\0\4\6\2\0\41\6\1\0\4\6\2\0\7\6" + + "\1\0\1\6\1\0\4\6\2\0\17\6\1\0\71\6\1\0\4\6" + + "\2\0\103\6\2\0\3\7\40\0\20\6\20\0\125\6\14\0\u026c\6" + + "\2\0\21\6\1\0\32\6\5\0\113\6\3\0\3\6\17\0\15\6" + + "\1\0\4\6\3\7\13\0\22\6\3\7\13\0\22\6\2\7\14\0" + + "\15\6\1\0\3\6\1\0\2\7\14\0\64\6\40\7\3\0\1\6" + + "\3\0\2\6\1\7\2\0\12\7\41\0\3\7\2\0\12\7\6\0" + + "\130\6\10\0\51\6\1\7\1\6\5\0\106\6\12\0\35\6\3\0" + + "\14\7\4\0\14\7\12\0\12\7\36\6\2\0\5\6\13\0\54\6" + + "\4\0\21\7\7\6\2\7\6\0\12\7\46\0\27\6\5\7\4\0" + + "\65\6\12\7\1\0\35\7\2\0\13\7\6\0\12\7\15\0\1\6" + + "\130\0\5\7\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0" + + "\3\7\36\6\12\7\3\0\2\6\12\7\6\0\46\6\16\7\14\0" + + "\44\6\24\7\10\0\12\7\3\0\3\6\12\7\44\6\122\0\3\7" + + "\1\0\25\7\4\6\1\7\4\6\1\7\15\0\300\6\47\7\25\0" + + "\4\7\u0116\6\2\0\6\6\2\0\46\6\2\0\6\6\2\0\10\6" + + "\1\0\1\6\1\0\1\6\1\0\1\6\1\0\37\6\2\0\65\6" + + "\1\0\7\6\1\0\1\6\3\0\3\6\1\0\7\6\3\0\4\6" + + "\2\0\6\6\4\0\15\6\5\0\3\6\1\0\7\6\16\0\5\7" + + "\30\0\1\103\1\103\5\7\20\0\2\6\23\0\1\6\13\0\5\7" + + "\5\0\6\7\1\0\1\6\15\0\1\6\20\0\15\6\3\0\32\6" + + "\26\0\15\7\4\0\1\7\3\0\14\7\21\0\1\6\4\0\1\6" + + "\2\0\12\6\1\0\1\6\3\0\5\6\6\0\1\6\1\0\1\6" + + "\1\0\1\6\1\0\4\6\1\0\13\6\2\0\4\6\5\0\5\6" + + "\4\0\1\6\21\0\51\6\u0a77\0\57\6\1\0\57\6\1\0\205\6" + + "\6\0\4\6\3\7\16\0\46\6\12\0\66\6\11\0\1\6\17\0" + + "\1\7\27\6\11\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6" + + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\40\7" + + "\57\0\1\6\u01d5\0\3\6\31\0\11\6\6\7\1\0\5\6\2\0" + + "\5\6\4\0\126\6\2\0\2\7\2\0\3\6\1\0\132\6\1\0" + + "\4\6\5\0\51\6\3\0\136\6\21\0\33\6\65\0\20\6\u0200\0" + + "\u19b6\6\112\0\u51cc\6\64\0\u048d\6\103\0\56\6\2\0\u010d\6\3\0" + + "\20\6\12\7\2\6\24\0\57\6\1\7\14\0\2\7\1\0\31\6" + + "\10\0\120\6\2\7\45\0\11\6\2\0\147\6\2\0\4\6\1\0" + + "\2\6\16\0\12\6\120\0\10\6\1\7\3\6\1\7\4\6\1\7" + + "\27\6\5\7\20\0\1\6\7\0\64\6\14\0\2\7\62\6\21\7" + + "\13\0\12\7\6\0\22\7\6\6\3\0\1\6\4\0\12\7\34\6" + + "\10\7\2\0\27\6\15\7\14\0\35\6\3\0\4\7\57\6\16\7" + + "\16\0\1\6\12\7\46\0\51\6\16\7\11\0\3\6\1\7\10\6" + + "\2\7\2\0\12\7\6\0\27\6\3\0\1\6\1\7\4\0\60\6" + + "\1\7\1\6\3\7\2\6\2\7\5\6\2\7\1\6\1\7\1\6" + + "\30\0\3\6\43\0\6\6\2\0\6\6\2\0\6\6\11\0\7\6" + + "\1\0\7\6\221\0\43\6\10\7\1\0\2\7\2\0\12\7\6\0" + + "\u2ba4\6\14\0\27\6\4\0\61\6\u2104\0\u012e\6\2\0\76\6\2\0" + + "\152\6\46\0\7\6\14\0\5\6\5\0\1\6\1\7\12\6\1\0" + + "\15\6\1\0\5\6\1\0\1\6\1\0\2\6\1\0\2\6\1\0" + + "\154\6\41\0\u016b\6\22\0\100\6\2\0\66\6\50\0\15\6\3\0" + + "\20\7\20\0\7\7\14\0\2\6\30\0\3\6\31\0\1\6\6\0" + + "\5\6\1\0\207\6\2\0\1\7\4\0\1\6\13\0\12\7\7\0" + + "\32\6\4\0\1\6\1\0\32\6\13\0\131\6\3\0\6\6\2\0" + + "\6\6\2\0\6\6\2\0\3\6\3\0\2\6\3\0\2\6\22\0" + + "\3\7\4\0"; - /** - * Translates characters to character classes - */ - private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int [] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int[] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 = - "\5\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7"+ - "\1\10\1\11\1\12\1\13\1\14\2\15\1\16\1\17"+ - "\23\6\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+ - "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36"+ - "\1\37\1\40\1\41\2\42\1\43\1\1\1\41\2\44"+ - "\1\41\1\1\1\45\3\41\1\3\1\0\1\46\1\47"+ - "\1\50\2\0\1\51\1\0\1\52\1\53\1\54\1\55"+ - "\1\56\1\57\1\51\1\0\2\57\1\0\1\60\1\61"+ - "\5\6\1\62\16\6\1\63\1\64\1\65\4\6\1\66"+ - "\17\6\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ - "\1\76\1\77\1\100\1\101\2\102\1\103\1\104\1\105"+ - "\1\106\1\107\1\110\1\111\6\0\2\3\2\0\1\112"+ - "\3\0\1\113\1\0\1\114\1\115\1\116\1\117\2\120"+ - "\1\57\1\51\1\0\11\6\1\121\4\6\1\122\3\6"+ - "\1\123\6\6\1\124\5\6\1\125\10\6\1\126\1\6"+ - "\1\127\1\6\1\130\1\131\1\102\7\0\1\132\5\0"+ - "\1\133\1\120\1\57\2\6\1\134\1\135\1\6\1\136"+ - "\11\6\1\137\1\140\1\6\1\141\14\6\1\142\5\6"+ - "\1\143\1\6\1\41\1\0\1\144\12\0\1\120\1\57"+ - "\1\145\2\6\1\146\1\147\1\6\1\150\1\6\1\151"+ - "\3\6\1\152\11\6\1\153\1\154\1\6\1\155\5\6"+ - "\10\0\1\120\1\57\1\156\2\6\1\157\1\160\2\6"+ - "\1\161\3\6\1\162\3\6\1\163\6\6\1\164\1\6"+ - "\2\0\1\113\1\120\1\57\1\165\10\6\1\166\1\167"+ - "\1\170\2\6\1\171\1\172\1\6\1\41\1\120\1\57"+ - "\1\173\1\174\2\6\1\175\3\6\1\176\1\6\1\177"+ - "\1\120\1\57\1\200\1\6\1\201\1\6\1\202\1\203"+ - "\1\120\1\57\1\204\1\205\6\57"; + private static final String ZZ_ACTION_PACKED_0 + = "\5\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7" + + "\1\10\1\11\1\12\1\13\1\14\2\15\1\16\1\17" + + "\23\6\1\20\1\21\1\22\1\23\1\24\1\25\1\26" + + "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36" + + "\1\37\1\40\1\41\2\42\1\43\1\1\1\41\2\44" + + "\1\41\1\1\1\45\3\41\1\3\1\0\1\46\1\47" + + "\1\50\2\0\1\51\1\0\1\52\1\53\1\54\1\55" + + "\1\56\1\57\1\51\1\0\2\57\1\0\1\60\1\61" + + "\5\6\1\62\16\6\1\63\1\64\1\65\4\6\1\66" + + "\17\6\1\67\1\70\1\71\1\72\1\73\1\74\1\75" + + "\1\76\1\77\1\100\1\101\2\102\1\103\1\104\1\105" + + "\1\106\1\107\1\110\1\111\6\0\2\3\2\0\1\112" + + "\3\0\1\113\1\0\1\114\1\115\1\116\1\117\2\120" + + "\1\57\1\51\1\0\11\6\1\121\4\6\1\122\3\6" + + "\1\123\6\6\1\124\5\6\1\125\10\6\1\126\1\6" + + "\1\127\1\6\1\130\1\131\1\102\7\0\1\132\5\0" + + "\1\133\1\120\1\57\2\6\1\134\1\135\1\6\1\136" + + "\11\6\1\137\1\140\1\6\1\141\14\6\1\142\5\6" + + "\1\143\1\6\1\41\1\0\1\144\12\0\1\120\1\57" + + "\1\145\2\6\1\146\1\147\1\6\1\150\1\6\1\151" + + "\3\6\1\152\11\6\1\153\1\154\1\6\1\155\5\6" + + "\10\0\1\120\1\57\1\156\2\6\1\157\1\160\2\6" + + "\1\161\3\6\1\162\3\6\1\163\6\6\1\164\1\6" + + "\2\0\1\113\1\120\1\57\1\165\10\6\1\166\1\167" + + "\1\170\2\6\1\171\1\172\1\6\1\41\1\120\1\57" + + "\1\173\1\174\2\6\1\175\3\6\1\176\1\6\1\177" + + "\1\120\1\57\1\200\1\6\1\201\1\6\1\202\1\203" + + "\1\120\1\57\1\204\1\205\6\57"; - private static int [] zzUnpackAction() { - int [] result = new int[418]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackAction() { + int[] result = new int[418]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; } - return j; - } + private static int zzUnpackAction(String packed, int offset, int[] result) { + int i = 0; /* index in packed string */ - /** - * Translates a state to a row index in the transition table - */ - private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + int j = offset; /* index in unpacked array */ - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\106\0\214\0\322\0\u0118\0\u015e\0\u01a4\0\u015e"+ - "\0\u01ea\0\u0230\0\u0276\0\u02bc\0\u0302\0\u0348\0\u038e\0\u03d4"+ - "\0\u041a\0\u015e\0\u0460\0\u04a6\0\u04ec\0\u015e\0\u0532\0\u0578"+ - "\0\u05be\0\u0604\0\u064a\0\u0690\0\u06d6\0\u071c\0\u0762\0\u07a8"+ - "\0\u07ee\0\u0834\0\u087a\0\u08c0\0\u0906\0\u094c\0\u0992\0\u09d8"+ - "\0\u0a1e\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e"+ - "\0\u015e\0\u0a64\0\u015e\0\u015e\0\u0aaa\0\u0af0\0\u0b36\0\u0b7c"+ - "\0\u0bc2\0\u015e\0\u0c08\0\u0c4e\0\u015e\0\u015e\0\u0c94\0\u0cda"+ - "\0\u0d20\0\u015e\0\u0d66\0\u0dac\0\u015e\0\u0df2\0\u015e\0\u0e38"+ - "\0\u0e7e\0\u0ec4\0\u015e\0\u015e\0\u015e\0\u0f0a\0\u0f50\0\u0f96"+ - "\0\u0fdc\0\u1022\0\u015e\0\u1068\0\u015e\0\u10ae\0\u10f4\0\u113a"+ - "\0\u1180\0\u11c6\0\u120c\0\u1252\0\u015e\0\u015e\0\u1298\0\u12de"+ - "\0\u1324\0\u136a\0\u13b0\0\u02bc\0\u13f6\0\u143c\0\u1482\0\u14c8"+ - "\0\u150e\0\u1554\0\u159a\0\u15e0\0\u1626\0\u166c\0\u16b2\0\u16f8"+ - "\0\u173e\0\u1784\0\u02bc\0\u17ca\0\u02bc\0\u1810\0\u1856\0\u189c"+ - "\0\u18e2\0\u02bc\0\u1928\0\u196e\0\u19b4\0\u19fa\0\u1a40\0\u1a86"+ - "\0\u1acc\0\u1b12\0\u1b58\0\u1b9e\0\u1be4\0\u1c2a\0\u1c70\0\u1cb6"+ - "\0\u1cfc\0\u1d42\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e"+ - "\0\u015e\0\u015e\0\u015e\0\u015e\0\u1d88\0\u1dce\0\u015e\0\u015e"+ - "\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e\0\u0dac\0\u1e14\0\u1e5a"+ - "\0\u1ea0\0\u1ee6\0\u1f2c\0\u1f72\0\u015e\0\u1fb8\0\u1ffe\0\u015e"+ - "\0\u2044\0\u208a\0\u20d0\0\u015e\0\u2116\0\u015e\0\u215c\0\u015e"+ - "\0\u015e\0\u1180\0\u21a2\0\u21e8\0\u222e\0\u222e\0\u2274\0\u22ba"+ - "\0\u2300\0\u2346\0\u238c\0\u23d2\0\u2418\0\u245e\0\u24a4\0\u02bc"+ - "\0\u24ea\0\u2530\0\u2576\0\u25bc\0\u02bc\0\u2602\0\u2648\0\u268e"+ - "\0\u02bc\0\u26d4\0\u271a\0\u2760\0\u27a6\0\u27ec\0\u2832\0\u02bc"+ - "\0\u2878\0\u28be\0\u2904\0\u294a\0\u2990\0\u02bc\0\u29d6\0\u2a1c"+ - "\0\u2a62\0\u2aa8\0\u2aee\0\u2b34\0\u2b7a\0\u2bc0\0\u02bc\0\u2c06"+ - "\0\u02bc\0\u2c4c\0\u02bc\0\u015e\0\u015e\0\u2c92\0\u2cd8\0\u2d1e"+ - "\0\u2d64\0\u2daa\0\u2df0\0\u2e36\0\u015e\0\u2e7c\0\u2ec2\0\u2f08"+ - "\0\u2f4e\0\u2f94\0\u015e\0\u2fda\0\u3020\0\u3066\0\u30ac\0\u02bc"+ - "\0\u02bc\0\u30f2\0\u02bc\0\u3138\0\u317e\0\u31c4\0\u320a\0\u3250"+ - "\0\u3296\0\u32dc\0\u3322\0\u3368\0\u02bc\0\u02bc\0\u33ae\0\u02bc"+ - "\0\u33f4\0\u343a\0\u3480\0\u34c6\0\u350c\0\u3552\0\u3598\0\u35de"+ - "\0\u3624\0\u366a\0\u36b0\0\u36f6\0\u02bc\0\u373c\0\u3782\0\u37c8"+ - "\0\u380e\0\u3854\0\u02bc\0\u389a\0\u38e0\0\u3926\0\u015e\0\u396c"+ - "\0\u39b2\0\u39f8\0\u3a3e\0\u3a84\0\u3aca\0\u3b10\0\u3b56\0\u3b9c"+ - "\0\u3be2\0\u3c28\0\u3c6e\0\u02bc\0\u3cb4\0\u3cfa\0\u02bc\0\u02bc"+ - "\0\u3d40\0\u02bc\0\u3d86\0\u02bc\0\u3dcc\0\u3e12\0\u3e58\0\u02bc"+ - "\0\u3e9e\0\u3ee4\0\u3f2a\0\u3f70\0\u3fb6\0\u3ffc\0\u4042\0\u4088"+ - "\0\u40ce\0\u02bc\0\u4114\0\u415a\0\u02bc\0\u41a0\0\u41e6\0\u422c"+ - "\0\u4272\0\u42b8\0\u42fe\0\u4344\0\u438a\0\u43d0\0\u4416\0\u445c"+ - "\0\u44a2\0\u44e8\0\u452e\0\u4574\0\u02bc\0\u45ba\0\u4600\0\u02bc"+ - "\0\u02bc\0\u4646\0\u468c\0\u02bc\0\u46d2\0\u4718\0\u475e\0\u02bc"+ - "\0\u47a4\0\u47ea\0\u4830\0\u02bc\0\u4876\0\u48bc\0\u4902\0\u4948"+ - "\0\u498e\0\u49d4\0\u02bc\0\u4a1a\0\u4a60\0\u4aa6\0\u3b10\0\u4aec"+ - "\0\u4b32\0\u02bc\0\u4b78\0\u4bbe\0\u4c04\0\u4c4a\0\u4c90\0\u4cd6"+ - "\0\u4d1c\0\u4d62\0\u02bc\0\u02bc\0\u02bc\0\u4da8\0\u4dee\0\u02bc"+ - "\0\u02bc\0\u4e34\0\u438a\0\u4e7a\0\u4ec0\0\u02bc\0\u02bc\0\u4f06"+ - "\0\u4f4c\0\u02bc\0\u4f92\0\u4fd8\0\u501e\0\u02bc\0\u5064\0\u02bc"+ - "\0\u50aa\0\u50f0\0\u02bc\0\u5136\0\u02bc\0\u517c\0\u02bc\0\u02bc"+ - "\0\u015e\0\u51c2\0\u02bc\0\u02bc\0\u5208\0\u524e\0\u5294\0\u52da"+ - "\0\u5320\0\u113a"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[418]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; } - return j; - } - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); + /** + * Translates a state to a row index in the transition table + */ + private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - private static final String ZZ_TRANS_PACKED_0 = - "\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\6"+ - "\1\15\1\16\1\17\1\20\1\11\1\21\1\22\1\23"+ - "\1\24\2\14\2\24\1\14\1\25\1\6\1\26\1\27"+ - "\1\30\1\31\1\32\1\14\1\33\1\34\1\35\1\36"+ - "\1\37\1\40\1\41\1\42\1\43\1\14\1\44\1\14"+ - "\1\45\2\14\1\46\1\14\1\47\1\50\1\51\1\52"+ - "\1\53\1\54\1\55\1\56\1\57\1\60\1\61\1\62"+ - "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72"+ - "\1\0\1\11\1\0\1\73\1\74\1\75\13\73\1\76"+ - "\10\73\1\77\56\73\1\100\1\74\1\75\24\100\1\77"+ - "\1\76\55\100\1\6\1\101\1\102\1\103\2\6\1\104"+ - "\4\6\1\105\1\106\4\6\2\104\2\6\1\104\3\6"+ - "\31\104\21\6\1\0\1\103\1\0\1\107\1\101\1\102"+ - "\7\107\1\110\70\107\113\0\1\10\106\0\1\11\10\0"+ - "\1\11\67\0\1\11\5\0\1\111\1\112\7\0\1\113"+ - "\105\0\1\114\76\0\2\14\7\0\7\14\3\0\31\14"+ - "\23\0\1\14\10\0\1\115\106\0\1\116\1\117\4\0"+ - "\2\120\2\0\2\120\67\0\1\121\3\0\1\122\2\0"+ - "\1\123\3\0\2\121\2\0\1\121\3\0\31\121\37\0"+ - "\1\124\1\0\1\125\105\0\1\126\101\0\1\120\5\0"+ - "\1\127\1\130\1\131\1\0\1\132\1\133\1\134\5\0"+ - "\1\134\22\0\1\131\40\0\1\120\5\0\2\24\2\0"+ - "\2\24\1\134\5\0\1\134\67\0\1\135\10\0\1\136"+ - "\65\0\2\14\7\0\7\14\3\0\1\14\1\137\27\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14"+ - "\1\140\26\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\3\14\1\141\12\14\1\142\6\14\1\143\3\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\6\14"+ - "\1\144\22\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\3\14\1\145\3\14\1\146\6\14\1\147\12\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14"+ - "\1\150\6\14\1\151\1\14\1\152\3\14\1\153\11\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\24\14"+ - "\1\154\4\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\2\14\1\155\1\156\7\14\1\157\15\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\1\14\1\160"+ - "\16\14\1\161\1\14\1\162\6\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\6\14\1\163\1\14\1\164"+ - "\4\14\1\165\5\14\1\166\5\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\6\14\1\167\1\14\1\170"+ - "\20\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\2\14\1\171\4\14\1\172\12\14\1\173\6\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\3\14\1\174"+ - "\3\14\1\175\2\14\1\176\1\177\15\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\12\14\1\200\5\14"+ - "\1\201\10\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\1\14\1\202\1\14\1\203\7\14\1\204\15\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\3\14"+ - "\1\205\3\14\1\206\21\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\2\14\1\207\26\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\10\14\1\210\20\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\3\14"+ - "\1\211\25\14\23\0\1\14\15\0\1\212\105\0\1\213"+ - "\57\0\1\214\25\0\1\215\60\0\1\216\24\0\1\217"+ - "\61\0\1\220\23\0\1\221\105\0\1\222\70\0\1\73"+ - "\2\0\13\73\1\0\10\73\1\0\56\73\2\0\1\75"+ - "\103\0\1\223\2\0\13\223\1\224\1\225\3\223\1\225"+ - "\1\226\2\223\1\227\1\230\1\231\1\232\6\223\1\233"+ - "\1\234\3\223\1\235\34\223\3\0\1\100\2\0\24\100"+ - "\2\0\55\100\2\0\1\102\106\0\1\103\10\0\1\103"+ - "\67\0\1\103\7\0\2\236\1\237\3\0\1\240\1\241"+ - "\1\0\7\236\3\0\31\236\23\0\1\236\3\0\1\103"+ - "\2\0\1\236\5\0\1\106\4\0\2\236\2\0\1\236"+ - "\3\0\31\236\22\0\1\103\5\0\1\242\1\0\1\243"+ - "\12\0\2\243\2\0\1\243\3\0\31\243\24\0\1\111"+ - "\1\244\1\245\103\111\5\246\1\247\100\246\11\0\1\250"+ - "\102\0\1\251\12\0\2\251\2\0\1\251\3\0\31\251"+ - "\43\0\2\120\2\0\2\120\1\134\5\0\1\134\60\0"+ - "\1\252\1\121\1\253\2\0\1\254\1\255\2\0\2\121"+ - "\2\252\2\121\1\252\3\0\31\252\23\0\1\121\15\0"+ - "\1\256\103\0\1\257\1\0\1\260\105\0\1\261\101\0"+ - "\1\120\5\0\1\127\1\130\2\0\1\132\1\133\1\134"+ - "\5\0\1\134\63\0\1\120\5\0\2\130\2\0\2\130"+ - "\1\134\5\0\1\134\71\0\1\262\1\263\1\0\4\263"+ - "\3\0\1\263\1\0\2\263\1\0\1\263\6\0\2\263"+ - "\50\0\1\120\5\0\1\133\1\130\2\0\2\133\1\134"+ - "\5\0\1\134\63\0\1\120\5\0\1\264\1\130\2\0"+ - "\2\264\1\134\5\0\1\134\71\0\2\265\2\0\2\265"+ - "\1\0\1\266\50\0\1\266\14\0\2\14\7\0\7\14"+ - "\3\0\2\14\1\267\26\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\11\14\1\270\17\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\5\14\1\271\23\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\6\14"+ - "\1\272\22\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\11\14\1\273\17\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\6\14\1\274\2\14\1\275\17\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\10\14"+ - "\1\276\20\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\3\14\1\277\25\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\11\14\1\300\17\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\3\14\1\301\25\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\21\14"+ - "\1\302\7\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\12\14\1\303\16\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\2\14\1\304\26\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\17\14\1\305\11\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\23\14"+ - "\1\306\5\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\16\14\1\307\12\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\13\14\1\310\6\14\1\311\6\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\1\14"+ - "\1\312\10\14\1\313\16\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\21\14\1\314\7\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\6\14\1\315\2\14"+ - "\1\316\17\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\21\14\1\317\7\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\2\14\1\320\26\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\14\14\1\321\14\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\15\14"+ - "\1\322\1\323\12\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\10\14\1\324\20\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\16\14\1\325\12\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\1\14\1\326"+ - "\27\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\10\14\1\327\20\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\10\14\1\330\20\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\11\14\1\331\17\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\12\14\1\332"+ - "\16\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\7\14\1\333\2\14\1\334\16\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\5\14\1\335\23\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\1\336\30\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\1\14"+ - "\1\337\27\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\12\14\1\340\16\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\11\14\1\341\17\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\15\14\1\342\13\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\30\14"+ - "\1\343\23\0\1\14\15\0\1\344\107\0\1\226\3\0"+ - "\2\226\100\0\1\345\3\0\2\345\67\0\1\346\12\0"+ - "\2\346\2\0\1\346\3\0\31\346\40\0\1\240\1\241"+ - "\104\0\1\241\1\0\1\347\75\0\1\350\12\0\2\350"+ - "\2\0\1\350\3\0\31\350\32\0\1\351\1\243\1\352"+ - "\2\0\1\107\1\353\2\0\2\243\2\351\2\243\1\351"+ - "\3\0\31\351\23\0\1\243\2\0\1\245\103\0\5\246"+ - "\1\354\100\246\4\0\1\245\1\247\106\0\2\251\3\0"+ - "\1\355\3\0\7\251\3\0\31\251\23\0\1\251\6\0"+ - "\2\252\1\356\2\0\1\254\1\357\1\360\1\0\7\252"+ - "\3\0\31\252\23\0\1\252\6\0\1\361\12\0\2\361"+ - "\2\0\1\361\3\0\31\361\32\0\1\362\5\0\1\255"+ - "\4\0\2\362\2\0\1\362\3\0\31\362\41\0\1\363"+ - "\107\0\2\364\1\0\4\364\3\0\1\364\1\0\2\364"+ - "\1\0\1\364\6\0\2\364\50\0\1\120\5\0\1\365"+ - "\1\130\2\0\2\365\1\134\5\0\1\134\71\0\2\265"+ - "\2\0\2\265\67\0\2\14\7\0\7\14\3\0\3\14"+ - "\1\366\25\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\13\14\1\367\15\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\20\14\1\370\10\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\2\14\1\371\26\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14"+ - "\1\372\26\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\2\14\1\373\26\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\5\14\1\374\23\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\6\14\1\375\2\14"+ - "\1\376\17\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\6\14\1\377\22\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\11\14\1\u0100\17\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0101\26\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14"+ - "\1\u0102\17\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\1\14\1\u0103\27\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\2\14\1\u0104\26\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\16\14\1\u0105\12\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14"+ - "\1\u0106\26\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\7\14\1\u0107\21\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\6\14\1\u0108\22\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0109\26\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14"+ - "\1\u010a\17\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\2\14\1\u010b\26\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\7\14\1\u010c\6\14\1\u010d\12\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14"+ - "\1\u010e\26\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\3\14\1\u010f\25\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\2\14\1\u0110\26\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\3\14\1\u0111\25\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\6\14"+ - "\1\u0112\22\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\3\14\1\u0113\25\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\5\14\1\u0114\23\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\20\14\1\u0115\10\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\16\14"+ - "\1\u0116\12\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\11\14\1\u0117\17\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\24\14\1\u0118\4\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\4\14\1\u0119\24\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\16\14"+ - "\1\u011a\12\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\14\14\1\u011b\14\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\12\14\1\u011c\16\14\23\0\1\14"+ - "\6\0\2\346\4\0\1\240\1\241\1\0\7\346\3\0"+ - "\31\346\23\0\1\346\1\347\2\0\13\347\1\u011d\67\347"+ - "\6\0\2\350\1\u011e\2\0\1\u011f\3\0\7\350\3\0"+ - "\31\350\23\0\1\350\6\0\2\351\1\u0120\2\0\1\107"+ - "\1\u0121\1\u0122\1\0\7\351\3\0\31\351\23\0\1\351"+ - "\6\0\1\u0123\12\0\2\u0123\2\0\1\u0123\3\0\31\u0123"+ - "\32\0\1\u0124\5\0\1\353\4\0\2\u0124\2\0\1\u0124"+ - "\3\0\31\u0124\24\0\4\246\1\245\1\354\100\246\6\0"+ - "\1\u0125\12\0\2\u0125\2\0\1\u0125\3\0\31\u0125\32\0"+ - "\1\362\5\0\1\357\1\360\3\0\2\362\2\0\1\362"+ - "\3\0\31\362\40\0\1\360\1\0\1\u0126\75\0\1\u0127"+ - "\1\361\3\0\1\254\1\255\2\0\2\361\2\u0127\2\361"+ - "\1\u0127\3\0\31\u0127\23\0\1\361\6\0\2\362\1\u0128"+ - "\3\0\1\u0129\1\360\1\0\7\362\3\0\31\362\23\0"+ - "\1\362\17\0\2\u012a\1\0\4\u012a\3\0\1\u012a\1\0"+ - "\2\u012a\1\0\1\u012a\6\0\2\u012a\50\0\1\120\5\0"+ - "\1\u012b\1\130\2\0\2\u012b\1\134\5\0\1\134\60\0"+ - "\2\14\7\0\7\14\3\0\4\14\1\u012c\24\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\1\14\1\u012d"+ - "\27\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\10\14\1\u012e\20\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\20\14\1\u012f\10\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\11\14\1\u0130\17\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\12\14\1\u0131"+ - "\16\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\6\14\1\u0132\22\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\12\14\1\u0133\16\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\1\14\1\u0134\27\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\5\14\1\u0135"+ - "\23\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\1\14\1\u0136\27\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\6\14\1\u0137\22\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\17\14\1\u0138\11\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\7\14\1\u0139"+ - "\21\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\3\14\1\u013a\25\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\1\14\1\u013b\27\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\1\14\1\u013c\27\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u013d"+ - "\26\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\15\14\1\u013e\13\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\13\14\1\u013f\15\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\11\14\1\u0140\17\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\23\14\1\u0141"+ - "\5\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\2\14\1\u0142\26\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\16\14\1\u0143\12\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\11\14\1\u0144\17\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u0145"+ - "\26\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\2\14\1\u0146\26\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\3\14\1\u0147\25\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\3\14\1\u0148\25\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\12\14\1\u0149"+ - "\16\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\10\14\1\u014a\20\14\23\0\1\14\1\347\2\0\11\347"+ - "\1\u011d\1\347\1\u011d\67\347\6\0\1\u014b\12\0\2\u014b"+ - "\2\0\1\u014b\3\0\31\u014b\32\0\1\u014c\12\0\2\u014c"+ - "\2\0\1\u014c\3\0\31\u014c\32\0\1\u0124\5\0\1\u0121"+ - "\1\u0122\3\0\2\u0124\2\0\1\u0124\3\0\31\u0124\40\0"+ - "\1\u0122\1\0\1\u014d\75\0\1\u014e\1\u0123\3\0\1\107"+ - "\1\353\2\0\2\u0123\2\u014e\2\u0123\1\u014e\3\0\31\u014e"+ - "\23\0\1\u0123\6\0\2\u0124\1\u014f\3\0\1\u0150\1\u0122"+ - "\1\0\7\u0124\3\0\31\u0124\23\0\1\u0124\6\0\1\u0127"+ - "\1\u0125\3\0\1\254\1\357\1\360\1\0\2\u0125\2\u0127"+ - "\2\u0125\1\u0127\3\0\31\u0127\23\0\1\u0125\1\u0126\2\0"+ - "\13\u0126\1\u0151\67\u0126\6\0\2\u0127\1\u0128\2\0\1\254"+ - "\1\357\1\360\1\0\7\u0127\3\0\31\u0127\23\0\1\u0127"+ - "\6\0\1\u0152\12\0\2\u0152\2\0\1\u0152\3\0\31\u0152"+ - "\40\0\1\u0129\1\360\107\0\2\u0153\1\0\4\u0153\3\0"+ - "\1\u0153\1\0\2\u0153\1\0\1\u0153\6\0\2\u0153\50\0"+ - "\1\120\5\0\1\u0154\1\130\2\0\2\u0154\1\134\5\0"+ - "\1\134\60\0\2\14\7\0\7\14\3\0\10\14\1\u0155"+ - "\20\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\14\14\1\u0156\14\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\10\14\1\u0157\20\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\5\14\1\u0158\23\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\20\14\1\u0159"+ - "\10\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\12\14\1\u015a\16\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\21\14\1\u015b\7\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\15\14\1\u015c\13\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\10\14\1\u015d"+ - "\20\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\10\14\1\u015e\4\14\1\u015f\13\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\11\14\1\u0160\17\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\23\14\1\u0161"+ - "\5\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\12\14\1\u0162\16\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\16\14\1\u0163\12\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\2\14\1\u0164\26\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\12\14\1\u0165"+ - "\16\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\16\14\1\u0166\12\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\12\14\1\u0167\16\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\5\14\1\u0168\23\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\11\14\1\u0169"+ - "\17\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\26\14\1\u016a\2\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\5\14\1\u016b\23\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\12\14\1\u016c\16\14\23\0"+ - "\1\14\6\0\2\u014b\3\0\1\u011f\3\0\7\u014b\3\0"+ - "\31\u014b\23\0\1\u014b\6\0\1\u014e\1\u014c\3\0\1\107"+ - "\1\u0121\1\u0122\1\0\2\u014c\2\u014e\2\u014c\1\u014e\3\0"+ - "\31\u014e\23\0\1\u014c\1\u014d\2\0\13\u014d\1\u016d\67\u014d"+ - "\6\0\2\u014e\1\u014f\2\0\1\107\1\u0121\1\u0122\1\0"+ - "\7\u014e\3\0\31\u014e\23\0\1\u014e\6\0\1\u016e\12\0"+ - "\2\u016e\2\0\1\u016e\3\0\31\u016e\40\0\1\u0150\1\u0122"+ - "\70\0\1\u0126\2\0\10\u0126\1\u016f\1\u0151\1\u0126\1\u0151"+ - "\67\u0126\6\0\2\u0152\4\0\1\u0129\1\360\1\0\7\u0152"+ - "\3\0\31\u0152\23\0\1\u0152\17\0\2\u0170\1\0\4\u0170"+ - "\3\0\1\u0170\1\0\2\u0170\1\0\1\u0170\6\0\2\u0170"+ - "\50\0\1\120\5\0\1\u0171\1\130\2\0\2\u0171\1\134"+ - "\5\0\1\134\60\0\2\14\7\0\7\14\3\0\6\14"+ - "\1\u0172\22\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\13\14\1\u0173\15\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\14\14\1\u0174\14\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\3\14\1\u0175\25\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\5\14"+ - "\1\u0176\23\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\3\14\1\u0177\25\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\3\14\1\u0178\25\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0179\26\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\10\14"+ - "\1\u017a\20\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\11\14\1\u017b\17\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\5\14\1\u017c\23\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\22\14\1\u017d\6\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\7\14"+ - "\1\u017e\21\14\23\0\1\14\6\0\2\14\7\0\7\14"+ - "\3\0\11\14\1\u017f\17\14\23\0\1\14\6\0\2\14"+ - "\7\0\7\14\3\0\2\14\1\u0180\26\14\23\0\1\14"+ - "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0181\26\14"+ - "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14"+ - "\1\u0182\17\14\23\0\1\14\1\u014d\2\0\10\u014d\1\u0183"+ - "\1\u016d\1\u014d\1\u016d\67\u014d\6\0\2\u016e\4\0\1\u0150"+ - "\1\u0122\1\0\7\u016e\3\0\31\u016e\23\0\1\u016e\17\0"+ - "\2\u0184\1\0\4\u0184\3\0\1\u0184\1\0\2\u0184\1\0"+ - "\1\u0184\6\0\2\u0184\50\0\1\120\5\0\1\u0185\1\130"+ - "\2\0\2\u0185\1\134\5\0\1\134\60\0\2\14\7\0"+ - "\7\14\3\0\2\14\1\u0186\26\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\2\14\1\u0187\26\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\5\14\1\u0188"+ - "\23\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\2\14\1\u0189\26\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\16\14\1\u018a\12\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\5\14\1\u018b\23\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\10\14\1\u018c"+ - "\20\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\2\14\1\u018d\26\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\10\14\1\u018e\20\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\2\14\1\u018f\26\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\22\14\1\u0190"+ - "\6\14\23\0\1\14\17\0\2\u0191\1\0\4\u0191\3\0"+ - "\1\u0191\1\0\2\u0191\1\0\1\u0191\6\0\2\u0191\50\0"+ - "\1\120\5\0\1\u0192\1\130\2\0\2\u0192\1\134\5\0"+ - "\1\134\60\0\2\14\7\0\7\14\3\0\2\14\1\u0193"+ - "\26\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\7\14\1\u0194\21\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\2\14\1\u0195\26\14\23\0\1\14\6\0"+ - "\2\14\7\0\7\14\3\0\11\14\1\u0196\17\14\23\0"+ - "\1\14\6\0\2\14\7\0\7\14\3\0\14\14\1\u0197"+ - "\14\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0"+ - "\14\14\1\u0198\14\14\23\0\1\14\17\0\2\u0199\1\0"+ - "\4\u0199\3\0\1\u0199\1\0\2\u0199\1\0\1\u0199\6\0"+ - "\2\u0199\50\0\1\120\5\0\1\u019a\1\130\2\0\2\u019a"+ - "\1\134\5\0\1\134\60\0\2\14\7\0\7\14\3\0"+ - "\15\14\1\u019b\13\14\23\0\1\14\6\0\2\14\7\0"+ - "\7\14\3\0\6\14\1\u019c\22\14\23\0\1\14\11\0"+ - "\1\120\5\0\1\u019d\1\130\2\0\2\u019d\1\134\5\0"+ - "\1\134\63\0\1\120\5\0\1\u019e\1\130\2\0\2\u019e"+ - "\1\134\5\0\1\134\63\0\1\120\5\0\1\u019f\1\130"+ - "\2\0\2\u019f\1\134\5\0\1\134\63\0\1\120\5\0"+ - "\1\u01a0\1\130\2\0\2\u01a0\1\134\5\0\1\134\63\0"+ - "\1\120\5\0\1\u01a1\1\130\2\0\2\u01a1\1\134\5\0"+ - "\1\134\63\0\1\120\5\0\1\u01a2\1\130\2\0\2\u01a2"+ - "\1\134\5\0\1\134\52\0"; + private static final String ZZ_ROWMAP_PACKED_0 + = "\0\0\0\106\0\214\0\322\0\u0118\0\u015e\0\u01a4\0\u015e" + + "\0\u01ea\0\u0230\0\u0276\0\u02bc\0\u0302\0\u0348\0\u038e\0\u03d4" + + "\0\u041a\0\u015e\0\u0460\0\u04a6\0\u04ec\0\u015e\0\u0532\0\u0578" + + "\0\u05be\0\u0604\0\u064a\0\u0690\0\u06d6\0\u071c\0\u0762\0\u07a8" + + "\0\u07ee\0\u0834\0\u087a\0\u08c0\0\u0906\0\u094c\0\u0992\0\u09d8" + + "\0\u0a1e\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e" + + "\0\u015e\0\u0a64\0\u015e\0\u015e\0\u0aaa\0\u0af0\0\u0b36\0\u0b7c" + + "\0\u0bc2\0\u015e\0\u0c08\0\u0c4e\0\u015e\0\u015e\0\u0c94\0\u0cda" + + "\0\u0d20\0\u015e\0\u0d66\0\u0dac\0\u015e\0\u0df2\0\u015e\0\u0e38" + + "\0\u0e7e\0\u0ec4\0\u015e\0\u015e\0\u015e\0\u0f0a\0\u0f50\0\u0f96" + + "\0\u0fdc\0\u1022\0\u015e\0\u1068\0\u015e\0\u10ae\0\u10f4\0\u113a" + + "\0\u1180\0\u11c6\0\u120c\0\u1252\0\u015e\0\u015e\0\u1298\0\u12de" + + "\0\u1324\0\u136a\0\u13b0\0\u02bc\0\u13f6\0\u143c\0\u1482\0\u14c8" + + "\0\u150e\0\u1554\0\u159a\0\u15e0\0\u1626\0\u166c\0\u16b2\0\u16f8" + + "\0\u173e\0\u1784\0\u02bc\0\u17ca\0\u02bc\0\u1810\0\u1856\0\u189c" + + "\0\u18e2\0\u02bc\0\u1928\0\u196e\0\u19b4\0\u19fa\0\u1a40\0\u1a86" + + "\0\u1acc\0\u1b12\0\u1b58\0\u1b9e\0\u1be4\0\u1c2a\0\u1c70\0\u1cb6" + + "\0\u1cfc\0\u1d42\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e" + + "\0\u015e\0\u015e\0\u015e\0\u015e\0\u1d88\0\u1dce\0\u015e\0\u015e" + + "\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e\0\u0dac\0\u1e14\0\u1e5a" + + "\0\u1ea0\0\u1ee6\0\u1f2c\0\u1f72\0\u015e\0\u1fb8\0\u1ffe\0\u015e" + + "\0\u2044\0\u208a\0\u20d0\0\u015e\0\u2116\0\u015e\0\u215c\0\u015e" + + "\0\u015e\0\u1180\0\u21a2\0\u21e8\0\u222e\0\u222e\0\u2274\0\u22ba" + + "\0\u2300\0\u2346\0\u238c\0\u23d2\0\u2418\0\u245e\0\u24a4\0\u02bc" + + "\0\u24ea\0\u2530\0\u2576\0\u25bc\0\u02bc\0\u2602\0\u2648\0\u268e" + + "\0\u02bc\0\u26d4\0\u271a\0\u2760\0\u27a6\0\u27ec\0\u2832\0\u02bc" + + "\0\u2878\0\u28be\0\u2904\0\u294a\0\u2990\0\u02bc\0\u29d6\0\u2a1c" + + "\0\u2a62\0\u2aa8\0\u2aee\0\u2b34\0\u2b7a\0\u2bc0\0\u02bc\0\u2c06" + + "\0\u02bc\0\u2c4c\0\u02bc\0\u015e\0\u015e\0\u2c92\0\u2cd8\0\u2d1e" + + "\0\u2d64\0\u2daa\0\u2df0\0\u2e36\0\u015e\0\u2e7c\0\u2ec2\0\u2f08" + + "\0\u2f4e\0\u2f94\0\u015e\0\u2fda\0\u3020\0\u3066\0\u30ac\0\u02bc" + + "\0\u02bc\0\u30f2\0\u02bc\0\u3138\0\u317e\0\u31c4\0\u320a\0\u3250" + + "\0\u3296\0\u32dc\0\u3322\0\u3368\0\u02bc\0\u02bc\0\u33ae\0\u02bc" + + "\0\u33f4\0\u343a\0\u3480\0\u34c6\0\u350c\0\u3552\0\u3598\0\u35de" + + "\0\u3624\0\u366a\0\u36b0\0\u36f6\0\u02bc\0\u373c\0\u3782\0\u37c8" + + "\0\u380e\0\u3854\0\u02bc\0\u389a\0\u38e0\0\u3926\0\u015e\0\u396c" + + "\0\u39b2\0\u39f8\0\u3a3e\0\u3a84\0\u3aca\0\u3b10\0\u3b56\0\u3b9c" + + "\0\u3be2\0\u3c28\0\u3c6e\0\u02bc\0\u3cb4\0\u3cfa\0\u02bc\0\u02bc" + + "\0\u3d40\0\u02bc\0\u3d86\0\u02bc\0\u3dcc\0\u3e12\0\u3e58\0\u02bc" + + "\0\u3e9e\0\u3ee4\0\u3f2a\0\u3f70\0\u3fb6\0\u3ffc\0\u4042\0\u4088" + + "\0\u40ce\0\u02bc\0\u4114\0\u415a\0\u02bc\0\u41a0\0\u41e6\0\u422c" + + "\0\u4272\0\u42b8\0\u42fe\0\u4344\0\u438a\0\u43d0\0\u4416\0\u445c" + + "\0\u44a2\0\u44e8\0\u452e\0\u4574\0\u02bc\0\u45ba\0\u4600\0\u02bc" + + "\0\u02bc\0\u4646\0\u468c\0\u02bc\0\u46d2\0\u4718\0\u475e\0\u02bc" + + "\0\u47a4\0\u47ea\0\u4830\0\u02bc\0\u4876\0\u48bc\0\u4902\0\u4948" + + "\0\u498e\0\u49d4\0\u02bc\0\u4a1a\0\u4a60\0\u4aa6\0\u3b10\0\u4aec" + + "\0\u4b32\0\u02bc\0\u4b78\0\u4bbe\0\u4c04\0\u4c4a\0\u4c90\0\u4cd6" + + "\0\u4d1c\0\u4d62\0\u02bc\0\u02bc\0\u02bc\0\u4da8\0\u4dee\0\u02bc" + + "\0\u02bc\0\u4e34\0\u438a\0\u4e7a\0\u4ec0\0\u02bc\0\u02bc\0\u4f06" + + "\0\u4f4c\0\u02bc\0\u4f92\0\u4fd8\0\u501e\0\u02bc\0\u5064\0\u02bc" + + "\0\u50aa\0\u50f0\0\u02bc\0\u5136\0\u02bc\0\u517c\0\u02bc\0\u02bc" + + "\0\u015e\0\u51c2\0\u02bc\0\u02bc\0\u5208\0\u524e\0\u5294\0\u52da" + + "\0\u5320\0\u113a"; - private static int [] zzUnpackTrans() { - int [] result = new int[21350]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackRowMap() { + int[] result = new int[418]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; } - return j; - } + private static int zzUnpackRowMap(String packed, int offset, int[] result) { + int i = 0; /* index in packed string */ - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; + int j = offset; /* index in unpacked array */ - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\5\0\1\11\1\1\1\11\11\1\1\11\3\1\1\11"+ - "\23\1\10\11\1\1\2\11\5\1\1\11\2\1\2\11"+ - "\3\1\1\11\2\1\1\11\1\1\1\11\2\1\1\0"+ - "\3\11\2\0\1\1\1\0\1\1\1\11\1\1\1\11"+ - "\3\1\1\0\2\1\1\0\2\11\54\1\12\11\2\1"+ - "\7\11\6\0\1\1\1\11\2\0\1\11\3\0\1\11"+ - "\1\0\1\11\1\1\2\11\4\1\1\0\55\1\2\11"+ - "\7\0\1\11\5\0\1\11\52\1\1\0\1\11\12\0"+ - "\41\1\10\0\32\1\2\0\52\1\1\11\11\1"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[418]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; } - return j; - } - /** the input device */ - private java.io.Reader zzReader; + /** + * The transition table of the DFA + */ + private static final int[] ZZ_TRANS = zzUnpackTrans(); - /** the current state of the DFA */ - private int zzState; + private static final String ZZ_TRANS_PACKED_0 + = "\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\6" + + "\1\15\1\16\1\17\1\20\1\11\1\21\1\22\1\23" + + "\1\24\2\14\2\24\1\14\1\25\1\6\1\26\1\27" + + "\1\30\1\31\1\32\1\14\1\33\1\34\1\35\1\36" + + "\1\37\1\40\1\41\1\42\1\43\1\14\1\44\1\14" + + "\1\45\2\14\1\46\1\14\1\47\1\50\1\51\1\52" + + "\1\53\1\54\1\55\1\56\1\57\1\60\1\61\1\62" + + "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72" + + "\1\0\1\11\1\0\1\73\1\74\1\75\13\73\1\76" + + "\10\73\1\77\56\73\1\100\1\74\1\75\24\100\1\77" + + "\1\76\55\100\1\6\1\101\1\102\1\103\2\6\1\104" + + "\4\6\1\105\1\106\4\6\2\104\2\6\1\104\3\6" + + "\31\104\21\6\1\0\1\103\1\0\1\107\1\101\1\102" + + "\7\107\1\110\70\107\113\0\1\10\106\0\1\11\10\0" + + "\1\11\67\0\1\11\5\0\1\111\1\112\7\0\1\113" + + "\105\0\1\114\76\0\2\14\7\0\7\14\3\0\31\14" + + "\23\0\1\14\10\0\1\115\106\0\1\116\1\117\4\0" + + "\2\120\2\0\2\120\67\0\1\121\3\0\1\122\2\0" + + "\1\123\3\0\2\121\2\0\1\121\3\0\31\121\37\0" + + "\1\124\1\0\1\125\105\0\1\126\101\0\1\120\5\0" + + "\1\127\1\130\1\131\1\0\1\132\1\133\1\134\5\0" + + "\1\134\22\0\1\131\40\0\1\120\5\0\2\24\2\0" + + "\2\24\1\134\5\0\1\134\67\0\1\135\10\0\1\136" + + "\65\0\2\14\7\0\7\14\3\0\1\14\1\137\27\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" + + "\1\140\26\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\3\14\1\141\12\14\1\142\6\14\1\143\3\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\6\14" + + "\1\144\22\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\3\14\1\145\3\14\1\146\6\14\1\147\12\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" + + "\1\150\6\14\1\151\1\14\1\152\3\14\1\153\11\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\24\14" + + "\1\154\4\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\2\14\1\155\1\156\7\14\1\157\15\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\1\14\1\160" + + "\16\14\1\161\1\14\1\162\6\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\6\14\1\163\1\14\1\164" + + "\4\14\1\165\5\14\1\166\5\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\6\14\1\167\1\14\1\170" + + "\20\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\2\14\1\171\4\14\1\172\12\14\1\173\6\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\3\14\1\174" + + "\3\14\1\175\2\14\1\176\1\177\15\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\12\14\1\200\5\14" + + "\1\201\10\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\1\14\1\202\1\14\1\203\7\14\1\204\15\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\3\14" + + "\1\205\3\14\1\206\21\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\2\14\1\207\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\10\14\1\210\20\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\3\14" + + "\1\211\25\14\23\0\1\14\15\0\1\212\105\0\1\213" + + "\57\0\1\214\25\0\1\215\60\0\1\216\24\0\1\217" + + "\61\0\1\220\23\0\1\221\105\0\1\222\70\0\1\73" + + "\2\0\13\73\1\0\10\73\1\0\56\73\2\0\1\75" + + "\103\0\1\223\2\0\13\223\1\224\1\225\3\223\1\225" + + "\1\226\2\223\1\227\1\230\1\231\1\232\6\223\1\233" + + "\1\234\3\223\1\235\34\223\3\0\1\100\2\0\24\100" + + "\2\0\55\100\2\0\1\102\106\0\1\103\10\0\1\103" + + "\67\0\1\103\7\0\2\236\1\237\3\0\1\240\1\241" + + "\1\0\7\236\3\0\31\236\23\0\1\236\3\0\1\103" + + "\2\0\1\236\5\0\1\106\4\0\2\236\2\0\1\236" + + "\3\0\31\236\22\0\1\103\5\0\1\242\1\0\1\243" + + "\12\0\2\243\2\0\1\243\3\0\31\243\24\0\1\111" + + "\1\244\1\245\103\111\5\246\1\247\100\246\11\0\1\250" + + "\102\0\1\251\12\0\2\251\2\0\1\251\3\0\31\251" + + "\43\0\2\120\2\0\2\120\1\134\5\0\1\134\60\0" + + "\1\252\1\121\1\253\2\0\1\254\1\255\2\0\2\121" + + "\2\252\2\121\1\252\3\0\31\252\23\0\1\121\15\0" + + "\1\256\103\0\1\257\1\0\1\260\105\0\1\261\101\0" + + "\1\120\5\0\1\127\1\130\2\0\1\132\1\133\1\134" + + "\5\0\1\134\63\0\1\120\5\0\2\130\2\0\2\130" + + "\1\134\5\0\1\134\71\0\1\262\1\263\1\0\4\263" + + "\3\0\1\263\1\0\2\263\1\0\1\263\6\0\2\263" + + "\50\0\1\120\5\0\1\133\1\130\2\0\2\133\1\134" + + "\5\0\1\134\63\0\1\120\5\0\1\264\1\130\2\0" + + "\2\264\1\134\5\0\1\134\71\0\2\265\2\0\2\265" + + "\1\0\1\266\50\0\1\266\14\0\2\14\7\0\7\14" + + "\3\0\2\14\1\267\26\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\11\14\1\270\17\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\5\14\1\271\23\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\6\14" + + "\1\272\22\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\11\14\1\273\17\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\6\14\1\274\2\14\1\275\17\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\10\14" + + "\1\276\20\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\3\14\1\277\25\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\11\14\1\300\17\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\3\14\1\301\25\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\21\14" + + "\1\302\7\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\12\14\1\303\16\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\2\14\1\304\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\17\14\1\305\11\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\23\14" + + "\1\306\5\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\16\14\1\307\12\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\13\14\1\310\6\14\1\311\6\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\1\14" + + "\1\312\10\14\1\313\16\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\21\14\1\314\7\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\6\14\1\315\2\14" + + "\1\316\17\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\21\14\1\317\7\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\2\14\1\320\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\14\14\1\321\14\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\15\14" + + "\1\322\1\323\12\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\10\14\1\324\20\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\16\14\1\325\12\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\1\14\1\326" + + "\27\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\10\14\1\327\20\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\10\14\1\330\20\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\11\14\1\331\17\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\12\14\1\332" + + "\16\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\7\14\1\333\2\14\1\334\16\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\5\14\1\335\23\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\1\336\30\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\1\14" + + "\1\337\27\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\12\14\1\340\16\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\11\14\1\341\17\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\15\14\1\342\13\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\30\14" + + "\1\343\23\0\1\14\15\0\1\344\107\0\1\226\3\0" + + "\2\226\100\0\1\345\3\0\2\345\67\0\1\346\12\0" + + "\2\346\2\0\1\346\3\0\31\346\40\0\1\240\1\241" + + "\104\0\1\241\1\0\1\347\75\0\1\350\12\0\2\350" + + "\2\0\1\350\3\0\31\350\32\0\1\351\1\243\1\352" + + "\2\0\1\107\1\353\2\0\2\243\2\351\2\243\1\351" + + "\3\0\31\351\23\0\1\243\2\0\1\245\103\0\5\246" + + "\1\354\100\246\4\0\1\245\1\247\106\0\2\251\3\0" + + "\1\355\3\0\7\251\3\0\31\251\23\0\1\251\6\0" + + "\2\252\1\356\2\0\1\254\1\357\1\360\1\0\7\252" + + "\3\0\31\252\23\0\1\252\6\0\1\361\12\0\2\361" + + "\2\0\1\361\3\0\31\361\32\0\1\362\5\0\1\255" + + "\4\0\2\362\2\0\1\362\3\0\31\362\41\0\1\363" + + "\107\0\2\364\1\0\4\364\3\0\1\364\1\0\2\364" + + "\1\0\1\364\6\0\2\364\50\0\1\120\5\0\1\365" + + "\1\130\2\0\2\365\1\134\5\0\1\134\71\0\2\265" + + "\2\0\2\265\67\0\2\14\7\0\7\14\3\0\3\14" + + "\1\366\25\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\13\14\1\367\15\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\20\14\1\370\10\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\371\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" + + "\1\372\26\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\2\14\1\373\26\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\5\14\1\374\23\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\6\14\1\375\2\14" + + "\1\376\17\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\6\14\1\377\22\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u0100\17\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0101\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14" + + "\1\u0102\17\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\1\14\1\u0103\27\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u0104\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\16\14\1\u0105\12\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u0106\26\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\7\14\1\u0107\21\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\6\14\1\u0108\22\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0109\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14" + + "\1\u010a\17\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\2\14\1\u010b\26\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\7\14\1\u010c\6\14\1\u010d\12\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u010e\26\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\3\14\1\u010f\25\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u0110\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\3\14\1\u0111\25\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\6\14" + + "\1\u0112\22\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\3\14\1\u0113\25\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\5\14\1\u0114\23\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\20\14\1\u0115\10\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\16\14" + + "\1\u0116\12\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\11\14\1\u0117\17\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\24\14\1\u0118\4\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\4\14\1\u0119\24\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\16\14" + + "\1\u011a\12\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\14\14\1\u011b\14\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\12\14\1\u011c\16\14\23\0\1\14" + + "\6\0\2\346\4\0\1\240\1\241\1\0\7\346\3\0" + + "\31\346\23\0\1\346\1\347\2\0\13\347\1\u011d\67\347" + + "\6\0\2\350\1\u011e\2\0\1\u011f\3\0\7\350\3\0" + + "\31\350\23\0\1\350\6\0\2\351\1\u0120\2\0\1\107" + + "\1\u0121\1\u0122\1\0\7\351\3\0\31\351\23\0\1\351" + + "\6\0\1\u0123\12\0\2\u0123\2\0\1\u0123\3\0\31\u0123" + + "\32\0\1\u0124\5\0\1\353\4\0\2\u0124\2\0\1\u0124" + + "\3\0\31\u0124\24\0\4\246\1\245\1\354\100\246\6\0" + + "\1\u0125\12\0\2\u0125\2\0\1\u0125\3\0\31\u0125\32\0" + + "\1\362\5\0\1\357\1\360\3\0\2\362\2\0\1\362" + + "\3\0\31\362\40\0\1\360\1\0\1\u0126\75\0\1\u0127" + + "\1\361\3\0\1\254\1\255\2\0\2\361\2\u0127\2\361" + + "\1\u0127\3\0\31\u0127\23\0\1\361\6\0\2\362\1\u0128" + + "\3\0\1\u0129\1\360\1\0\7\362\3\0\31\362\23\0" + + "\1\362\17\0\2\u012a\1\0\4\u012a\3\0\1\u012a\1\0" + + "\2\u012a\1\0\1\u012a\6\0\2\u012a\50\0\1\120\5\0" + + "\1\u012b\1\130\2\0\2\u012b\1\134\5\0\1\134\60\0" + + "\2\14\7\0\7\14\3\0\4\14\1\u012c\24\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\1\14\1\u012d" + + "\27\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\10\14\1\u012e\20\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\20\14\1\u012f\10\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\11\14\1\u0130\17\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\12\14\1\u0131" + + "\16\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\6\14\1\u0132\22\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\12\14\1\u0133\16\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\1\14\1\u0134\27\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\5\14\1\u0135" + + "\23\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\1\14\1\u0136\27\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\6\14\1\u0137\22\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\17\14\1\u0138\11\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\7\14\1\u0139" + + "\21\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\3\14\1\u013a\25\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\1\14\1\u013b\27\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\1\14\1\u013c\27\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u013d" + + "\26\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\15\14\1\u013e\13\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\13\14\1\u013f\15\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\11\14\1\u0140\17\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\23\14\1\u0141" + + "\5\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\2\14\1\u0142\26\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\16\14\1\u0143\12\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\11\14\1\u0144\17\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u0145" + + "\26\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\2\14\1\u0146\26\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\3\14\1\u0147\25\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\3\14\1\u0148\25\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\12\14\1\u0149" + + "\16\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\10\14\1\u014a\20\14\23\0\1\14\1\347\2\0\11\347" + + "\1\u011d\1\347\1\u011d\67\347\6\0\1\u014b\12\0\2\u014b" + + "\2\0\1\u014b\3\0\31\u014b\32\0\1\u014c\12\0\2\u014c" + + "\2\0\1\u014c\3\0\31\u014c\32\0\1\u0124\5\0\1\u0121" + + "\1\u0122\3\0\2\u0124\2\0\1\u0124\3\0\31\u0124\40\0" + + "\1\u0122\1\0\1\u014d\75\0\1\u014e\1\u0123\3\0\1\107" + + "\1\353\2\0\2\u0123\2\u014e\2\u0123\1\u014e\3\0\31\u014e" + + "\23\0\1\u0123\6\0\2\u0124\1\u014f\3\0\1\u0150\1\u0122" + + "\1\0\7\u0124\3\0\31\u0124\23\0\1\u0124\6\0\1\u0127" + + "\1\u0125\3\0\1\254\1\357\1\360\1\0\2\u0125\2\u0127" + + "\2\u0125\1\u0127\3\0\31\u0127\23\0\1\u0125\1\u0126\2\0" + + "\13\u0126\1\u0151\67\u0126\6\0\2\u0127\1\u0128\2\0\1\254" + + "\1\357\1\360\1\0\7\u0127\3\0\31\u0127\23\0\1\u0127" + + "\6\0\1\u0152\12\0\2\u0152\2\0\1\u0152\3\0\31\u0152" + + "\40\0\1\u0129\1\360\107\0\2\u0153\1\0\4\u0153\3\0" + + "\1\u0153\1\0\2\u0153\1\0\1\u0153\6\0\2\u0153\50\0" + + "\1\120\5\0\1\u0154\1\130\2\0\2\u0154\1\134\5\0" + + "\1\134\60\0\2\14\7\0\7\14\3\0\10\14\1\u0155" + + "\20\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\14\14\1\u0156\14\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\10\14\1\u0157\20\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\5\14\1\u0158\23\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\20\14\1\u0159" + + "\10\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\12\14\1\u015a\16\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\21\14\1\u015b\7\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\15\14\1\u015c\13\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\10\14\1\u015d" + + "\20\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\10\14\1\u015e\4\14\1\u015f\13\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\11\14\1\u0160\17\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\23\14\1\u0161" + + "\5\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\12\14\1\u0162\16\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\16\14\1\u0163\12\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u0164\26\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\12\14\1\u0165" + + "\16\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\16\14\1\u0166\12\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\12\14\1\u0167\16\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\5\14\1\u0168\23\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\11\14\1\u0169" + + "\17\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\26\14\1\u016a\2\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\5\14\1\u016b\23\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\12\14\1\u016c\16\14\23\0" + + "\1\14\6\0\2\u014b\3\0\1\u011f\3\0\7\u014b\3\0" + + "\31\u014b\23\0\1\u014b\6\0\1\u014e\1\u014c\3\0\1\107" + + "\1\u0121\1\u0122\1\0\2\u014c\2\u014e\2\u014c\1\u014e\3\0" + + "\31\u014e\23\0\1\u014c\1\u014d\2\0\13\u014d\1\u016d\67\u014d" + + "\6\0\2\u014e\1\u014f\2\0\1\107\1\u0121\1\u0122\1\0" + + "\7\u014e\3\0\31\u014e\23\0\1\u014e\6\0\1\u016e\12\0" + + "\2\u016e\2\0\1\u016e\3\0\31\u016e\40\0\1\u0150\1\u0122" + + "\70\0\1\u0126\2\0\10\u0126\1\u016f\1\u0151\1\u0126\1\u0151" + + "\67\u0126\6\0\2\u0152\4\0\1\u0129\1\360\1\0\7\u0152" + + "\3\0\31\u0152\23\0\1\u0152\17\0\2\u0170\1\0\4\u0170" + + "\3\0\1\u0170\1\0\2\u0170\1\0\1\u0170\6\0\2\u0170" + + "\50\0\1\120\5\0\1\u0171\1\130\2\0\2\u0171\1\134" + + "\5\0\1\134\60\0\2\14\7\0\7\14\3\0\6\14" + + "\1\u0172\22\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\13\14\1\u0173\15\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\14\14\1\u0174\14\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\3\14\1\u0175\25\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\5\14" + + "\1\u0176\23\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\3\14\1\u0177\25\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u0178\25\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0179\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\10\14" + + "\1\u017a\20\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\11\14\1\u017b\17\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\5\14\1\u017c\23\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\22\14\1\u017d\6\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\7\14" + + "\1\u017e\21\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\11\14\1\u017f\17\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u0180\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0181\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14" + + "\1\u0182\17\14\23\0\1\14\1\u014d\2\0\10\u014d\1\u0183" + + "\1\u016d\1\u014d\1\u016d\67\u014d\6\0\2\u016e\4\0\1\u0150" + + "\1\u0122\1\0\7\u016e\3\0\31\u016e\23\0\1\u016e\17\0" + + "\2\u0184\1\0\4\u0184\3\0\1\u0184\1\0\2\u0184\1\0" + + "\1\u0184\6\0\2\u0184\50\0\1\120\5\0\1\u0185\1\130" + + "\2\0\2\u0185\1\134\5\0\1\134\60\0\2\14\7\0" + + "\7\14\3\0\2\14\1\u0186\26\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u0187\26\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\5\14\1\u0188" + + "\23\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\2\14\1\u0189\26\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\16\14\1\u018a\12\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\5\14\1\u018b\23\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\10\14\1\u018c" + + "\20\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\2\14\1\u018d\26\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\10\14\1\u018e\20\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u018f\26\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\22\14\1\u0190" + + "\6\14\23\0\1\14\17\0\2\u0191\1\0\4\u0191\3\0" + + "\1\u0191\1\0\2\u0191\1\0\1\u0191\6\0\2\u0191\50\0" + + "\1\120\5\0\1\u0192\1\130\2\0\2\u0192\1\134\5\0" + + "\1\134\60\0\2\14\7\0\7\14\3\0\2\14\1\u0193" + + "\26\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\7\14\1\u0194\21\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\2\14\1\u0195\26\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\11\14\1\u0196\17\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\14\14\1\u0197" + + "\14\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\14\14\1\u0198\14\14\23\0\1\14\17\0\2\u0199\1\0" + + "\4\u0199\3\0\1\u0199\1\0\2\u0199\1\0\1\u0199\6\0" + + "\2\u0199\50\0\1\120\5\0\1\u019a\1\130\2\0\2\u019a" + + "\1\134\5\0\1\134\60\0\2\14\7\0\7\14\3\0" + + "\15\14\1\u019b\13\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\6\14\1\u019c\22\14\23\0\1\14\11\0" + + "\1\120\5\0\1\u019d\1\130\2\0\2\u019d\1\134\5\0" + + "\1\134\63\0\1\120\5\0\1\u019e\1\130\2\0\2\u019e" + + "\1\134\5\0\1\134\63\0\1\120\5\0\1\u019f\1\130" + + "\2\0\2\u019f\1\134\5\0\1\134\63\0\1\120\5\0" + + "\1\u01a0\1\130\2\0\2\u01a0\1\134\5\0\1\134\63\0" + + "\1\120\5\0\1\u01a1\1\130\2\0\2\u01a1\1\134\5\0" + + "\1\134\63\0\1\120\5\0\1\u01a2\1\130\2\0\2\u01a2" + + "\1\134\5\0\1\134\52\0"; - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + private static int[] zzUnpackTrans() { + int[] result = new int[21350]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + private static int zzUnpackTrans(String packed, int offset, int[] result) { + int i = 0; /* index in packed string */ - /** the textposition at the last accepting state */ - private int zzMarkedPos; + int j = offset; /* index in unpacked array */ - /** the current text position in the buffer */ - private int zzCurrentPos; + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - /** number of newlines encountered up to the start of the matched text */ - private int yyline; + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; - /** the number of characters up to the start of the matched text */ - private int yychar; + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; + private static final String ZZ_ATTRIBUTE_PACKED_0 + = "\5\0\1\11\1\1\1\11\11\1\1\11\3\1\1\11" + + "\23\1\10\11\1\1\2\11\5\1\1\11\2\1\2\11" + + "\3\1\1\11\2\1\1\11\1\1\1\11\2\1\1\0" + + "\3\11\2\0\1\1\1\0\1\1\1\11\1\1\1\11" + + "\3\1\1\0\2\1\1\0\2\11\54\1\12\11\2\1" + + "\7\11\6\0\1\1\1\11\2\0\1\11\3\0\1\11" + + "\1\0\1\11\1\1\2\11\4\1\1\0\55\1\2\11" + + "\7\0\1\11\5\0\1\11\52\1\1\0\1\11\12\0" + + "\41\1\10\0\32\1\2\0\52\1\1\11\11\1"; - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; + private static int[] zzUnpackAttribute() { + int[] result = new int[418]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + private static int zzUnpackAttribute(String packed, int offset, int[] result) { + int i = 0; /* index in packed string */ - /** denotes if the user-EOF-code has already been executed */ - private boolean zzEOFDone; + int j = offset; /* index in unpacked array */ - /* user code: */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } + /** + * the input device + */ + private java.io.Reader zzReader; + + /** + * the current state of the DFA + */ + private int zzState; + + /** + * the current lexical state + */ + private int zzLexicalState = YYINITIAL; + + /** + * this buffer contains the current text to be matched and is the source of + * the yytext() string + */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** + * the textposition at the last accepting state + */ + private int zzMarkedPos; + + /** + * the current text position in the buffer + */ + private int zzCurrentPos; + + /** + * startRead marks the beginning of the yytext() string in the buffer + */ + private int zzStartRead; + + /** + * endRead marks the last character in the buffer, that has been read from + * input + */ + private int zzEndRead; + + /** + * number of newlines encountered up to the start of the matched text + */ + private int yyline; + + /** + * the number of characters up to the start of the matched text + */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** + * zzAtEOF == true <=> the scanner is at the EOF + */ + private boolean zzAtEOF; + + /** + * denotes if the user-EOF-code has already been executed + */ + private boolean zzEOFDone; + + /* user code: */ StringBuffer string = new StringBuffer(); - private static String xmlTagName=""; + private static String xmlTagName = ""; public int yychar() { return yychar; } - private Stack pushedBack=new Stack(); + private Stack pushedBack = new Stack(); public int yyline() { - return yyline+1; + return yyline + 1; } - private List listeners=new ArrayList<>(); + private List listeners = new ArrayList<>(); - public void addListener(LexListener listener){ + public void addListener(LexListener listener) { listeners.add(listener); } - public void removeListener(LexListener listener){ + public void removeListener(LexListener listener) { listeners.remove(listener); } - public void informListenersLex(ParsedSymbol s){ - for(LexListener l:listeners){ + public void informListenersLex(ParsedSymbol s) { + for (LexListener l : listeners) { l.onLex(s); } } - public void informListenersPushBack(ParsedSymbol s){ - for(LexListener l:listeners){ + public void informListenersPushBack(ParsedSymbol s) { + for (LexListener l : listeners) { l.onPushBack(s); } } @@ -844,893 +886,1022 @@ public final class ActionScriptLexer { informListenersPushBack(symb); } ParsedSymbol last; - public ParsedSymbol lex() throws java.io.IOException, ParseException{ - ParsedSymbol ret=null; - if(!pushedBack.isEmpty()){ + + public ParsedSymbol lex() throws java.io.IOException, ParseException { + ParsedSymbol ret = null; + if (!pushedBack.isEmpty()) { ret = last = pushedBack.pop(); - }else{ + } else { ret = last = yylex(); } informListenersLex(ret); return ret; } - - - /** - * Creates a new scanner - * There is also a java.io.InputStream version of this constructor. - * - * @param in the java.io.Reader to read input from. - */ - public ActionScriptLexer(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. - * There is also java.io.Reader version of this constructor. - * - * @param in the java.io.Inputstream to read input from. - */ - public ActionScriptLexer(java.io.InputStream in) { - this(new java.io.InputStreamReader - (in, java.nio.charset.Charset.forName("UTF-8"))); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char [] zzUnpackCMap(String packed) { - char [] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 2244) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do map[j++] = value; while (--count > 0); - } - return map; - } - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; + /** + * Creates a new scanner There is also a java.io.InputStream version of this + * constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ActionScriptLexer(java.io.Reader in) { + this.zzReader = in; } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; + /** + * Creates a new scanner. There is also java.io.Reader version of this + * constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ActionScriptLexer(java.io.InputStream in) { + this(new java.io.InputStreamReader(in, java.nio.charset.Charset.forName("UTF-8"))); } - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length-zzEndRead); + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char[] zzUnpackCMap(String packed) { + char[] map = new char[0x10000]; + int i = 0; /* index in packed string */ - if (numRead > 0) { - zzEndRead+= numRead; - return false; - } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { - return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } - } - - // numRead < 0 - return true; - } - - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ - public ParsedSymbol yylex() throws java.io.IOException, ParseException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - - int [] zzTransL = ZZ_TRANS; - int [] zzRowMapL = ZZ_ROWMAP; - int [] zzAttrL = ZZ_ATTRIBUTE; - - while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar+= zzMarkedPosL-zzStartRead; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; - - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - } - - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; - - zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } + int j = 0; /* index in unpacked array */ + while (i < 2244) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do { + map[j++] = value; + } while (--count > 0); } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: - { - } - case 134: break; - case 2: - { yyline++; - } - case 135: break; - case 3: - { /*ignore*/ - } - case 136: break; - case 4: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DIVIDE,yytext()); - } - case 137: break; - case 5: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MULTIPLY,yytext()); - } - case 138: break; - case 6: - { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER, yytext()); - } - case 139: break; - case 7: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COLON,yytext()); - } - case 140: break; - case 8: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DOT,yytext()); - } - case 141: break; - case 9: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_THAN,yytext()); - } - case 142: break; - case 10: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_THAN,yytext()); - } - case 143: break; - case 11: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN,yytext()); - } - case 144: break; - case 12: - { string.setLength(0); - yybegin(STRING); - } - case 145: break; - case 13: - { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong((yytext())))); - } - case 146: break; - case 14: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MINUS,yytext()); - } - case 147: break; - case 15: - { string.setLength(0); - yybegin(CHARLITERAL); - } - case 148: break; - case 16: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_OPEN,yytext()); - } - case 149: break; - case 17: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_CLOSE,yytext()); - } - case 150: break; - case 18: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_OPEN,yytext()); - } - case 151: break; - case 19: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_CLOSE,yytext()); - } - case 152: break; - case 20: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_OPEN,yytext()); - } - case 153: break; - case 21: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_CLOSE,yytext()); - } - case 154: break; - case 22: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SEMICOLON,yytext()); - } - case 155: break; - case 23: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COMMA,yytext()); - } - case 156: break; - case 24: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT,yytext()); - } - case 157: break; - case 25: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEGATE,yytext()); - } - case 158: break; - case 26: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TERNAR,yytext()); - } - case 159: break; - case 27: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITAND,yytext()); - } - case 160: break; - case 28: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITOR,yytext()); - } - case 161: break; - case 29: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PLUS,yytext()); - } - case 162: break; - case 30: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.XOR,yytext()); - } - case 163: break; - case 31: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MODULO,yytext()); - } - case 164: break; - case 32: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ATTRIBUTE,yytext()); - } - case 165: break; - case 33: - { string.append( yytext() ); - } - case 166: break; - case 34: - { yybegin(YYINITIAL); yyline++; - } - case 167: break; - case 35: - { yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); - } - case 168: break; - case 36: - { string.append( yytext() ); yyline++; - } - case 169: break; - case 37: - { yybegin(XML); string.append( yytext() ); - } - case 170: break; - case 38: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_DIVIDE,yytext()); - } - case 171: break; - case 39: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MULTIPLY,yytext()); - } - case 172: break; - case 40: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NAMESPACE_OP,yytext()); - } - case 173: break; - case 41: - { return new ParsedSymbol(SymbolGroup.DOUBLE,SymbolType.DOUBLE,new Double(Double.parseDouble((yytext())))); - } - case 174: break; - case 42: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_LEFT,yytext()); - } - case 175: break; - case 43: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_EQUAL,yytext()); - } - case 176: break; - case 44: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_RIGHT,yytext()); - } - case 177: break; - case 45: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_EQUAL,yytext()); - } - case 178: break; - case 46: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.EQUALS,yytext()); - } - case 179: break; - case 47: - { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext(),8))); - } - case 180: break; - case 48: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MINUS,yytext()); - } - case 181: break; - case 49: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DECREMENT,yytext()); - } - case 182: break; - case 50: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AS,yytext()); - } - case 183: break; - case 51: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.IS,yytext()); - } - case 184: break; - case 52: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); - } - case 185: break; - case 53: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); - } - case 186: break; - case 54: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DO,yytext()); - } - case 187: break; - case 55: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT_EQUAL,yytext()); - } - case 188: break; - case 56: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITAND,yytext()); - } - case 189: break; - case 57: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AND,yytext()); - } - case 190: break; - case 58: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITOR,yytext()); - } - case 191: break; - case 59: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.OR,yytext()); - } - case 192: break; - case 60: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_PLUS,yytext()); - } - case 193: break; - case 61: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INCREMENT,yytext()); - } - case 194: break; - case 62: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_XOR,yytext()); - } - case 195: break; - case 63: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MODULO,yytext()); - } - case 196: break; - case 64: - { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); - } - case 197: break; - case 65: - { string.append( '\"' ); - } - case 198: break; - case 66: - { char val = (char) Integer.parseInt(yytext().substring(1),8); - string.append( val ); - } - case 199: break; - case 67: - { string.append( '\\' ); - } - case 200: break; - case 68: - { string.append( '\'' ); - } - case 201: break; - case 69: - { string.append( '\b' ); - } - case 202: break; - case 70: - { string.append( '\r' ); - } - case 203: break; - case 71: - { string.append( '\n' ); - } - case 204: break; - case 72: - { string.append( '\t' ); - } - case 205: break; - case 73: - { string.append( '\f' ); - } - case 206: break; - case 74: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.REST,yytext()); - } - case 207: break; - case 75: - { string.setLength(0); - yybegin(XML); - String s=yytext(); - s=s.substring(1,s.length()-1); - if(s.contains(" ")){ - s=s.substring(0,s.indexOf(" ")); - } - xmlTagName = s; - string.append(yytext()); - } - case 208: break; - case 76: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_LEFT,yytext()); - } - case 209: break; - case 77: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.USHIFT_RIGHT,yytext()); - } - case 210: break; - case 78: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_RIGHT,yytext()); - } - case 211: break; - case 79: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_EQUALS,yytext()); - } - case 212: break; - case 80: - { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext().substring(2),16))); - } - case 213: break; - case 81: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SET,yytext()); - } - case 214: break; - case 82: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEW,yytext()); - } - case 215: break; - case 83: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRY,yytext()); - } - case 216: break; - case 84: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); - } - case 217: break; - case 85: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); - } - case 218: break; - case 86: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); - } - case 219: break; - case 87: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.GET,yytext()); - } - case 220: break; - case 88: - { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NAN,yytext()); - } - case 221: break; - case 89: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_NOT_EQUAL,yytext()); - } - case 222: break; - case 90: - { String t=yytext(); return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,t.substring(2,t.length()-1)); - } - case 223: break; - case 91: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_USHIFT_RIGHT,yytext()); - } - case 224: break; - case 92: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EACH,yytext()); - } - case 225: break; - case 93: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); - } - case 226: break; - case 94: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CASE,yytext()); - } - case 227: break; - case 95: - { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NULL,yytext()); - } - case 228: break; - case 96: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); - } - case 229: break; - case 97: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); - } - case 230: break; - case 98: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); - } - case 231: break; - case 99: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.VOID,yytext()); - } - case 232: break; - case 100: - { string.append( yytext() ); - String endtagname=yytext(); - endtagname=endtagname.substring(2,endtagname.length()-1); - if(endtagname.equals(xmlTagName)){ - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML, string.toString()); - } - } - case 233: break; - case 101: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.BREAK,yytext()); - } - case 234: break; - case 102: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CATCH,yytext()); - } - case 235: break; - case 103: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); - } - case 236: break; - case 104: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); - } - case 237: break; - case 105: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SUPER,yytext()); - } - case 238: break; - case 106: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THROW,yytext()); - } - case 239: break; - case 107: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FALSE,yytext()); - } - case 240: break; - case 108: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINAL,yytext()); - } - case 241: break; - case 109: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); - } - case 242: break; - case 110: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); - } - case 243: break; - case 111: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.STATIC,yytext()); - } - case 244: break; - case 112: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SWITCH,yytext()); - } - case 245: break; - case 113: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TYPEOF,yytext()); - } - case 246: break; - case 114: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); - } - case 247: break; - case 115: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DELETE,yytext()); - } - case 248: break; - case 116: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); - } - case 249: break; - case 117: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); - } - case 250: break; - case 118: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DEFAULT,yytext()); - } - case 251: break; - case 119: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DYNAMIC,yytext()); - } - case 252: break; - case 120: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); - } - case 253: break; - case 121: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); - } - case 254: break; - case 122: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); - } - case 255: break; - case 123: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONTINUE,yytext()); - } - case 256: break; - case 124: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.OVERRIDE,yytext()); - } - case 257: break; - case 125: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); - } - case 258: break; - case 126: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); - } - case 259: break; - case 127: - { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.INFINITY,yytext()); - } - case 260: break; - case 128: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NAMESPACE,yytext()); - } - case 261: break; - case 129: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); - } - case 262: break; - case 130: - { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.UNDEFINED,yytext()); - } - case 263: break; - case 131: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); - } - case 264: break; - case 132: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INSTANCEOF,yytext()); - } - case 265: break; - case 133: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); - } - case 266: break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ParsedSymbol(SymbolGroup.EOF,SymbolType.EOF,null); - } - } - else { - zzScanError(ZZ_NO_MATCH); - } - } + return map; } - } + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); + + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; + } + + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length) { + /* if not: blow it up */ + char newBuffer[] = new char[zzCurrentPos * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + } + + /* finally: fill the buffer with new input */ + int numRead = zzReader.read(zzBuffer, zzEndRead, + zzBuffer.length - zzEndRead); + + if (numRead > 0) { + zzEndRead += numRead; + return false; + } + // unlikely but not impossible: read 0 characters, but not at end of stream + if (numRead == 0) { + int c = zzReader.read(); + if (c == -1) { + return true; + } else { + zzBuffer[zzEndRead++] = (char) c; + return false; + } + } + + // numRead < 0 + return true; + } + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) { + zzReader.close(); + } + } + + /** + * Resets the scanner to read from a new input stream. Does not close the + * old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). Lexical + * state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has + * grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) { + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + } + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); + } + + /** + * Returns the character at position pos from the matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. A value from 0 to + * yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead + pos]; + } + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos - zzStartRead; + } + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of yypushback(int) and + * a match-all fallback rule) this method will only be called with things + * that "Can't Possibly Happen". If this method is called, something is + * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done in error + * fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. This number must + * not be greater than yylength()! + */ + public void yypushback(int number) { + if (number > yylength()) { + zzScanError(ZZ_PUSHBACK_2BIG); + } + + zzMarkedPos -= number; + } + + /** + * Resumes scanning until the next regular expression is matched, the end of + * input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ParsedSymbol yylex() throws java.io.IOException, ParseException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char[] zzBufferL = zzBuffer; + char[] zzCMapL = ZZ_CMAP; + + int[] zzTransL = ZZ_TRANS; + int[] zzRowMapL = ZZ_ROWMAP; + int[] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + yychar += zzMarkedPosL - zzStartRead; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + } + + zzForAction: + { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = zzBufferL[zzCurrentPosL++]; + } else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput]]; + if (zzNext == -1) { + break zzForAction; + } + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ((zzAttributes & 8) == 8) { + break zzForAction; + } + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: { + } + case 134: + break; + case 2: { + yyline++; + } + case 135: + break; + case 3: { /*ignore*/ + + } + case 136: + break; + case 4: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); + } + case 137: + break; + case 5: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); + } + case 138: + break; + case 6: { + return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); + } + case 139: + break; + case 7: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); + } + case 140: + break; + case 8: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); + } + case 141: + break; + case 9: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); + } + case 142: + break; + case 10: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); + } + case 143: + break; + case 11: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); + } + case 144: + break; + case 12: { + string.setLength(0); + yybegin(STRING); + } + case 145: + break; + case 13: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong((yytext())))); + } + case 146: + break; + case 14: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); + } + case 147: + break; + case 15: { + string.setLength(0); + yybegin(CHARLITERAL); + } + case 148: + break; + case 16: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); + } + case 149: + break; + case 17: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); + } + case 150: + break; + case 18: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); + } + case 151: + break; + case 19: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); + } + case 152: + break; + case 20: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); + } + case 153: + break; + case 21: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); + } + case 154: + break; + case 22: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); + } + case 155: + break; + case 23: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); + } + case 156: + break; + case 24: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); + } + case 157: + break; + case 25: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); + } + case 158: + break; + case 26: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); + } + case 159: + break; + case 27: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); + } + case 160: + break; + case 28: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); + } + case 161: + break; + case 29: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); + } + case 162: + break; + case 30: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); + } + case 163: + break; + case 31: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); + } + case 164: + break; + case 32: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); + } + case 165: + break; + case 33: { + string.append(yytext()); + } + case 166: + break; + case 34: { + yybegin(YYINITIAL); + yyline++; + } + case 167: + break; + case 35: { + yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); + } + case 168: + break; + case 36: { + string.append(yytext()); + yyline++; + } + case 169: + break; + case 37: { + yybegin(XML); + string.append(yytext()); + } + case 170: + break; + case 38: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); + } + case 171: + break; + case 39: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); + } + case 172: + break; + case 40: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); + } + case 173: + break; + case 41: { + return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new Double(Double.parseDouble((yytext())))); + } + case 174: + break; + case 42: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); + } + case 175: + break; + case 43: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); + } + case 176: + break; + case 44: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); + } + case 177: + break; + case 45: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); + } + case 178: + break; + case 46: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); + } + case 179: + break; + case 47: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext(), 8))); + } + case 180: + break; + case 48: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); + } + case 181: + break; + case 49: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); + } + case 182: + break; + case 50: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); + } + case 183: + break; + case 51: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); + } + case 184: + break; + case 52: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); + } + case 185: + break; + case 53: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); + } + case 186: + break; + case 54: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); + } + case 187: + break; + case 55: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); + } + case 188: + break; + case 56: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); + } + case 189: + break; + case 57: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); + } + case 190: + break; + case 58: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); + } + case 191: + break; + case 59: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); + } + case 192: + break; + case 60: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); + } + case 193: + break; + case 61: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); + } + case 194: + break; + case 62: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); + } + case 195: + break; + case 63: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); + } + case 196: + break; + case 64: { + throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 197: + break; + case 65: { + string.append('\"'); + } + case 198: + break; + case 66: { + char val = (char) Integer.parseInt(yytext().substring(1), 8); + string.append(val); + } + case 199: + break; + case 67: { + string.append('\\'); + } + case 200: + break; + case 68: { + string.append('\''); + } + case 201: + break; + case 69: { + string.append('\b'); + } + case 202: + break; + case 70: { + string.append('\r'); + } + case 203: + break; + case 71: { + string.append('\n'); + } + case 204: + break; + case 72: { + string.append('\t'); + } + case 205: + break; + case 73: { + string.append('\f'); + } + case 206: + break; + case 74: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); + } + case 207: + break; + case 75: { + string.setLength(0); + yybegin(XML); + String s = yytext(); + s = s.substring(1, s.length() - 1); + if (s.contains(" ")) { + s = s.substring(0, s.indexOf(" ")); + } + xmlTagName = s; + string.append(yytext()); + } + case 208: + break; + case 76: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); + } + case 209: + break; + case 77: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); + } + case 210: + break; + case 78: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); + } + case 211: + break; + case 79: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); + } + case 212: + break; + case 80: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext().substring(2), 16))); + } + case 213: + break; + case 81: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SET, yytext()); + } + case 214: + break; + case 82: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); + } + case 215: + break; + case 83: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); + } + case 216: + break; + case 84: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); + } + case 217: + break; + case 85: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); + } + case 218: + break; + case 86: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); + } + case 219: + break; + case 87: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.GET, yytext()); + } + case 220: + break; + case 88: { + return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); + } + case 221: + break; + case 89: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); + } + case 222: + break; + case 90: { + String t = yytext(); + return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, t.substring(2, t.length() - 1)); + } + case 223: + break; + case 91: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); + } + case 224: + break; + case 92: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EACH, yytext()); + } + case 225: + break; + case 93: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); + } + case 226: + break; + case 94: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); + } + case 227: + break; + case 95: { + return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); + } + case 228: + break; + case 96: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); + } + case 229: + break; + case 97: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); + } + case 230: + break; + case 98: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); + } + case 231: + break; + case 99: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); + } + case 232: + break; + case 100: { + string.append(yytext()); + String endtagname = yytext(); + endtagname = endtagname.substring(2, endtagname.length() - 1); + if (endtagname.equals(xmlTagName)) { + yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML, string.toString()); + } + } + case 233: + break; + case 101: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); + } + case 234: + break; + case 102: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); + } + case 235: + break; + case 103: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); + } + case 236: + break; + case 104: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); + } + case 237: + break; + case 105: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); + } + case 238: + break; + case 106: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); + } + case 239: + break; + case 107: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); + } + case 240: + break; + case 108: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINAL, yytext()); + } + case 241: + break; + case 109: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); + } + case 242: + break; + case 110: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); + } + case 243: + break; + case 111: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.STATIC, yytext()); + } + case 244: + break; + case 112: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); + } + case 245: + break; + case 113: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); + } + case 246: + break; + case 114: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); + } + case 247: + break; + case 115: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); + } + case 248: + break; + case 116: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); + } + case 249: + break; + case 117: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); + } + case 250: + break; + case 118: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); + } + case 251: + break; + case 119: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DYNAMIC, yytext()); + } + case 252: + break; + case 120: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); + } + case 253: + break; + case 121: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); + } + case 254: + break; + case 122: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); + } + case 255: + break; + case 123: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); + } + case 256: + break; + case 124: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.OVERRIDE, yytext()); + } + case 257: + break; + case 125: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); + } + case 258: + break; + case 126: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); + } + case 259: + break; + case 127: { + return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); + } + case 260: + break; + case 128: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NAMESPACE, yytext()); + } + case 261: + break; + case 129: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); + } + case 262: + break; + case 130: { + return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); + } + case 263: + break; + case 131: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); + } + case 264: + break; + case 132: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); + } + case 265: + break; + case 133: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); + } + case 266: + break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null); + } + } else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java index c58f61342..dd480f279 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java @@ -118,7 +118,7 @@ import java.util.logging.Logger; public class ActionScriptParser { private long uniqLast = 0; - private final boolean debugMode = false; + private final boolean debugMode = true; private static final String AS3_NAMESPACE = "http://adobe.com/AS3/2006/builtin"; private ABC abc; @@ -148,6 +148,8 @@ public class ActionScriptParser { ParsedSymbol s = lex(); if (s.type == SymbolType.MULTIPLY) { return new UnboundedTypeItem(); + } else if (s.type == SymbolType.VOID) { + return new TypeItem("void"); } else { lexer.pushback(s); } @@ -200,7 +202,6 @@ public class ActionScriptParser { private GraphTargetItem name(boolean typeOnly, List openedNamespaces, List openedNamespacesKinds, HashMap registerVars, boolean inFunction, boolean inMethod, List variables) throws IOException, ParseException { ParsedSymbol s = lex(); expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP); - //NameAVM2Item ret = new NameAVM2Item(lexer.yyline(),s.value.toString(), null, false, openedNamespaces, openedNamespacesKinds); List parts = new ArrayList<>(); parts.add(s.value.toString()); s = lex(); @@ -263,23 +264,6 @@ public class ActionScriptParser { if (AVM2SourceGenerator.searchProperty(allAbcs, nspkg, n.getName(a.constants, new ArrayList()), parts.get(0), outName, outNs, outPropNs, outPropNsKind)) { return new PropertyAVM2Item(null, parts.get(0), index, allAbcs, openedNamespaces, openedNamespacesKinds); } - - /*for (int g = 0; g < a.instance_info.size(); g++) { - InstanceInfo iii = a.instance_info.get(g); - System.out.println("check " + iii.getName(a.constants).getNameWithNamespace(a.constants) + " - search " + parts.get(0)); - for (Trait t : iii.instance_traits.traits) { - n = t.getName(a); - if (n.getNamespace(a.constants).kind == nsKind && n.getName(a.constants, new ArrayList()).equals(parts.get(0))) { - return new PropertyAVM2Item(null, parts.get(0), index, allAbcs, openedNamespaces, openedNamespacesKinds); - } - } - for (Trait t : a.class_info.get(g).static_traits.traits) { - n = t.getName(a); - if (n.getNamespace(a.constants).kind == nsKind && n.getName(a.constants, new ArrayList()).equals(parts.get(0))) { - return new PropertyAVM2Item(null, parts.get(0), index, allAbcs, openedNamespaces, openedNamespacesKinds); - } - } - }*/ } } } @@ -340,7 +324,12 @@ public class ActionScriptParser { } if (k == -1) { - throw new ParseException("Cannot find variable or type:" + Helper.joinStrings(parts, "."), lexer.yyline()); + NameAVM2Item ret = new NameAVM2Item(null, lexer.yyline(), Helper.joinStrings(parts, "."), null, false, openedNamespaces, openedNamespacesKinds); + ret.unresolved = true; + ret.setIndex(index); + variables.add(ret); + return ret; + //throw new ParseException("Cannot find variable or type:" + Helper.joinStrings(parts, "."), lexer.yyline()); } GraphTargetItem ret = new TypeItem("".equals(pkg) ? name : pkg + "." + name); for (int i = 1; i < parts.size(); i++) { @@ -683,10 +672,31 @@ public class ActionScriptParser { } //} break; + case NAMESPACE: + s = lex(); + expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + String nname = s.value.toString(); + String nval = ""; + s = lex(); + + if (s.type == SymbolType.ASSIGN) { + s = lex(); + expected(s, lexer.yyline(), SymbolType.STRING); + nval = s.value.toString(); + s = lex(); + } else { + nval = (packageName.equals("") ? classNameStr : packageName + ":" + classNameStr) + "/" + nname; + } + if (s.type != SymbolType.SEMICOLON) { + lexer.pushback(s); + } + + ConstAVM2Item ns = new ConstAVM2Item(true, nsKind, nname, new TypeItem("Namespace"), new StringAVM2Item(null, nval)); + traits.add(ns); + break; case CONST: case VAR: boolean isConst = s.type == SymbolType.CONST; - if (isOverride) { throw new ParseException("Override flag not allowed for " + (isConst ? "consts" : "vars"), lexer.yyline()); } @@ -706,16 +716,20 @@ public class ActionScriptParser { type = type(openedNamespaces, openedNamespacesKinds, variables); s = lex(); } + + GraphTargetItem value = null; + if (s.type == SymbolType.ASSIGN) { - GraphTargetItem tar; - if (isConst) { - tar = new ConstAVM2Item(isStatic, nsKind, vcname, type, expression(openedNamespaces, openedNamespacesKinds, new HashMap(), false, false, true, variables)); - } else { - tar = new SlotAVM2Item(isStatic, nsKind, vcname, type, expression(openedNamespaces, openedNamespacesKinds, new HashMap(), false, false, true, variables)); - } - traits.add(tar); + value = expression(openedNamespaces, openedNamespacesKinds, new HashMap(), false, false, true, variables); s = lex(); } + GraphTargetItem tar; + if (isConst) { + tar = new ConstAVM2Item(isStatic, nsKind, vcname, type, value); + } else { + tar = new SlotAVM2Item(isStatic, nsKind, vcname, type, value); + } + traits.add(tar); if (s.type != SymbolType.SEMICOLON) { lexer.pushback(s); } @@ -742,7 +756,7 @@ public class ActionScriptParser { openedNamespacesKinds = new ArrayList<>(openedNamespacesKinds); openedNamespacesKinds.add(Namespace.KIND_PRIVATE); - openedNamespaces.add("".equals(packageName) ? classNameStr : packageName + ":" + classNameStr); + openedNamespaces.add(packageName + ":" + classNameStr); openedNamespacesKinds.add(Namespace.KIND_PACKAGE); openedNamespaces.add(""); openedNamespacesKinds.add(Namespace.KIND_PRIVATE); @@ -756,9 +770,9 @@ public class ActionScriptParser { openedNamespacesKinds.add(Namespace.KIND_NAMESPACE); openedNamespaces.add(AS3_NAMESPACE); openedNamespacesKinds.add(Namespace.KIND_PROTECTED); - openedNamespaces.add("".equals(packageName) ? classNameStr : packageName + ":" + classNameStr); + openedNamespaces.add(packageName + ":" + classNameStr); openedNamespacesKinds.add(Namespace.KIND_STATIC_PROTECTED); - openedNamespaces.add("".equals(packageName) ? classNameStr : packageName + ":" + classNameStr); + openedNamespaces.add(packageName + ":" + classNameStr); List indices = new ArrayList<>(); List names = new ArrayList<>(); List namespaces = new ArrayList<>(); @@ -848,25 +862,31 @@ public class ActionScriptParser { switch (s.type) { case WITH: expectedType(SymbolType.PARENT_OPEN); - GraphTargetItem wvar = (name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables)); + GraphTargetItem wvar = expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables);//(name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables)); + if (!isNameOrProp(wvar)) { + throw new ParseException("Not a property or name", lexer.yyline()); + } expectedType(SymbolType.PARENT_CLOSE); expectedType(SymbolType.CURLY_OPEN); List wcmd = commands(openedNamespaces, openedNamespacesKinds, loops, loopLabels, registerVars, inFunction, inMethod, forinlevel, variables); expectedType(SymbolType.CURLY_CLOSE); ret = new WithAVM2Item(null, wvar, wcmd); break; - case DELETE: - GraphTargetItem varDel = name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); - if (varDel instanceof GetPropertyAVM2Item) { - GetPropertyAVM2Item gm = (GetPropertyAVM2Item) varDel; - ret = new DeletePropertyAVM2Item(null, gm.object, gm.propertyName); - } else if (varDel instanceof NameAVM2Item) { - variables.remove(varDel); - ret = new DeletePropertyAVM2Item(null, null, (NameAVM2Item) varDel); - } else { - throw new ParseException("Not a property", lexer.yyline()); - } - break; + /*case DELETE: + GraphTargetItem varDel = expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables);//name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + if(!isNameOrProp(varDel)){ + throw new ParseException("Not a property or name", lexer.yyline()); + } + if (varDel instanceof GetPropertyAVM2Item) { + GetPropertyAVM2Item gm = (GetPropertyAVM2Item) varDel; + ret = new DeletePropertyAVM2Item(null, gm.object, gm.propertyName); + } else if (varDel instanceof NameAVM2Item) { + variables.remove(varDel); + ret = new DeletePropertyAVM2Item(null, null, (NameAVM2Item) varDel); + } else { + throw new ParseException("Not a property", lexer.yyline()); + } + break;*/ case FUNCTION: s = lexer.lex(); expected(s, lexer.yyline(), SymbolType.IDENTIFIER); @@ -899,15 +919,18 @@ public class ActionScriptParser { ret = new BlockItem(null, commands(openedNamespaces, openedNamespacesKinds, loops, loopLabels, registerVars, inFunction, inMethod, forinlevel, variables)); expectedType(SymbolType.CURLY_CLOSE); break; - case INCREMENT: //preincrement - case DECREMENT: //predecrement - GraphTargetItem varincdec = name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); - if (s.type == SymbolType.INCREMENT) { - ret = new PreIncrementAVM2Item(null, varincdec); - } else if (s.type == SymbolType.DECREMENT) { - ret = new PreDecrementAVM2Item(null, varincdec); - } - break; + /*case INCREMENT: //preincrement + case DECREMENT: //predecrement + GraphTargetItem varincdec = expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables);//name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + if(!isNameOrProp(varincdec)){ + throw new ParseException("Not a property or name", lexer.yyline()); + } + if (s.type == SymbolType.INCREMENT) { + ret = new PreIncrementAVM2Item(null, varincdec); + } else if (s.type == SymbolType.DECREMENT) { + ret = new PreDecrementAVM2Item(null, varincdec); + } + break;*/ case SUPER: //constructor call ParsedSymbol ss2 = lex(); if (ss2.type == SymbolType.PARENT_OPEN) { @@ -1271,6 +1294,27 @@ public class ActionScriptParser { GraphTargetItem ret = null; ParsedSymbol s = lex(); switch (s.type) { + case NAMESPACE_OP: + s = lex(); + if (s.type == SymbolType.BRACKET_OPEN) { + GraphTargetItem index = expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables); + NameAVM2Item name = new NameAVM2Item(new UnboundedTypeItem(), lexer.yyline(), null, null, false, openedNamespaces, openedNamespacesKinds); + name.setIndex(index); + name.setNs(expr); + ret = name; + expectedType(SymbolType.BRACKET_CLOSE); + } else { + lexer.pushback(s); + GraphTargetItem name = name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + if (name instanceof NameAVM2Item) { + ((NameAVM2Item) name).setNs(expr); + ((NameAVM2Item) name).unresolved = false; + } else { + throw new ParseException("Not a property name", lexer.yyline()); + } + ret = name; + } + break; case TERNAR: GraphTargetItem terOnTrue = expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables); expectedType(SymbolType.COLON); @@ -1413,13 +1457,13 @@ public class ActionScriptParser { ret = expr; break; case INCREMENT: //postincrement - if (!(expr instanceof NameAVM2Item) && !(expr instanceof GetPropertyAVM2Item)) { + if (!(expr instanceof AssignableAVM2Item)) { throw new ParseException("Invalid assignment", lexer.yyline()); } ret = new PostIncrementAVM2Item(null, expr); break; case DECREMENT: //postdecrement - if (!(expr instanceof NameAVM2Item) && !(expr instanceof GetPropertyAVM2Item)) { + if (!(expr instanceof AssignableAVM2Item)) { throw new ParseException("Invalid assignment", lexer.yyline()); } ret = new PostDecrementAVM2Item(null, expr); @@ -1447,6 +1491,16 @@ public class ActionScriptParser { return ret; } + private boolean isNameOrProp(GraphTargetItem item) { + if (item instanceof NameAVM2Item) { + return true; + } + if (item instanceof PropertyAVM2Item) { + return true; + } + return false; + } + private boolean isType(GraphTargetItem item) { if (item == null) { return false; @@ -1626,7 +1680,10 @@ public class ActionScriptParser { existsRemainder = true; break; case DELETE: - GraphTargetItem varDel = name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + GraphTargetItem varDel = expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables);//name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + if (!isNameOrProp(varDel)) { + throw new ParseException("Not a property or name", lexer.yyline()); + } if (varDel instanceof GetPropertyAVM2Item) { GetPropertyAVM2Item gm = (GetPropertyAVM2Item) varDel; ret = new DeletePropertyAVM2Item(null, gm.object, gm.propertyName); @@ -1636,12 +1693,15 @@ public class ActionScriptParser { break; case INCREMENT: case DECREMENT: //preincrement - GraphTargetItem prevar = name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + GraphTargetItem varincdec = expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables);//name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + if (!isNameOrProp(varincdec)) { + throw new ParseException("Not a property or name", lexer.yyline()); + } if (s.type == SymbolType.INCREMENT) { - ret = new PreIncrementAVM2Item(null, prevar); + ret = new PreIncrementAVM2Item(null, varincdec); } if (s.type == SymbolType.DECREMENT) { - ret = new PreDecrementAVM2Item(null, prevar); + ret = new PreDecrementAVM2Item(null, varincdec); } existsRemainder = true; break; @@ -1809,7 +1869,7 @@ public class ActionScriptParser { } ABC abc = new ABC(swf); ActionScriptParser parser = new ActionScriptParser(abc, playerABCs); - parser.addScript(new String(Helper.readFile(src), "UTF-8"),true); + parser.addScript(new String(Helper.readFile(src), "UTF-8"), true); abc.saveToStream(new FileOutputStream(new File(dst))); } catch (Exception ex) { Logger.getLogger(ActionScriptParser.class.getName()).log(Level.SEVERE, null, ex); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AssignableAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AssignableAVM2Item.java index 4c9a93bc4..72ba1ff12 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AssignableAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AssignableAVM2Item.java @@ -14,7 +14,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - package com.jpexs.decompiler.flash.abc.avm2.parser.script; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -29,25 +28,25 @@ import java.util.List; * * @author JPEXS */ -public abstract class AssignableAVM2Item extends AVM2Item{ +public abstract class AssignableAVM2Item extends AVM2Item { protected GraphTargetItem assignedValue; - + public AssignableAVM2Item() { this(null); } - + public AssignableAVM2Item(GraphTargetItem storeValue) { super(null, PRECEDENCE_PRIMARY); this.assignedValue = storeValue; } - public abstract List toSourcePreChange(SourceGeneratorLocalData localData, SourceGenerator generator, List change); - public abstract List toSourcePostChange(SourceGeneratorLocalData localData, SourceGenerator generator, List change); - public GraphTargetItem getAssignedValue(){ + public abstract List toSourceChange(SourceGeneratorLocalData localData, SourceGenerator generator, List pre, List post, boolean needsReturn); + + public GraphTargetItem getAssignedValue() { return assignedValue; } - + public void setAssignedValue(GraphTargetItem storeValue) { this.assignedValue = storeValue; } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java index 94f0e4c2a..0a76e7d17 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java @@ -14,15 +14,18 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - package com.jpexs.decompiler.flash.abc.avm2.parser.script; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; +import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.executing.CallPropVoidIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.executing.CallPropertyIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.FindPropertyStrictIns; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; +import com.jpexs.decompiler.flash.abc.types.InstanceInfo; +import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -30,6 +33,7 @@ import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeFunctionItem; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; +import java.util.AbstractList; import java.util.ArrayList; import java.util.List; @@ -41,9 +45,9 @@ public class CallAVM2Item extends AVM2Item { public GraphTargetItem name; public List arguments; - - public CallAVM2Item(GraphTargetItem name,List arguments) { - super(null,NOPRECEDENCE); + + public CallAVM2Item(GraphTargetItem name, List arguments) { + super(null, NOPRECEDENCE); this.name = name; this.arguments = arguments; } @@ -55,54 +59,92 @@ public class CallAVM2Item extends AVM2Item { @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - if(name instanceof PropertyAVM2Item){ - PropertyAVM2Item prop=(PropertyAVM2Item)name; - Object obj = prop.object; - if(obj == null){ - obj = new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{prop.resolveProperty()}, new byte[0]); + + AVM2SourceGenerator g = (AVM2SourceGenerator) generator; + + GraphTargetItem callable = name; + if (callable instanceof NameAVM2Item) { + NameAVM2Item n = (NameAVM2Item) callable; + List allAbcs = new ArrayList<>(); + allAbcs.add(g.abc); + allAbcs.addAll(g.allABCs); + String cname; + String pkgName = ""; + cname = localData.currentClass; + if (cname.contains(".")) { + pkgName = cname.substring(0, cname.lastIndexOf(".")); + cname = cname.substring(cname.lastIndexOf(".") + 1); } - return toSourceMerge(localData, generator, obj,prop.index,arguments, - new AVM2Instruction(0, new CallPropertyIns(), new int[]{prop.resolveProperty(),arguments.size()}, new byte[0]) - ); + GraphTargetItem obj = null; + Reference outName = new Reference<>(""); + Reference outNs = new Reference<>(""); + Reference outPropNs = new Reference<>(""); + Reference outPropNsKind = new Reference<>(1); + if (AVM2SourceGenerator.searchProperty(allAbcs, pkgName, cname, n.getVariableName(), outName, outNs, outPropNs, outPropNsKind)) { + NameAVM2Item nobj = new NameAVM2Item(new TypeItem(localData.currentClass), n.line, "this", null, false, n.openedNamespaces, n.openedNamespacesKind); + nobj.setRegNumber(0); + obj = nobj; + } + PropertyAVM2Item p = new PropertyAVM2Item(obj, n.getVariableName(), n.getIndex(), allAbcs, n.openedNamespaces, n.openedNamespacesKind); + p.setAssignedValue(n.getAssignedValue()); + callable = p; } - if(name instanceof NameAVM2Item){ - //TODO + + if (callable instanceof PropertyAVM2Item) { + PropertyAVM2Item prop = (PropertyAVM2Item) callable; + Object obj = prop.object; + if (obj == null) { + obj = new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{prop.resolveProperty()}, new byte[0]); + } + return toSourceMerge(localData, generator, obj, prop.index, arguments, + new AVM2Instruction(0, new CallPropertyIns(), new int[]{prop.resolveProperty(), arguments.size()}, new byte[0]) + ); } return new ArrayList<>(); } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { - if(name instanceof PropertyAVM2Item){ - PropertyAVM2Item prop=(PropertyAVM2Item)name; + + AVM2SourceGenerator g = (AVM2SourceGenerator) generator; + + GraphTargetItem callable = name; + if (callable instanceof NameAVM2Item) { + NameAVM2Item n = (NameAVM2Item) callable; + List allAbcs = new ArrayList<>(); + allAbcs.add(g.abc); + allAbcs.addAll(g.allABCs); + PropertyAVM2Item p = new PropertyAVM2Item(null, n.getVariableName(), n.getIndex(), allAbcs, n.openedNamespaces, n.openedNamespacesKind); + p.setAssignedValue(n.getAssignedValue()); + callable = p; + } + + if (callable instanceof PropertyAVM2Item) { + PropertyAVM2Item prop = (PropertyAVM2Item) callable; Object obj = prop.object; - if(obj == null){ - obj = new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{prop.resolveProperty()}, new byte[0]); + if (obj == null) { + obj = new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{prop.resolveProperty()}, new byte[0]); } - return toSourceMerge(localData, generator, obj,prop.index,arguments, - new AVM2Instruction(0, new CallPropVoidIns(), new int[]{prop.resolveProperty(),arguments.size()}, new byte[0]) - ); - } - if(name instanceof NameAVM2Item){ - //TODO + return toSourceMerge(localData, generator, obj, prop.index, arguments, + new AVM2Instruction(0, new CallPropVoidIns(), new int[]{prop.resolveProperty(), arguments.size()}, new byte[0]) + ); } + return new ArrayList<>(); } - - @Override public GraphTargetItem returnType() { GraphTargetItem ti = name.returnType(); - if(ti instanceof TypeFunctionItem){ - TypeFunctionItem tfi=(TypeFunctionItem)ti; + if (ti instanceof TypeFunctionItem) { + TypeFunctionItem tfi = (TypeFunctionItem) ti; return new TypeItem(tfi.fullTypeName); } return ti; } - + @Override public boolean hasReturnValue() { return true; - } + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java index b9eb7d527..66b9e3fbc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java @@ -46,7 +46,7 @@ public class ClassAVM2Item extends AVM2Item implements Block { return ret; } - public ClassAVM2Item(boolean isDynamic,boolean isFinal, int namespaceKind, String className, GraphTargetItem extendsOp, List implementsOp, GraphTargetItem constructor, List traits) { + public ClassAVM2Item(boolean isDynamic, boolean isFinal, int namespaceKind, String className, GraphTargetItem extendsOp, List implementsOp, GraphTargetItem constructor, List traits) { super(null, NOPRECEDENCE); this.className = className; this.traits = traits; @@ -83,6 +83,5 @@ public class ClassAVM2Item extends AVM2Item implements Block { public GraphTargetItem returnType() { return new UnboundedTypeItem(); //FIXME } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java index 62781e5ff..650687957 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java @@ -58,7 +58,7 @@ public class ConstAVM2Item extends AVM2Item { public GraphTargetItem returnType() { return type; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java index 58d0f561a..3516b1336 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java @@ -14,7 +14,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - package com.jpexs.decompiler.flash.abc.avm2.parser.script; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -33,7 +32,7 @@ import java.util.List; * * @author JPEXS */ -public class ConstructSomethingAVM2Item extends CallAVM2Item{ +public class ConstructSomethingAVM2Item extends CallAVM2Item { public ConstructSomethingAVM2Item(GraphTargetItem name, List arguments) { super(name, arguments); @@ -44,24 +43,21 @@ public class ConstructSomethingAVM2Item extends CallAVM2Item{ return name.returnType(); } - - - @Override + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - - if(name instanceof TypeItem){ - TypeItem prop=(TypeItem)name; - int type_index = ((AVM2SourceGenerator)generator).resolveType(name.toString()); - return toSourceMerge(localData, generator, - new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{type_index,arguments.size()}, new byte[0]) - ,arguments, - new AVM2Instruction(0, new ConstructPropIns(), new int[]{type_index,arguments.size()}, new byte[0]) - ); + + if (name instanceof TypeItem) { + TypeItem prop = (TypeItem) name; + int type_index = ((AVM2SourceGenerator) generator).resolveType(name.toString()); + return toSourceMerge(localData, generator, + new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{type_index, arguments.size()}, new byte[0]), arguments, + new AVM2Instruction(0, new ConstructPropIns(), new int[]{type_index, arguments.size()}, new byte[0]) + ); } - if(name instanceof NameAVM2Item){ + if (name instanceof NameAVM2Item) { //TODO } return new ArrayList<>(); - } - + } + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/FunctionAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/FunctionAVM2Item.java index 55b5f0e13..2e7bb11a5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/FunctionAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/FunctionAVM2Item.java @@ -39,7 +39,7 @@ public class FunctionAVM2Item extends AVM2Item { public int line; public boolean hasRest; - public FunctionAVM2Item(boolean hasRest,int line,String functionName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { + public FunctionAVM2Item(boolean hasRest, int line, String functionName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { super(null, NOPRECEDENCE); this.paramNames = paramNames; this.body = body; @@ -61,7 +61,7 @@ public class FunctionAVM2Item extends AVM2Item { public GraphTargetItem returnType() { return retType; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/GetterAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/GetterAVM2Item.java index 89c7491c8..01294ec3f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/GetterAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/GetterAVM2Item.java @@ -25,9 +25,8 @@ import java.util.List; */ public class GetterAVM2Item extends MethodAVM2Item { - public GetterAVM2Item(boolean hasRest,int line, boolean override, boolean isFinal, boolean isStatic, int namespaceKind, String methodName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { - super(hasRest,line,override, isFinal, isStatic, namespaceKind, methodName, paramTypes, paramNames, paramValues, body, subvariables, retType); + public GetterAVM2Item(boolean hasRest, int line, boolean override, boolean isFinal, boolean isStatic, int namespaceKind, String methodName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { + super(hasRest, line, override, isFinal, isStatic, namespaceKind, methodName, paramTypes, paramNames, paramValues, body, subvariables, retType); } - } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java index 1d751dfb6..b1c623724 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java @@ -35,7 +35,7 @@ public class InterfaceAVM2Item extends AVM2Item { public int namespaceKind; public boolean isFinal; - public InterfaceAVM2Item(boolean isFinal,int namespaceKind, String name, List superInterfaces, List traits) { + public InterfaceAVM2Item(boolean isFinal, int namespaceKind, String name, List superInterfaces, List traits) { super(null, NOPRECEDENCE); this.name = name; this.superInterfaces = superInterfaces; @@ -58,7 +58,7 @@ public class InterfaceAVM2Item extends AVM2Item { public boolean hasReturnValue() { return false; } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); //FIXME diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/MethodAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/MethodAVM2Item.java index d85a8cecf..be8d529ed 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/MethodAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/MethodAVM2Item.java @@ -32,8 +32,8 @@ public class MethodAVM2Item extends FunctionAVM2Item { private boolean isFinal; private boolean override; - public MethodAVM2Item(boolean hasRest,int line, boolean override,boolean isFinal,boolean isStatic, int namespaceKind, String methodName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { - super(hasRest,line,methodName, paramTypes, paramNames, paramValues, body, subvariables, retType); + public MethodAVM2Item(boolean hasRest, int line, boolean override, boolean isFinal, boolean isStatic, int namespaceKind, String methodName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { + super(hasRest, line, methodName, paramTypes, paramNames, paramValues, body, subvariables, retType); this.namespaceKind = namespaceKind; this.isStatic = isStatic; this.override = override; @@ -44,12 +44,10 @@ public class MethodAVM2Item extends FunctionAVM2Item { return override; } - - public boolean isStatic() { return isStatic; } - + public boolean isFinal() { return isFinal; } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java index 354d9d586..ae4ea601d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java @@ -17,12 +17,34 @@ package com.jpexs.decompiler.flash.abc.avm2.parser.script; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; +import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal0Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal1Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal2Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal3Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocalIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.KillIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal0Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal1Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal2Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal3Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocalIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.other.FindPropertyStrictIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.other.GetPropertyIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.other.SetPropertyIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.DupIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PopIns; -import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceAIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceSIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.types.ConvertSIns; import com.jpexs.decompiler.flash.abc.avm2.model.CoerceAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetLocalAVM2Item; +import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.abc.types.Namespace; +import com.jpexs.decompiler.flash.abc.types.NamespaceSet; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -39,7 +61,7 @@ import java.util.List; public class NameAVM2Item extends AssignableAVM2Item { private String variableName; - + private boolean definition; private GraphTargetItem index; private int nsKind = -1; @@ -47,10 +69,13 @@ public class NameAVM2Item extends AssignableAVM2Item { public List openedNamespacesKind; public int line; public GraphTargetItem type; - private String ns = ""; + private GraphTargetItem ns = null; private int regNumber = -1; + public boolean unresolved = false; - public void setNs(String ns) { + public GraphTargetItem redirect; + + public void setNs(GraphTargetItem ns) { this.ns = ns; } @@ -62,9 +87,7 @@ public class NameAVM2Item extends AssignableAVM2Item { return regNumber; } - - - public String getNs() { + public GraphTargetItem getNs() { return ns; } @@ -92,6 +115,7 @@ public class NameAVM2Item extends AssignableAVM2Item { return nsKind; } + @Override public void setAssignedValue(GraphTargetItem storeValue) { this.assignedValue = storeValue; } @@ -107,6 +131,8 @@ public class NameAVM2Item extends AssignableAVM2Item { this.definition = definition; this.line = line; this.type = type; + this.openedNamespaces = openedNamespaces; + this.openedNamespacesKind = openedNamespacesKind; } public boolean isDefinition() { @@ -122,42 +148,178 @@ public class NameAVM2Item extends AssignableAVM2Item { return writer; } - @Override - public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - if (regNumber == -1) { + private int allNsSet(ABC abc) { + int nssa[] = new int[openedNamespaces.size()]; + for (int i = 0; i < openedNamespaces.size(); i++) { + nssa[i] = (abc.constants.getNamespaceId(new Namespace(openedNamespacesKind.get(i), abc.constants.getStringId(openedNamespaces.get(i), true)), 0, true)); + } + return abc.constants.getNamespaceSetId(new NamespaceSet(nssa), true); + } + + private AVM2Instruction generateSetLoc(int regNumber) { + switch (regNumber) { + case 0: + return ins(new SetLocal0Ins()); + case 1: + return ins(new SetLocal1Ins()); + case 2: + return ins(new SetLocal2Ins()); + case 3: + return ins(new SetLocal3Ins()); + default: + return ins(new SetLocalIns(), regNumber); + } + } + + private AVM2Instruction generateGetLoc(int regNumber) { + switch (regNumber) { + case 0: + return ins(new GetLocal0Ins()); + case 1: + return ins(new GetLocal1Ins()); + case 2: + return ins(new GetLocal2Ins()); + case 3: + return ins(new GetLocal3Ins()); + default: + return ins(new GetLocalIns(), regNumber); + } + } + + private AVM2Instruction generateCoerce(SourceGenerator generator, String type) { + AVM2Instruction ins; + switch (type) { + case "*": + ins = ins(new CoerceAIns()); + break; + case "String": + ins = ins(new CoerceSIns()); + break; + default: + int type_index = new TypeItem(type).resolveClass(((AVM2SourceGenerator) generator).abc); + ins = ins(new CoerceIns(), type_index); + break; + } + return ins; + } + + private List toSource(SourceGeneratorLocalData localData, SourceGenerator generator, boolean needsReturn) { + if (variableName != null && regNumber == -1 && ns == null) { throw new RuntimeException("No register set for " + variableName); } if (definition && assignedValue == null) { return new ArrayList<>(); } - AVM2SourceGenerator g=(AVM2SourceGenerator)generator; - - if(index!=null){ - //g.abc.constants.getmu + AVM2SourceGenerator g = (AVM2SourceGenerator) generator; + + if (variableName == null && ns != null && index != null) { + if (assignedValue != null) { + List ret = toSourceMerge(localData, generator, + ns, generateCoerce(generator, "Namespace"), index, ins(new ConvertSIns()), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), + ns, generateCoerce(generator, "Namespace"), index, ins(new ConvertSIns()), assignedValue); + int tempReg = -1; + if (needsReturn) { + tempReg = getFreeRegister(localData, generator); + ret.add(ins(new DupIns())); + ret.add(generateSetLoc(tempReg)); + } + ret.addAll(toSourceMerge(localData, generator, + ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)) + )); + if (needsReturn) { + ret.add(generateGetLoc(tempReg)); + ret.add(ins(new KillIns(), tempReg)); + killRegister(localData, generator, tempReg); + } + return ret; + } else { + return toSourceMerge(localData, generator, + ns, generateCoerce(generator, "Namespace"), index, ins(new ConvertSIns()), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), + ns, generateCoerce(generator, "Namespace"), index, ins(new ConvertSIns()), ins(new GetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), + needsReturn ? null : ins(new PopIns()) + ); + } } - - if (assignedValue == null) { - return toSourceMerge(localData, generator, new LocalRegAVM2Item(null, regNumber, null)); - } else { - return toSourceMerge(localData, generator, new SetLocalAVM2Item(null, regNumber, new CoerceAVM2Item(null, assignedValue, type.toString()))); + if (variableName != null && ns != null && index == null) { + if (assignedValue != null) { + List ret = toSourceMerge(localData, generator, + ns, generateCoerce(generator, "Namespace"), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(variableName, true), 0, 0, 0, new ArrayList()), true)), + ns, generateCoerce(generator, "Namespace"), assignedValue); + int tempReg = -1; + if (needsReturn) { + tempReg = getFreeRegister(localData, generator); + ret.add(ins(new DupIns())); + ret.add(generateSetLoc(tempReg)); + } + ret.addAll(toSourceMerge(localData, generator, + ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(variableName, true), 0, 0, 0, new ArrayList()), true)) + )); + if (needsReturn) { + ret.add(generateGetLoc(tempReg)); + ret.add(ins(new KillIns(), tempReg)); + killRegister(localData, generator, tempReg); + } + return ret; + } else { + return toSourceMerge(localData, generator, + ns, generateCoerce(generator, "Namespace"), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(variableName, true), 0, 0, 0, new ArrayList()), true)), + ns, generateCoerce(generator, "Namespace"), ins(new GetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(variableName, true), 0, 0, 0, new ArrayList()), true)), + needsReturn ? null : ins(new PopIns()) + ); + } } + if (index != null) { + if (assignedValue != null) { + List ret = toSourceMerge(localData, generator, + generateGetLoc(regNumber), index, assignedValue); + int tempReg = -1; + if (needsReturn) { + tempReg = getFreeRegister(localData, generator); + ret.add(ins(new DupIns())); + ret.add(generateSetLoc(tempReg)); + } + ret.addAll(toSourceMerge(localData, generator, ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.MULTINAMEL, 0, 0, allNsSet(g.abc), 0, new ArrayList()), true)) + )); + if (needsReturn) { + ret.add(generateGetLoc(tempReg)); + ret.add(ins(new KillIns(), tempReg)); + killRegister(localData, generator, tempReg); + } + return ret; + } else { + return toSourceMerge(localData, generator, + generateGetLoc(regNumber), index, + ins(new GetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.MULTINAMEL, 0, 0, allNsSet(g.abc), 0, new ArrayList()), true)), + needsReturn ? null : ins(new PopIns()) + ); + } + } + + if (assignedValue != null) { + return toSourceMerge(localData, generator, assignedValue, generateCoerce(generator, type.toString()), needsReturn + ? ins(new DupIns()) : null, generateSetLoc(regNumber)); + } else { + return toSourceMerge(localData, generator, generateGetLoc(regNumber), + needsReturn ? null : ins(new PopIns())); + } } - + + @Override + public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { + if (redirect != null) { + return redirect.toSource(localData, generator); + } + return toSource(localData, generator, true); + + } + @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { - if (regNumber == -1) { - throw new RuntimeException("No register set for " + variableName); - } - if (definition && assignedValue == null) { - return new ArrayList<>(); - } - if (assignedValue == null) { - return toSourceMerge(localData, generator, new LocalRegAVM2Item(null, regNumber, null), - new AVM2Instruction(0, new PopIns(), new int[]{}, new byte[0])); - } else { - return toSourceMerge(localData, generator, new SetLocalAVM2Item(null, regNumber, new CoerceAVM2Item(null, assignedValue, type.toString())).toSourceIgnoreReturnValue(localData, generator)); + if (redirect != null) { + return redirect.toSourceIgnoreReturnValue(localData, generator); } + return toSource(localData, generator, false); } @Override @@ -190,13 +352,97 @@ public class NameAVM2Item extends AssignableAVM2Item { } @Override - public List toSourcePreChange(SourceGeneratorLocalData localData, SourceGenerator generator, List change) { - return null;//TODO - } + public List toSourceChange(SourceGeneratorLocalData localData, SourceGenerator generator, List pre, List post, boolean needsReturn) { + if (redirect != null) { + return ((AssignableAVM2Item) redirect).toSourceChange(localData, generator, pre, post, needsReturn); + } + AVM2SourceGenerator g = (AVM2SourceGenerator) generator; - @Override - public List toSourcePostChange(SourceGeneratorLocalData localData, SourceGenerator generator, List change) { - return null;//TODO + if (variableName == null && ns != null && index != null) { + List ret = toSourceMerge(localData, generator, + ns, generateCoerce(generator, "Namespace"), index, ins(new ConvertSIns()), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), + ns, generateCoerce(generator, "Namespace"), index, ins(new ConvertSIns()), + //Start get original + ns, generateCoerce(generator, "Namespace"), index, ins(new ConvertSIns()), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), + ns, generateCoerce(generator, "Namespace"), index, ins(new ConvertSIns()), ins(new GetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), + //End get original + pre); + int tempReg = -1; + if (needsReturn) { + tempReg = getFreeRegister(localData, generator); + ret.add(ins(new DupIns())); + ret.add(generateSetLoc(tempReg)); + } + ret.addAll(toSourceMerge(localData, generator, + post, + ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)) + )); + if (needsReturn) { + ret.add(generateGetLoc(tempReg)); + ret.add(ins(new KillIns(), tempReg)); + killRegister(localData, generator, tempReg); + } + return ret; + } + if (variableName != null && ns != null && index == null) { + List ret = toSourceMerge(localData, generator, + ns, generateCoerce(generator, "Namespace"), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(variableName, true), 0, 0, 0, new ArrayList()), true)), + ns, generateCoerce(generator, "Namespace"), + //Start get original + ns, generateCoerce(generator, "Namespace"), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(variableName, true), 0, 0, 0, new ArrayList()), true)), + ns, generateCoerce(generator, "Namespace"), ins(new GetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(variableName, true), 0, 0, 0, new ArrayList()), true)), + //End get original + pre); + int tempReg = -1; + if (needsReturn) { + tempReg = getFreeRegister(localData, generator); + ret.add(ins(new DupIns())); + ret.add(generateSetLoc(tempReg)); + } + ret.addAll(toSourceMerge(localData, generator, + post, + ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(variableName, true), 0, 0, 0, new ArrayList()), true)) + )); + if (needsReturn) { + ret.add(generateGetLoc(tempReg)); + ret.add(ins(new KillIns(), tempReg)); + killRegister(localData, generator, tempReg); + } + return ret; + } + + if (index != null) { + List ret = toSourceMerge(localData, generator, + generateGetLoc(regNumber), index, + //Start get original + generateGetLoc(regNumber), index, + ins(new GetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.MULTINAMEL, 0, 0, allNsSet(g.abc), 0, new ArrayList()), true)), + //End get original + pre); + int tempReg = -1; + if (needsReturn) { + tempReg = getFreeRegister(localData, generator); + ret.add(ins(new DupIns())); + ret.add(generateSetLoc(tempReg)); + } + ret.addAll(toSourceMerge(localData, generator, + post, + ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.MULTINAMEL, 0, 0, allNsSet(g.abc), 0, new ArrayList()), true)) + )); + if (needsReturn) { + ret.add(generateGetLoc(tempReg)); + ret.add(ins(new KillIns(), tempReg)); + killRegister(localData, generator, tempReg); + } + return ret; + } + + return toSourceMerge(localData, generator, + //Start get original + generateGetLoc(regNumber), + //End get original + pre, generateCoerce(generator, type.toString()), needsReturn + ? ins(new DupIns()) : null, post, generateSetLoc(regNumber)); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PackageAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PackageAVM2Item.java index 804da6ce3..e4680b8fe 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PackageAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PackageAVM2Item.java @@ -42,7 +42,7 @@ public class PackageAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { return writer; } - + @Override public GraphTargetItem returnType() { return new UnboundedTypeItem(); //FIXME diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java index 719552ff6..2a8074860 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java @@ -61,14 +61,14 @@ public class PropertyAVM2Item extends AssignableAVM2Item { private List openedNamespaces; private List openedNamespacesKind; - public PropertyAVM2Item(GraphTargetItem object, String propertyName, GraphTargetItem index, List abcs, List openedNamespaces, List openedNamespacesKind) { + public PropertyAVM2Item(GraphTargetItem object, String propertyName, GraphTargetItem index, List abcs, List openedNamespaces, List openedNamespacesKind) { this.propertyName = propertyName; this.object = object; this.abcs = abcs; this.index = index; this.openedNamespaces = openedNamespaces; this.openedNamespacesKind = openedNamespacesKind; - } + } @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { @@ -167,7 +167,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { abcs.get(0).constants.getStringId(propertyName, true), 0, allNsSet(), 0, new ArrayList()), true); } - + String objType = resolveObjectType(); for (ABC a : abcs) { int ci = a.findClassByName(objType); @@ -193,12 +193,12 @@ public class PropertyAVM2Item extends AssignableAVM2Item { break; } } - + for (ABC a : abcs) { - for(ScriptInfo si:a.script_info){ + for (ScriptInfo si : a.script_info) { for (Trait t : si.traits.traits) { Multiname tname = t.getName(a); - String tnames = t.getName(a).getName(a.constants, new ArrayList()); + String tnames = t.getName(a).getName(a.constants, new ArrayList()); if (tnames.equals(propertyName)) { return abcs.get(0).constants.getMultinameId(new Multiname(tname.kind, abcs.get(0).constants.getStringId(tnames, true), @@ -207,7 +207,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { } } } - + return abcs.get(0).constants.getMultinameId(new Multiname(Multiname.MULTINAME, abcs.get(0).constants.getStringId(propertyName, true), 0, allNsSet(), 0, new ArrayList()), true); @@ -253,64 +253,67 @@ public class PropertyAVM2Item extends AssignableAVM2Item { return TypeItem.UNBOUNDED; } - @Override - public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - AVM2SourceGenerator g = (AVM2SourceGenerator) generator; + public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator, boolean needsReturn) { int propertyId = resolveProperty(); Object obj = object; if (obj == null) { - obj = new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{propertyId}, new byte[0]); + + String cname; + String pkgName = ""; + cname = localData.currentClass; + if (cname.contains(".")) { + pkgName = cname.substring(0, cname.lastIndexOf(".")); + cname = cname.substring(cname.lastIndexOf(".") + 1); + } + Reference outName = new Reference<>(""); + Reference outNs = new Reference<>(""); + Reference outPropNs = new Reference<>(""); + Reference outPropNsKind = new Reference<>(1); + if (AVM2SourceGenerator.searchProperty(abcs, pkgName, cname, propertyName, outName, outNs, outPropNs, outPropNsKind)) { + NameAVM2Item nobj = new NameAVM2Item(new TypeItem(localData.currentClass), 0/*?*/, "this", null, false, openedNamespaces, openedNamespacesKind); + nobj.setRegNumber(0); + obj = nobj; + } else { + obj = ins(new FindPropertyStrictIns(), propertyId); + } } if (assignedValue != null) { - int temp_reg = g.getFreeRegister(localData); + int temp_reg = getFreeRegister(localData, generator); String targetType = resolvePropertyType().toString(); String srcType = assignedValue.returnType().toString(); - GraphTargetItem st=assignedValue; - if(!targetType.equals(srcType)){ + GraphTargetItem st = assignedValue; + if (!targetType.equals(srcType)) { st = new CoerceAVM2Item(null, assignedValue, targetType); } - List ret = toSourceMerge(localData, generator, obj, index,st , - new AVM2Instruction(0, new DupIns(), new int[]{}, new byte[0]), - new AVM2Instruction(0, new SetLocalIns(), new int[]{temp_reg}, new byte[0]), - new AVM2Instruction(0, new SetPropertyIns(), new int[]{propertyId}, new byte[0]), - new AVM2Instruction(0, new GetLocalIns(), new int[]{temp_reg}, new byte[0]), - new AVM2Instruction(0, new KillIns(), new int[]{temp_reg}, new byte[0]) - ); - g.killRegister(localData, temp_reg); + List ret = toSourceMerge(localData, generator, obj, index, st); + if (needsReturn) { + ret.add(ins(new DupIns())); + ret.add(ins(new SetLocalIns(), temp_reg)); + } + ret.add(ins(new SetPropertyIns(), propertyId)); + if (needsReturn) { + ret.add(ins(new GetLocalIns(), temp_reg)); + ret.add(ins(new KillIns(), temp_reg)); + killRegister(localData, generator, temp_reg); + } return ret; } else { return toSourceMerge(localData, generator, obj, index, - new AVM2Instruction(0, new GetPropertyIns(), new int[]{propertyId}, new byte[0]) + ins(new GetPropertyIns(), propertyId), + needsReturn ? null : ins(new PopIns()) ); } } @Override - public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { - AVM2SourceGenerator g = (AVM2SourceGenerator) generator; + public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { + return toSource(localData, generator, true); + } - int propertyId = resolveProperty(); - Object obj = object; - if (obj == null) { - obj = new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{propertyId}, new byte[0]); - } - if (assignedValue != null) { - String targetType = resolvePropertyType().toString(); - String srcType = assignedValue.returnType().toString(); - GraphTargetItem st=assignedValue; - if(!targetType.equals(srcType)){ - st = new CoerceAVM2Item(null, assignedValue, targetType); - } - return toSourceMerge(localData, generator, obj, index, st, - new AVM2Instruction(0, new SetPropertyIns(), new int[]{propertyId}, new byte[0]) - ); - } else { - return toSourceMerge(localData, generator, obj, index, - new AVM2Instruction(0, new GetPropertyIns(), new int[]{propertyId}, new byte[0]), - new AVM2Instruction(0, new PopIns(), new int[]{}, new byte[0]) - ); - } + @Override + public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { + return toSource(localData, generator, false); } @Override @@ -319,13 +322,36 @@ public class PropertyAVM2Item extends AssignableAVM2Item { } @Override - public List toSourcePreChange(SourceGeneratorLocalData localData, SourceGenerator generator, List change) { - return null; //TODO - } + public List toSourceChange(SourceGeneratorLocalData localData, SourceGenerator generator, List pre, List post, boolean needsReturn) { + int propertyId = resolveProperty(); + Object obj = object; + if (obj == null) { + obj = ins(new FindPropertyStrictIns(), propertyId); + } + + int temp_reg = getFreeRegister(localData, generator); + + List ret = toSourceMerge(localData, generator, obj, index, + //Start get original + obj, + index, + ins(new GetPropertyIns(), propertyId), + //End get original + pre + ); + if (needsReturn) { + ret.add(ins(new DupIns())); + ret.add(ins(new SetLocalIns(), temp_reg)); + } + ret.addAll(post); + ret.add(ins(new SetPropertyIns(), propertyId)); + if (needsReturn) { + ret.add(ins(new GetLocalIns(), temp_reg)); + ret.add(ins(new KillIns(), temp_reg)); + killRegister(localData, generator, temp_reg); + } + return ret; - @Override - public List toSourcePostChange(SourceGeneratorLocalData localData, SourceGenerator generator, List change) { - return null; //TODO } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/Reference.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/Reference.java index e63d8fc6b..dfa79dc5e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/Reference.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/Reference.java @@ -14,17 +14,16 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - package com.jpexs.decompiler.flash.abc.avm2.parser.script; /** * * @author JPEXS */ -public class Reference { +public class Reference { private T val; - + public Reference(T val) { this.val = val; } @@ -41,6 +40,5 @@ public class Reference { public String toString() { return val.toString(); } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SetterAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SetterAVM2Item.java index 5666acb58..de0cd3964 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SetterAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SetterAVM2Item.java @@ -25,8 +25,8 @@ import java.util.List; */ public class SetterAVM2Item extends MethodAVM2Item { - public SetterAVM2Item(boolean hasRest,int line, boolean override, boolean isFinal, boolean isStatic, int namespaceKind, String methodName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { - super(hasRest,line, override, isFinal, isStatic, namespaceKind, methodName, paramTypes, paramNames, paramValues, body, subvariables, retType); + public SetterAVM2Item(boolean hasRest, int line, boolean override, boolean isFinal, boolean isStatic, int namespaceKind, String methodName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { + super(hasRest, line, override, isFinal, isStatic, namespaceKind, methodName, paramTypes, paramNames, paramValues, body, subvariables, retType); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SlotAVM2Item.java index 715722346..193df7a2e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SlotAVM2Item.java @@ -53,12 +53,12 @@ public class SlotAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { return writer; //TODO } - + @Override public GraphTargetItem returnType() { return type; } - + @Override public boolean hasReturnValue() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/todo.txt b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/todo.txt index a3d8038f9..868f37b3a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/todo.txt +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/todo.txt @@ -6,7 +6,6 @@ TODO List for AS3 parser/compiler: - for in/ for each - typenames (Vectors) - inner functions (activation, slots, etc.) -- namespaces :: etc. - pre/post in/decrements - with - delete property diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/ClassInfo.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/ClassInfo.java index 7a8076ff5..baad6b391 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/ClassInfo.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/ClassInfo.java @@ -23,7 +23,9 @@ import java.util.List; public class ClassInfo { public int cinit_index; //MethodInfo - static initializer - public Traits static_traits = new Traits();; + public Traits static_traits = new Traits(); + + ; @Override public String toString() { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java index 67f2ed862..689b6f9e2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java @@ -31,14 +31,14 @@ public class MethodInfo { public int name_index; //0=no name // 1=need_arguments, 2=need_activation, 4=need_rest 8=has_optional 16=ignore_rest, 32=explicit, 64=setsdxns, 128=has_paramnames public static int FLAG_NEED_ARGUMENTS = 1; - public static int FLAG_NEED_ACTIVATION = 2; + public static int FLAG_NEED_ACTIVATION = 2; public static int FLAG_NEED_REST = 4; public static int FLAG_HAS_OPTIONAL = 8; public static int FLAG_IGNORE_REST = 16; public static int FLAG_EXPLICIT = 32; public static int FLAG_SETSDXNS = 64; public static int FLAG_HAS_PARAMNAMES = 128; - + public int flags; public ValueKind[] optional; public int[] paramNames; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/ValueKind.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/ValueKind.java index c48c130ca..918eb3a15 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/ValueKind.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/ValueKind.java @@ -1,16 +1,16 @@ /* * Copyright (C) 2010-2014 JPEXS - * + * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ @@ -47,6 +47,26 @@ public class ValueKind { this.value_kind = value_kind; } + public static int nsKindToValueKind(int nsKind) { + switch (nsKind) { + case Namespace.KIND_EXPLICIT: + return CONSTANT_ExplicitNamespace; + case Namespace.KIND_NAMESPACE: + return CONSTANT_Namespace; + case Namespace.KIND_PACKAGE: + return CONSTANT_PackageNamespace; + case Namespace.KIND_PACKAGE_INTERNAL: + return CONSTANT_PackageInternalNs; + case Namespace.KIND_PRIVATE: + return CONSTANT_PrivateNs; + case Namespace.KIND_PROTECTED: + return CONSTANT_ProtectedNamespace; + case Namespace.KIND_STATIC_PROTECTED: + return CONSTANT_StaticProtectedNs; + } + return 0; + } + @Override public String toString() { String s = "";