From 7324cedaffaf051e68bf6577751bddc23ce8da73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Sun, 13 Apr 2014 18:51:59 +0200 Subject: [PATCH] AS3 parser: typenames (Vector) --- .../instructions/other/GetPropertyIns.java | 2 +- .../instructions/other/SetPropertyIns.java | 2 +- .../avm2/instructions/types/ApplyTypeIns.java | 2 +- .../parser/script/AVM2SourceGenerator.java | 54 +- .../avm2/parser/script/ActionScriptLexer.java | 1000 ++++++++--------- .../parser/script/ActionScriptParser.java | 159 +-- .../script/ConstructSomethingAVM2Item.java | 44 +- .../abc/avm2/parser/script/NameAVM2Item.java | 71 +- .../avm2/parser/script/PropertyAVM2Item.java | 30 +- .../parser/script/UnresolvedAVM2Item.java | 95 +- .../abc/avm2/parser/script/actionscript.flex | 4 +- .../flash/abc/avm2/parser/script/todo.txt | 4 +- .../flash/abc/types/MethodBody.java | 1 + .../com/jpexs/decompiler/graph/TypeItem.java | 38 +- 14 files changed, 784 insertions(+), 722 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java index 8e3131ecb..d8ee104b0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java @@ -50,7 +50,7 @@ public class GetPropertyIns extends InstructionDefinition { int ret = -1 + 1; int multinameIndex = ins.operands[0]; int kind = abc.constants.getMultiname(multinameIndex).kind; - if (kind != Multiname.MULTINAMEL && kind != Multiname.MULTINAMELA) { + if (kind != Multiname.MULTINAMEL && kind != Multiname.MULTINAMELA) { //FIXME!!! if (abc.constants.getMultiname(multinameIndex).needsName()) { ret--; } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java index ef404700b..6fd593c7f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java @@ -135,7 +135,7 @@ public class SetPropertyIns extends InstructionDefinition implements SetTypeIns int ret = -2; int multinameIndex = ins.operands[0]; int multinameKind = abc.constants.getMultiname(multinameIndex).kind; - if (multinameKind == Multiname.MULTINAMEL || multinameKind == Multiname.MULTINAMELA) { + if (multinameKind == Multiname.MULTINAMEL || multinameKind == Multiname.MULTINAMELA) { //FIXME!!! return 0; } if (abc.constants.getMultiname(multinameIndex).needsName()) { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/ApplyTypeIns.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/ApplyTypeIns.java index dedee575e..bf6eeb384 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/ApplyTypeIns.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/ApplyTypeIns.java @@ -61,6 +61,6 @@ public class ApplyTypeIns extends InstructionDefinition { @Override public int getStackDelta(AVM2Instruction ins, ABC abc) { - return -ins.operands[0] + 1; + return -ins.operands[0] - 1 + 1; } } 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 1d3825027..ad243b200 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 @@ -347,7 +347,7 @@ public class AVM2SourceGenerator implements SourceGenerator { ins(new PushByteIns(), 0), AssignableAVM2Item.setTemp(localData, this, counterReg), collection, - NameAVM2Item.generateCoerce(this, "*"), + NameAVM2Item.generateCoerce(this, TypeItem.UNBOUNDED), AssignableAVM2Item.setTemp(localData, this, collectionReg) )); @@ -1180,45 +1180,27 @@ public class AVM2SourceGenerator implements SourceGenerator { return 0; } - TypeItem nameItem = (TypeItem) type; + TypeItem nameItem = (TypeItem) type; + name = nameItem.fullTypeName; if (name.contains(".")) { pkg = name.substring(0, name.lastIndexOf('.')); name = name.substring(name.lastIndexOf('.') + 1); } - - /*int nsKind = Namespace.KIND_PACKAGE; - if (pkg.equals("")) { - for (int i = 0; i < nameItem.openedNamespaces.size(); i++) { - String ns = nameItem.openedNamespaces.get(i); - String nspkg = ns; - String nsclass = null; - if (nspkg.contains(":")) { - nsclass = nspkg.substring(nspkg.indexOf(":") + 1); - nspkg = nspkg.substring(0, nspkg.indexOf(":")); - } - if (nsclass == null) { - List abcs = new ArrayList<>(); - abcs.add(abc); - abcs.addAll(allABCs); - loopabc: - for (ABC a : abcs) { - for (InstanceInfo ii : a.instance_info) { - Multiname n = a.constants.constant_multiname.get(ii.name_index); - if (n.getNamespace(a.constants).getName(a.constants).equals(nspkg) && n.getName(a.constants, new ArrayList()).equals(name)) { - pkg = nspkg; - nsKind = n.getNamespace(a.constants).kind; - break loopabc; - } - } - } - } else if (name.equals(nsclass)) { - pkg = nspkg; - nsKind = nameItem.openedNamespacesKind.get(i); - break; - } - } - }*/ - return abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(name), namespace(Namespace.KIND_PACKAGE/*?*/, pkg), 0, 0, new ArrayList()), true); + if(!nameItem.subtypes.isEmpty()){ //It's vector => TypeName + List params = new ArrayList<>(); + for(String p:nameItem.subtypes){ + String ppkg = ""; + if (p.contains(".")) { + ppkg = p.substring(0, p.lastIndexOf('.')); + p = p.substring(p.lastIndexOf('.') + 1); + } + params.add(abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(p), namespace(Namespace.KIND_PACKAGE/*?*/, ppkg), 0, 0, new ArrayList()), true)); + } + int qname = abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(name), namespace(Namespace.KIND_PACKAGE/*?*/, pkg), 0, 0, new ArrayList()), true); + return abc.constants.getMultinameId(new Multiname(Multiname.TYPENAME, 0,0, 0, qname, params), true); + }else{ + return abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(name), namespace(Namespace.KIND_PACKAGE/*?*/, pkg), 0, 0, new ArrayList()), true); + } } public int ident(GraphTargetItem name) { 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 256aace53..7611e557c 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 @@ -19,9 +19,9 @@ package com.jpexs.decompiler.flash.abc.avm2.parser.script; import com.jpexs.decompiler.flash.abc.avm2.parser.ParseException; -import java.util.ArrayList; -import java.util.List; import java.util.Stack; +import java.util.List; +import java.util.ArrayList; /** * This class is a scanner generated by @@ -63,10 +63,10 @@ public final class ActionScriptLexer { * 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" + = "\11\7\1\3\1\2\1\103\1\104\1\1\16\7\4\0\1\13\1\72" + + "\1\15\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" + + "\1\12\1\14\1\16\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" @@ -193,32 +193,32 @@ public final class ActionScriptLexer { + "\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"; + + "\1\41\1\1\1\41\1\45\2\41\1\3\1\0\1\46" + + "\1\47\1\50\1\0\1\51\1\52\1\0\1\53\1\54" + + "\1\55\1\56\1\57\1\60\1\52\1\0\2\60\1\0" + + "\1\61\1\62\5\6\1\63\16\6\1\64\1\65\1\66" + + "\4\6\1\67\17\6\1\70\1\71\1\72\1\73\1\74" + + "\1\75\1\76\1\77\1\100\1\101\1\102\2\103\1\104" + + "\1\105\1\106\1\107\1\110\1\111\1\112\6\0\2\3" + + "\2\0\1\113\3\0\1\114\1\115\1\116\1\117\1\120" + + "\2\121\1\60\1\52\1\0\11\6\1\122\4\6\1\123" + + "\3\6\1\124\6\6\1\125\5\6\1\126\10\6\1\127" + + "\1\6\1\130\1\6\1\131\1\132\1\103\14\0\1\133" + + "\1\121\1\60\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\121\1\60\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\121\1\60\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\114\1\121\1\60\1\165\10\6\1\166\1\167\1\170" + + "\2\6\1\171\1\172\1\6\1\41\1\121\1\60\1\173" + + "\1\174\2\6\1\175\3\6\1\176\1\6\1\177\1\121" + + "\1\60\1\200\1\6\1\201\1\6\1\202\1\203\1\121" + + "\1\60\1\204\1\205\6\60"; private static int[] zzUnpackAction() { - int[] result = new int[418]; + int[] result = new int[416]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -248,60 +248,59 @@ public final class ActionScriptLexer { 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\u015e\0\u041a\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\u0d20\0\u015e\0\u0d66\0\u0dac\0\u0df2\0\u015e\0\u015e\0\u0e38" + + "\0\u0e7e\0\u0ec4\0\u015e\0\u015e\0\u015e\0\u0f0a\0\u015e\0\u0f50" + + "\0\u0f96\0\u0fdc\0\u015e\0\u1022\0\u015e\0\u1068\0\u10ae\0\u10f4" + + "\0\u113a\0\u1180\0\u11c6\0\u120c\0\u015e\0\u015e\0\u1252\0\u1298" + + "\0\u12de\0\u1324\0\u136a\0\u02bc\0\u13b0\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\u02bc\0\u1784\0\u02bc\0\u17ca\0\u1810\0\u1856" + + "\0\u189c\0\u02bc\0\u18e2\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\u015e\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e" + + "\0\u015e\0\u015e\0\u015e\0\u015e\0\u1d42\0\u1d88\0\u015e\0\u015e" + + "\0\u015e\0\u015e\0\u015e\0\u015e\0\u015e\0\u0dac\0\u1dce\0\u1e14" + + "\0\u1e5a\0\u1ea0\0\u1ee6\0\u1f2c\0\u015e\0\u1f72\0\u1fb8\0\u015e" + + "\0\u1ffe\0\u2044\0\u208a\0\u015e\0\u015e\0\u015e\0\u015e\0\u20d0" + + "\0\u113a\0\u2116\0\u215c\0\u21a2\0\u21a2\0\u21e8\0\u222e\0\u2274" + + "\0\u22ba\0\u2300\0\u2346\0\u238c\0\u23d2\0\u2418\0\u02bc\0\u245e" + + "\0\u24a4\0\u24ea\0\u2530\0\u02bc\0\u2576\0\u25bc\0\u2602\0\u02bc" + + "\0\u2648\0\u268e\0\u26d4\0\u271a\0\u2760\0\u27a6\0\u02bc\0\u27ec" + + "\0\u2832\0\u2878\0\u28be\0\u2904\0\u02bc\0\u294a\0\u2990\0\u29d6" + + "\0\u2a1c\0\u2a62\0\u2aa8\0\u2aee\0\u2b34\0\u02bc\0\u2b7a\0\u02bc" + + "\0\u2bc0\0\u02bc\0\u015e\0\u015e\0\u2c06\0\u2c4c\0\u2c92\0\u2cd8" + + "\0\u2d1e\0\u2d64\0\u2daa\0\u2df0\0\u2e36\0\u2e7c\0\u2ec2\0\u2f08" + + "\0\u015e\0\u2f4e\0\u2f94\0\u2fda\0\u3020\0\u02bc\0\u02bc\0\u3066" + + "\0\u02bc\0\u30ac\0\u30f2\0\u3138\0\u317e\0\u31c4\0\u320a\0\u3250" + + "\0\u3296\0\u32dc\0\u02bc\0\u02bc\0\u3322\0\u02bc\0\u3368\0\u33ae" + "\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\u3624\0\u366a\0\u02bc\0\u36b0\0\u36f6\0\u373c\0\u3782\0\u37c8" + + "\0\u02bc\0\u380e\0\u3854\0\u389a\0\u015e\0\u38e0\0\u3926\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\u3be2\0\u02bc\0\u3c28\0\u3c6e\0\u02bc\0\u02bc\0\u3cb4\0\u02bc" + + "\0\u3cfa\0\u02bc\0\u3d40\0\u3d86\0\u3dcc\0\u02bc\0\u3e12\0\u3e58" + + "\0\u3e9e\0\u3ee4\0\u3f2a\0\u3f70\0\u3fb6\0\u3ffc\0\u4042\0\u02bc" + + "\0\u4088\0\u40ce\0\u02bc\0\u4114\0\u415a\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"; + + "\0\u44a2\0\u44e8\0\u02bc\0\u452e\0\u4574\0\u02bc\0\u02bc\0\u45ba" + + "\0\u4600\0\u02bc\0\u4646\0\u468c\0\u46d2\0\u02bc\0\u4718\0\u475e" + + "\0\u47a4\0\u02bc\0\u47ea\0\u4830\0\u4876\0\u48bc\0\u4902\0\u4948" + + "\0\u02bc\0\u498e\0\u49d4\0\u4a1a\0\u3a84\0\u4a60\0\u4aa6\0\u02bc" + + "\0\u4aec\0\u4b32\0\u4b78\0\u4bbe\0\u4c04\0\u4c4a\0\u4c90\0\u4cd6" + + "\0\u02bc\0\u02bc\0\u02bc\0\u4d1c\0\u4d62\0\u02bc\0\u02bc\0\u4da8" + + "\0\u42fe\0\u4dee\0\u4e34\0\u02bc\0\u02bc\0\u4e7a\0\u4ec0\0\u02bc" + + "\0\u4f06\0\u4f4c\0\u4f92\0\u02bc\0\u4fd8\0\u02bc\0\u501e\0\u5064" + + "\0\u02bc\0\u50aa\0\u02bc\0\u50f0\0\u02bc\0\u02bc\0\u015e\0\u5136" + + "\0\u02bc\0\u02bc\0\u517c\0\u51c2\0\u5208\0\u524e\0\u5294\0\u10f4"; private static int[] zzUnpackRowMap() { - int[] result = new int[418]; + int[] result = new int[416]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -327,376 +326,374 @@ public final class ActionScriptLexer { 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\15\1\16\1\17\1\11\1\20\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\0\1\11\1\0\1\73\1\74\1\75\12\73\1\76" + + "\11\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" + + "\4\6\1\105\2\6\1\106\2\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" + + "\7\0\1\11\70\0\1\11\5\0\1\111\1\112\6\0" + + "\1\113\105\0\1\114\77\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" + + "\1\0\1\123\4\0\2\121\2\0\1\121\3\0\31\121" + + "\40\0\1\124\105\0\1\125\1\0\1\126\100\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\66\0\1\135\11\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" - + "\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" + + "\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\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" + + "\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" - + "\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" + + "\3\14\1\211\25\14\23\0\1\14\14\0\1\212\105\0" + + "\1\213\60\0\1\214\24\0\1\215\61\0\1\216\23\0" + + "\1\217\62\0\1\220\22\0\1\221\105\0\1\222\71\0" + + "\1\73\2\0\12\73\1\0\11\73\1\0\56\73\2\0" + + "\1\75\103\0\1\223\2\0\12\223\1\224\1\223\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" + + "\7\0\1\103\70\0\1\103\7\0\2\236\1\237\2\0" + + "\1\240\1\241\2\0\7\236\3\0\31\236\23\0\1\236" + + "\3\0\1\103\2\0\1\236\4\0\1\105\5\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\113\0\2\120\2\0\2\120\1\134\5\0" + + "\1\134\60\0\1\251\1\121\1\252\2\0\1\253\2\0" + + "\1\254\2\121\2\251\2\121\1\251\3\0\31\251\23\0" + + "\1\121\14\0\1\255\105\0\1\256\105\0\1\257\1\0" + + "\1\260\100\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\261\1\262" + + "\1\0\4\262\3\0\1\262\1\0\2\262\1\0\1\262" + + "\6\0\2\262\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\263" + + "\1\130\2\0\2\263\1\134\5\0\1\134\71\0\2\264" + + "\2\0\2\264\1\0\1\265\50\0\1\265\14\0\2\14" + + "\7\0\7\14\3\0\2\14\1\266\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\11\14\1\267\17\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" + + "\1\270\23\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\6\14\1\271\22\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\11\14\1\272\17\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\6\14\1\273\2\14" + + "\1\274\17\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\10\14\1\275\20\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\3\14\1\276\25\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\11\14\1\277\17\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\3\14" + + "\1\300\25\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\21\14\1\301\7\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\12\14\1\302\16\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\303\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\17\14" + + "\1\304\11\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\23\14\1\305\5\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\16\14\1\306\12\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\13\14\1\307\6\14" + + "\1\310\6\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\1\14\1\311\10\14\1\312\16\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\21\14\1\313\7\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\6\14" + + "\1\314\2\14\1\315\17\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\21\14\1\316\7\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\317\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\14\14" + + "\1\320\14\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\15\14\1\321\1\322\12\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\10\14\1\323\20\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\16\14\1\324" + + "\12\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\1\14\1\325\27\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\10\14\1\326\20\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\11\14\1\330" + + "\17\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\12\14\1\331\16\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\7\14\1\332\2\14\1\333\16\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\5\14\1\334" + "\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\335\30\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\1\14\1\336\27\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\12\14\1\337\16\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\11\14\1\340\17\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\15\14" + + "\1\341\13\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\30\14\1\342\23\0\1\14\14\0\1\343\110\0" + + "\1\226\3\0\2\226\100\0\1\344\3\0\2\344\67\0" + + "\1\345\12\0\2\345\2\0\1\345\3\0\31\345\37\0" + + "\1\240\1\241\104\0\1\241\1\0\1\346\76\0\1\347" + + "\12\0\2\347\2\0\1\347\3\0\31\347\32\0\1\350" + + "\1\243\1\351\2\0\1\352\2\0\1\107\2\243\2\350" + + "\2\243\1\350\3\0\31\350\23\0\1\243\2\0\1\245" + + "\103\0\5\246\1\353\100\246\4\0\1\245\1\247\106\0" + + "\2\251\1\354\2\0\1\355\1\356\1\0\1\254\7\251" + + "\3\0\31\251\23\0\1\251\6\0\1\357\12\0\2\357" + + "\2\0\1\357\3\0\31\357\32\0\1\360\4\0\1\253" + + "\5\0\2\360\2\0\1\360\3\0\31\360\40\0\1\361" + + "\110\0\2\362\1\0\4\362\3\0\1\362\1\0\2\362" + + "\1\0\1\362\6\0\2\362\50\0\1\120\5\0\1\363" + + "\1\130\2\0\2\363\1\134\5\0\1\134\71\0\2\264" + + "\2\0\2\264\67\0\2\14\7\0\7\14\3\0\3\14" + + "\1\364\25\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\13\14\1\365\15\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\20\14\1\366\10\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\367\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" + + "\1\370\26\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\5\14\1\372\23\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\6\14\1\373\2\14" + + "\1\374\17\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\6\14\1\375\22\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\11\14\1\376\17\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\377\26\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\1\14\1\u0101\27\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u0102\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\16\14\1\u0103\12\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\7\14\1\u0105\21\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\6\14\1\u0106\22\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0107\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14" + + "\1\u0108\17\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\7\14\1\u010a\6\14\1\u010b\12\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u010c\26\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\3\14\1\u010d\25\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\6\14" + + "\1\u0110\22\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\5\14\1\u0112\23\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\20\14\1\u0113\10\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\16\14" + + "\1\u0114\12\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\11\14\1\u0115\17\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\24\14\1\u0116\4\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\4\14\1\u0117\24\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\16\14" + + "\1\u0118\12\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\14\14\1\u0119\14\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\12\14\1\u011a\16\14\23\0\1\14" + + "\6\0\2\345\3\0\1\240\1\241\2\0\7\345\3\0" + + "\31\345\23\0\1\345\1\346\2\0\12\346\1\u011b\70\346" + + "\6\0\2\347\1\u011c\5\0\1\u011d\7\347\3\0\31\347" + + "\23\0\1\347\6\0\2\350\1\u011e\2\0\1\u011f\1\u0120" + + "\1\0\1\107\7\350\3\0\31\350\23\0\1\350\6\0" + + "\1\u0121\12\0\2\u0121\2\0\1\u0121\3\0\31\u0121\32\0" + + "\1\u0122\4\0\1\352\5\0\2\u0122\2\0\1\u0122\3\0" + + "\31\u0122\24\0\4\246\1\245\1\353\100\246\6\0\1\u0123" + + "\12\0\2\u0123\2\0\1\u0123\3\0\31\u0123\32\0\1\360" + + "\4\0\1\355\1\356\4\0\2\360\2\0\1\360\3\0" + + "\31\360\37\0\1\356\1\0\1\u0124\76\0\1\u0125\1\357" + + "\3\0\1\253\2\0\1\254\2\357\2\u0125\2\357\1\u0125" + + "\3\0\31\u0125\23\0\1\357\6\0\2\360\1\u0126\2\0" + + "\1\u0127\1\356\2\0\7\360\3\0\31\360\23\0\1\360" + + "\17\0\2\u0128\1\0\4\u0128\3\0\1\u0128\1\0\2\u0128" + + "\1\0\1\u0128\6\0\2\u0128\50\0\1\120\5\0\1\u0129" + + "\1\130\2\0\2\u0129\1\134\5\0\1\134\60\0\2\14" + + "\7\0\7\14\3\0\4\14\1\u012a\24\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\1\14\1\u012b\27\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\10\14" + + "\1\u012c\20\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\20\14\1\u012d\10\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u012e\17\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\12\14\1\u012f\16\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\6\14" + + "\1\u0130\22\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\1\14\1\u0132\27\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\5\14\1\u0133\23\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\6\14\1\u0135\22\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\17\14\1\u0136\11\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\7\14\1\u0137\21\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\3\14" + + "\1\u0138\25\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\1\14\1\u0139\27\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\1\14\1\u013a\27\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u013b\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\15\14" + + "\1\u013c\13\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\13\14\1\u013d\15\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u013e\17\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\23\14\1\u013f\5\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u0140\26\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\16\14\1\u0141\12\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u0142\17\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\2\14\1\u0143\26\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u0144\26\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\3\14\1\u0145\25\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u0146\25\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\12\14\1\u0147\16\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\10\14" + + "\1\u0148\20\14\23\0\1\14\1\346\2\0\10\346\1\u011b" + + "\1\346\1\u011b\70\346\6\0\1\u0149\12\0\2\u0149\2\0" + + "\1\u0149\3\0\31\u0149\32\0\1\u014a\12\0\2\u014a\2\0" + + "\1\u014a\3\0\31\u014a\32\0\1\u0122\4\0\1\u011f\1\u0120" + + "\4\0\2\u0122\2\0\1\u0122\3\0\31\u0122\37\0\1\u0120" + + "\1\0\1\u014b\76\0\1\u014c\1\u0121\3\0\1\352\2\0" + + "\1\107\2\u0121\2\u014c\2\u0121\1\u014c\3\0\31\u014c\23\0" + + "\1\u0121\6\0\2\u0122\1\u014d\2\0\1\u014e\1\u0120\2\0" + + "\7\u0122\3\0\31\u0122\23\0\1\u0122\6\0\1\u0125\1\u0123" + + "\3\0\1\355\1\356\1\0\1\254\2\u0123\2\u0125\2\u0123" + + "\1\u0125\3\0\31\u0125\23\0\1\u0123\1\u0124\2\0\12\u0124" + + "\1\u014f\70\u0124\6\0\2\u0125\1\u0126\2\0\1\355\1\356" + + "\1\0\1\254\7\u0125\3\0\31\u0125\23\0\1\u0125\6\0" + + "\1\u0150\12\0\2\u0150\2\0\1\u0150\3\0\31\u0150\37\0" + + "\1\u0127\1\356\110\0\2\u0151\1\0\4\u0151\3\0\1\u0151" + + "\1\0\2\u0151\1\0\1\u0151\6\0\2\u0151\50\0\1\120" + + "\5\0\1\u0152\1\130\2\0\2\u0152\1\134\5\0\1\134" + + "\60\0\2\14\7\0\7\14\3\0\10\14\1\u0153\20\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\14\14" + + "\1\u0154\14\14\23\0\1\14\6\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\5\14\1\u0156\23\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\20\14\1\u0157\10\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\12\14" + + "\1\u0158\16\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\21\14\1\u0159\7\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\15\14\1\u015a\13\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\10\14\1\u015b\20\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\10\14" + + "\1\u015c\4\14\1\u015d\13\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u015e\17\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\23\14\1\u015f\5\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\12\14" + + "\1\u0160\16\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\16\14\1\u0161\12\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u0162\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\12\14\1\u0163\16\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\16\14" + + "\1\u0164\12\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\5\14\1\u0166\23\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\11\14\1\u0167\17\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\26\14" + + "\1\u0168\2\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\5\14\1\u0169\23\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\12\14\1\u016a\16\14\23\0\1\14" + + "\6\0\2\u0149\6\0\1\u011d\7\u0149\3\0\31\u0149\23\0" + + "\1\u0149\6\0\1\u014c\1\u014a\3\0\1\u011f\1\u0120\1\0" + + "\1\107\2\u014a\2\u014c\2\u014a\1\u014c\3\0\31\u014c\23\0" + + "\1\u014a\1\u014b\2\0\12\u014b\1\u016b\70\u014b\6\0\2\u014c" + + "\1\u014d\2\0\1\u011f\1\u0120\1\0\1\107\7\u014c\3\0" + + "\31\u014c\23\0\1\u014c\6\0\1\u016c\12\0\2\u016c\2\0" + + "\1\u016c\3\0\31\u016c\37\0\1\u014e\1\u0120\71\0\1\u0124" + + "\2\0\10\u0124\1\u014f\1\u0124\1\u014f\1\u016d\67\u0124\6\0" + + "\2\u0150\3\0\1\u0127\1\356\2\0\7\u0150\3\0\31\u0150" + + "\23\0\1\u0150\17\0\2\u016e\1\0\4\u016e\3\0\1\u016e" + + "\1\0\2\u016e\1\0\1\u016e\6\0\2\u016e\50\0\1\120" + + "\5\0\1\u016f\1\130\2\0\2\u016f\1\134\5\0\1\134" + + "\60\0\2\14\7\0\7\14\3\0\6\14\1\u0170\22\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\13\14" + + "\1\u0171\15\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\14\14\1\u0172\14\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u0173\25\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\5\14\1\u0174\23\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\3\14\1\u0176\25\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u0177\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\10\14\1\u0178\20\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14" + + "\1\u0179\17\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\5\14\1\u017a\23\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\22\14\1\u017b\6\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\7\14\1\u017c\21\14" + + "\23\0\1\14\6\0\2\14\7\0\7\14\3\0\11\14" + + "\1\u017d\17\14\23\0\1\14\6\0\2\14\7\0\7\14" + + "\3\0\2\14\1\u017e\26\14\23\0\1\14\6\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u017f\26\14\23\0\1\14" + + "\6\0\2\14\7\0\7\14\3\0\11\14\1\u0180\17\14" + + "\23\0\1\14\1\u014b\2\0\10\u014b\1\u016b\1\u014b\1\u016b" + + "\1\u0181\67\u014b\6\0\2\u016c\3\0\1\u014e\1\u0120\2\0" + + "\7\u016c\3\0\31\u016c\23\0\1\u016c\17\0\2\u0182\1\0" + + "\4\u0182\3\0\1\u0182\1\0\2\u0182\1\0\1\u0182\6\0" + + "\2\u0182\50\0\1\120\5\0\1\u0183\1\130\2\0\2\u0183" + "\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"; + + "\2\14\1\u0184\26\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\2\14\1\u0185\26\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\5\14\1\u0186\23\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" + + "\16\14\1\u0188\12\14\23\0\1\14\6\0\2\14\7\0" + + "\7\14\3\0\5\14\1\u0189\23\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\10\14\1\u018a\20\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\2\14\1\u018b" + + "\26\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\22\14\1\u018e\6\14\23\0" + + "\1\14\17\0\2\u018f\1\0\4\u018f\3\0\1\u018f\1\0" + + "\2\u018f\1\0\1\u018f\6\0\2\u018f\50\0\1\120\5\0" + + "\1\u0190\1\130\2\0\2\u0190\1\134\5\0\1\134\60\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u0191\26\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\7\14\1\u0192" + + "\21\14\23\0\1\14\6\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\11\14\1\u0194\17\14\23\0\1\14\6\0" + + "\2\14\7\0\7\14\3\0\14\14\1\u0195\14\14\23\0" + + "\1\14\6\0\2\14\7\0\7\14\3\0\14\14\1\u0196" + + "\14\14\23\0\1\14\17\0\2\u0197\1\0\4\u0197\3\0" + + "\1\u0197\1\0\2\u0197\1\0\1\u0197\6\0\2\u0197\50\0" + + "\1\120\5\0\1\u0198\1\130\2\0\2\u0198\1\134\5\0" + + "\1\134\60\0\2\14\7\0\7\14\3\0\15\14\1\u0199" + + "\13\14\23\0\1\14\6\0\2\14\7\0\7\14\3\0" + + "\6\14\1\u019a\22\14\23\0\1\14\11\0\1\120\5\0" + + "\1\u019b\1\130\2\0\2\u019b\1\134\5\0\1\134\63\0" + + "\1\120\5\0\1\u019c\1\130\2\0\2\u019c\1\134\5\0" + + "\1\134\63\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\52\0"; private static int[] zzUnpackTrans() { - int[] result = new int[21350]; + int[] result = new int[21210]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -738,18 +735,17 @@ public final class ActionScriptLexer { 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" + = "\5\0\1\11\1\1\1\11\10\1\1\11\4\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"; + + "\3\1\1\11\3\1\2\11\2\1\1\0\3\11\1\0" + + "\1\11\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\4\11\5\1" + + "\1\0\55\1\2\11\14\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[] result = new int[416]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -853,7 +849,7 @@ public final class ActionScriptLexer { return yychar; } - private Stack pushedBack = new Stack<>(); + private Stack pushedBack = new Stack(); public int yyline() { return yyline + 1; @@ -995,8 +991,6 @@ public final class ActionScriptLexer { /** * Closes the input stream. - * - * @throws java.io.IOException */ public final void yyclose() throws java.io.IOException { zzAtEOF = true; /* indicate end of file */ @@ -1037,8 +1031,6 @@ public final class ActionScriptLexer { /** * Returns the current lexical state. - * - * @return */ public final int yystate() { return zzLexicalState; @@ -1055,8 +1047,6 @@ public final class ActionScriptLexer { /** * Returns the text matched by the current regular expression. - * - * @return */ public final String yytext() { return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); @@ -1078,8 +1068,6 @@ public final class ActionScriptLexer { /** * Returns the length of the matched text region. - * - * @return */ public final int yylength() { return zzMarkedPos - zzStartRead; @@ -1131,7 +1119,6 @@ public final class ActionScriptLexer { * * @return the next token * @exception java.io.IOException if any I/O-Error occurs - * @throws com.jpexs.decompiler.flash.abc.avm2.parser.ParseException */ public ParsedSymbol yylex() throws java.io.IOException, ParseException { int zzInput; @@ -1258,18 +1245,18 @@ public final class ActionScriptLexer { case 142: break; case 10: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); } case 143: break; case 11: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); + string.setLength(0); + yybegin(STRING); } case 144: break; case 12: { - string.setLength(0); - yybegin(STRING); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); } case 145: break; @@ -1420,262 +1407,261 @@ public final class ActionScriptLexer { case 173: break; case 41: { - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new Double(Double.parseDouble((yytext())))); + return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); } case 174: break; case 42: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); + return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new Double(Double.parseDouble((yytext())))); } case 175: break; case 43: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); } case 176: break; case 44: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); } case 177: break; case 45: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); } case 178: break; case 46: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); } case 179: break; case 47: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext(), 8))); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); } case 180: break; case 48: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext(), 8))); } case 181: break; case 49: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); } case 182: break; case 50: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); } case 183: break; case 51: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); } case 184: break; case 52: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); } case 185: break; case 53: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); } case 186: break; case 54: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); } case 187: break; case 55: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); } case 188: break; case 56: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); } case 189: break; case 57: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); } case 190: break; case 58: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); } case 191: break; case 59: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); } case 192: break; case 60: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); } case 193: break; case 61: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); } case 194: break; case 62: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); } case 195: break; case 63: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); } case 196: break; case 64: { - throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); } case 197: break; case 65: { - string.append('\"'); + throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); } case 198: break; case 66: { - char val = (char) Integer.parseInt(yytext().substring(1), 8); - string.append(val); + string.append('\"'); } case 199: break; case 67: { - string.append('\\'); + char val = (char) Integer.parseInt(yytext().substring(1), 8); + string.append(val); } case 200: break; case 68: { - string.append('\''); + string.append('\\'); } case 201: break; case 69: { - string.append('\b'); + string.append('\''); } case 202: break; case 70: { - string.append('\r'); + string.append('\b'); } case 203: break; case 71: { - string.append('\n'); + string.append('\r'); } case 204: break; case 72: { - string.append('\t'); + string.append('\n'); } case 205: break; case 73: { - string.append('\f'); + string.append('\t'); } case 206: break; case 74: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); + string.append('\f'); } case 207: break; case 75: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); + } + case 208: + break; + case 76: { string.setLength(0); yybegin(XML); String s = yytext(); s = s.substring(1, s.length() - 1); if (s.contains(" ")) { - s = s.substring(0, s.indexOf(' ')); + 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()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); } case 210: break; case 78: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); } case 211: break; case 79: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); } case 212: break; case 80: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext().substring(2), 16))); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); } case 213: break; case 81: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SET, yytext()); + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext().substring(2), 16))); } case 214: break; case 82: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SET, yytext()); } case 215: break; case 83: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); } case 216: break; case 84: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); } case 217: break; case 85: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); } case 218: break; case 86: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); } case 219: break; case 87: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.GET, yytext()); + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); } case 220: break; case 88: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.GET, yytext()); } case 221: break; case 89: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); + return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); } case 222: break; case 90: { - String t = yytext(); - return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, t.substring(2, t.length() - 1)); + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); } case 223: break; 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 469a5d425..060cb76ba 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 @@ -208,142 +208,36 @@ public class ActionScriptParser { name += "." + s.value.toString(); s = lex(); } + List params=new ArrayList<>(); + if(s.type == SymbolType.TYPENAME){ + s = lex(); + do{ + String p = ""; + expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + p = s.value.toString(); + s = lex(); + while (s.type == SymbolType.DOT) { + s = lex(); + expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + name += "." + s.value.toString(); + s = lex(); + } + params.add(p); + }while(s.type == SymbolType.COMMA); + expected(s, lexer.yyline(), SymbolType.GREATER_THAN); + s = lex(); + /*if(!openedNamespaces.contains(AS3vecNs)){ + openedNamespaces.add(AS3vecNs); + } */ + } GraphTargetItem index = null; if (s.type == SymbolType.BRACKET_OPEN) { index = expression(needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, true, variables); expectedType(SymbolType.BRACKET_CLOSE); } else { lexer.pushback(s); - } - if (!typeOnly) { - /*for (NameAVM2Item n : variables) { - if (n.getVariableName().equals(parts.get(0))) { - NameAVM2Item ni = new NameAVM2Item(n.type, lexer.yyline(), n.getVariableName(), null, false, openedNamespaces); - variables.add(ni); - GraphTargetItem ret = ni; - if (parts.size() == 1) { - ((NameAVM2Item) ret).setIndex(index); - } - for (int i = 1; i < parts.size(); i++) { - ret = new PropertyAVM2Item(ret, parts.get(i), i == parts.size() - 1 ? index : null, abc, otherABCs, openedNamespaces); - } - - return ret; - } - }*/ - } - - /*List allAbcs = new ArrayList<>(); - allAbcs.add(abc); - allAbcs.addAll(otherABCs); - //search for variable in openedNamespaces - if (!typeOnly) { - for (int i = 0; i < openedNamespaces.size(); i++) { - int nsIndex = openedNamespaces.get(i); - Namespace ns = abc.constants.constant_namespace.get(nsIndex); - int nsKind = ns.kind; - loopabc: - for (ABC a : allAbcs) { - for (int h = 0; h < a.instance_info.size(); h++) { - InstanceInfo ii = a.instance_info.get(h); - Multiname n = a.constants.constant_multiname.get(ii.name_index); - if (n.getNamespace(a.constants).getName(a.constants).equals(ns.getName(abc.constants)) && n.getNamespace(a.constants).kind == nsKind) { - - //found opened class - Reference outName = new Reference<>(""); - Reference outNs = new Reference<>(""); - Reference outPropNs = new Reference<>(""); - Reference outPropNsKind = new Reference<>(1); - Reference outPropType = new Reference<>(""); - if (AVM2SourceGenerator.searchPrototypeChain(false, allAbcs, n.getNamespace(a.constants).getName(a.constants), n.getName(a.constants, new ArrayList()), parts.get(0), outName, outNs, outPropNs, outPropNsKind, outPropType)) { - return new PropertyAVM2Item(null, parts.get(0), index, abc, otherABCs, openedNamespaces); - } - } - } - } - - } - } - - //variable not found, gonna search types - String pkg = ""; - String name = null; - int foundNsKind = Namespace.KIND_PACKAGE; - int k; - loopk: - for (k = parts.size() - 1; k >= 0; k--) { - - if (typeOnly) { - if (k < parts.size() - 1) { - k = -1; - break loopk; - } - } - if (k == 0 || typeOnly) { - for (int i = 0; i < importedClasses.size(); i++) { - String iname = importedClasses.get(i); - String ipkg = ""; - if (iname.contains(".")) { - ipkg = iname.substring(0, iname.lastIndexOf('.')); - iname = iname.substring(iname.lastIndexOf('.') + 1); - } - if (iname.equals(parts.get(0))) { - k = 0; - pkg = ipkg; - name = iname; - break loopk; - } - - } - } - pkg = ""; - for (int j = 0; j <= k - 1; j++) { - if (!"".equals(pkg)) { - pkg += "."; - } - pkg += parts.get(j); - } - name = parts.get(k); - - String fname = pkg.isEmpty() ? name : pkg + "." + name; - - for (ABC a : allAbcs) { - int c = a.findClassByName(fname); - if (c != -1) { - break loopk; - } - } - - for (int i = 0; i < openedNamespaces.size(); i++) { - int nsIndex = openedNamespaces.get(i); - Namespace ns = abc.constants.constant_namespace.get(nsIndex); - int nsKind = ns.kind; - String nsname = ns.getName(abc.constants); - if (nsKind == Namespace.KIND_PACKAGE) { - for (ABC a : allAbcs) { - int c = a.findClassByName(nsname.isEmpty() ? fname : nsname + "." + fname); - if (c != -1) { - pkg = nsname; - break loopk; - } - } - } - } - } - - if (k == -1) { - NameAVM2Item ret = new NameAVM2Item(null, lexer.yyline(), Helper.joinStrings(parts, "."), null, false, openedNamespaces); - 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++) { - ret = new PropertyAVM2Item(ret, parts.get(i), i == parts.size() - 1 ? index : null, abc, otherABCs, openedNamespaces); - }*/ - UnresolvedAVM2Item ret = new UnresolvedAVM2Item(importedClasses, typeOnly, null, lexer.yyline(), name, null, openedNamespaces); + } + UnresolvedAVM2Item ret = new UnresolvedAVM2Item(params,importedClasses, typeOnly, null, lexer.yyline(), name, null, openedNamespaces); ret.setIndex(index); variables.add(ret); return ret; @@ -408,6 +302,7 @@ public class ActionScriptParser { } private FunctionAVM2Item function(Reference needsActivation, List importedClasses, int namespace, GraphTargetItem thisType, List openedNamespaces, boolean withBody, String functionName, boolean isMethod, List variables) throws IOException, ParseException { + openedNamespaces = new ArrayList<>(openedNamespaces); //local copy int line = lexer.yyline(); ParsedSymbol s; expectedType(SymbolType.PARENT_OPEN); @@ -1752,7 +1647,7 @@ public class ActionScriptParser { case NEW: GraphTargetItem newvar = name(needsActivation, true, openedNamespaces, registerVars, inFunction, inMethod, variables, importedClasses); expectedType(SymbolType.PARENT_OPEN); - ret = new ConstructSomethingAVM2Item(newvar, call(needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, variables)); + ret = new ConstructSomethingAVM2Item(openedNamespaces,newvar, call(needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, variables)); existsRemainder = true; break; case IDENTIFIER: @@ -1825,7 +1720,7 @@ public class ActionScriptParser { int packageInternalNs = 0; openedNamespaces.add(packageInternalNs = abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE_INTERNAL, abc.constants.getStringId(name, true)), 0, true)); openedNamespaces.add(publicNs = abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId("", true)), 0, true)); - + openedNamespaces.add(abc.constants.addNamespace(new Namespace(Namespace.KIND_PRIVATE, 0))); //abc.constants.getStringId(fileName + "$", true) if (!name.isEmpty()) { openedNamespaces.add(publicNs = abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(name, true)), 0, 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 1ff203841..46e346b0c 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 @@ -17,9 +17,16 @@ 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.construction.ConstructIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.construction.ConstructPropIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.FindPropertyStrictIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.other.GetLexIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.types.ApplyTypeIns; +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.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -34,8 +41,11 @@ import java.util.List; */ public class ConstructSomethingAVM2Item extends CallAVM2Item { - public ConstructSomethingAVM2Item(GraphTargetItem name, List arguments) { + public List openedNamespaces; + + public ConstructSomethingAVM2Item(List openedNamespaces,GraphTargetItem name, List arguments) { super(name, arguments); + this.openedNamespaces = openedNamespaces; } @Override @@ -43,6 +53,16 @@ public class ConstructSomethingAVM2Item extends CallAVM2Item { return name.returnType(); } + private int allNsSetWithVec(ABC abc) { + int nssa[] = new int[openedNamespaces.size()+1]; + for (int i = 0; i < openedNamespaces.size(); i++) { + nssa[i] = openedNamespaces.get(i); + } + nssa[nssa.length-1] = abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId("__AS3__.vec", true)), 0, true); + return abc.constants.getNamespaceSetId(new NamespaceSet(nssa), true); + + } + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { @@ -53,11 +73,33 @@ public class ConstructSomethingAVM2Item extends CallAVM2Item { if (resname instanceof TypeItem) { TypeItem prop = (TypeItem) resname; + if(!prop.subtypes.isEmpty()){ //It's Vector - TypeName + //int qname = ((AVM2SourceGenerator) generator).resolveType(prop.fullTypeName); + String name = prop.fullTypeName.substring(prop.fullTypeName.lastIndexOf(".")+1); + ABC abc=((AVM2SourceGenerator)generator).abc; + int qname = abc.constants.getMultinameId(new Multiname(Multiname.MULTINAME,abc.constants.getStringId(name,true) , 0,allNsSetWithVec(abc), 0, new ArrayList()), true); + List params=new ArrayList<>(); + for(String p:prop.subtypes){ + params.add(((AVM2SourceGenerator) generator).resolveType(p)); + } + List ret=new ArrayList<>(); + ret.add(ins(new GetLexIns(),qname)); + for(int p:params){ + ret.add(ins(new GetLexIns(),p)); + } + ret.add(ins(new ApplyTypeIns(),params.size())); + ret.addAll(toSourceMerge(localData, generator, arguments, + ins(new ConstructIns(),arguments.size()) + )); + return ret; + + }else{ int type_index = ((AVM2SourceGenerator) generator).resolveType(resname.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 (resname instanceof NameAVM2Item) { //TODO 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 1d565c5ae..ab5b929cb 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 @@ -52,6 +52,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -198,22 +199,36 @@ public class NameAVM2Item extends AssignableAVM2Item { } } - public static AVM2Instruction generateCoerce(SourceGenerator generator, String type) { + public static AVM2Instruction generateCoerce(SourceGenerator generator, GraphTargetItem ttype) { + if (ttype instanceof UnresolvedAVM2Item) { + ttype = ((UnresolvedAVM2Item) ttype).resolved; + } AVM2Instruction ins; - switch (type) { - case "int": - ins = ins(new ConvertIIns()); - break; - case "*": - ins = ins(new CoerceAIns()); - break; - case "String": - ins = ins(new CoerceSIns()); - break; - default: - int type_index = new TypeItem(type).resolveClass(((AVM2SourceGenerator) generator).abc); + if (ttype instanceof UnboundedTypeItem) { + ins = ins(new CoerceAIns()); + } else { + TypeItem type = (TypeItem) ttype; + + if (type.subtypes.isEmpty()) { + switch (type.fullTypeName) { + case "int": + ins = ins(new ConvertIIns()); + break; + case "*": + ins = ins(new CoerceAIns()); + break; + case "String": + ins = ins(new CoerceSIns()); + break; + default: + int type_index = type.resolveClass(((AVM2SourceGenerator) generator).abc); + ins = ins(new CoerceIns(), type_index); + break; + } + } else { + int type_index = type.resolveClass(((AVM2SourceGenerator) generator).abc); ins = ins(new CoerceIns(), type_index); - break; + } } return ins; } @@ -233,8 +248,8 @@ public class NameAVM2Item extends AssignableAVM2Item { if (variableName == null && ns != null && index != null) { if (assignedValue != null) { 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()), assignedValue, + ns, generateCoerce(generator, new TypeItem("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, new TypeItem("Namespace")), index, ins(new ConvertSIns()), assignedValue, needsReturn ? dupSetTemp(localData, generator, ret_temp) : null, ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), needsReturn ? getTemp(localData, generator, ret_temp) : null, @@ -242,8 +257,8 @@ public class NameAVM2Item extends AssignableAVM2Item { ); } 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)), + ns, generateCoerce(generator, new TypeItem("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, new TypeItem("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()), killTemp(localData, generator, Arrays.asList(ns_temp, index_temp, ret_temp)) ); @@ -252,8 +267,8 @@ public class NameAVM2Item extends AssignableAVM2Item { if (variableName != null && ns != null && index == null) { if (assignedValue != null) { 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"), assignedValue, + ns, generateCoerce(generator, new TypeItem("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, new TypeItem("Namespace")), assignedValue, needsReturn ? dupSetTemp(localData, generator, ret_temp) : null, ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(variableName, true), 0, 0, 0, new ArrayList()), true)), needsReturn ? getTemp(localData, generator, ret_temp) : null, @@ -261,8 +276,8 @@ public class NameAVM2Item extends AssignableAVM2Item { ); } 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)), + ns, generateCoerce(generator, new TypeItem("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, new TypeItem("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()), killTemp(localData, generator, Arrays.asList(ns_temp, index_temp, ret_temp)) ); @@ -292,7 +307,7 @@ public class NameAVM2Item extends AssignableAVM2Item { if (slotNumber > -1) { return toSourceMerge(localData, generator, ins(new GetScopeObjectIns(), slotScope), - assignedValue, !(("" + assignedValue.returnType()).equals("" + type) && (basicTypes.contains("" + type))) ? generateCoerce(generator, "" + type) : null, needsReturn + assignedValue, !(("" + assignedValue.returnType()).equals("" + type) && (basicTypes.contains("" + type))) ? generateCoerce(generator, type) : null, needsReturn ? dupSetTemp(localData, generator, ret_temp) : null, generateSetLoc(regNumber), slotNumber > -1 ? ins(new SetSlotIns(), slotNumber) : null, @@ -300,7 +315,7 @@ public class NameAVM2Item extends AssignableAVM2Item { killTemp(localData, generator, Arrays.asList(ret_temp))); } else { - return toSourceMerge(localData, generator, assignedValue, !(("" + assignedValue.returnType()).equals("" + type) && (basicTypes.contains("" + type))) ? generateCoerce(generator, "" + type) : null, needsReturn + return toSourceMerge(localData, generator, assignedValue, !(("" + assignedValue.returnType()).equals("" + type) && (basicTypes.contains("" + type))) ? generateCoerce(generator, type) : null, needsReturn ? ins(new DupIns()) : null, generateSetLoc(regNumber)); } } else { @@ -376,10 +391,10 @@ public class NameAVM2Item extends AssignableAVM2Item { if (variableName == null && ns != null && index != null) { return toSourceMerge(localData, generator, - ns, generateCoerce(generator, "Namespace"), index, ins(new ConvertSIns()), + ns, generateCoerce(generator, new TypeItem("Namespace")), index, ins(new ConvertSIns()), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), dupSetTemp(localData, generator, name_temp), - ns, generateCoerce(generator, "Namespace"), + ns, generateCoerce(generator, new TypeItem("Namespace")), dupSetTemp(localData, generator, ns_temp), //getTemp(localData, generator, ns_temp), generateCoerce(generator, "Namespace"), getTemp(localData, generator, index_temp), ins(new ConvertSIns()), //Start get original @@ -400,10 +415,10 @@ public class NameAVM2Item extends AssignableAVM2Item { } if (variableName != null && ns != null && index == null) { return toSourceMerge(localData, generator, - ns, generateCoerce(generator, "Namespace"), + ns, generateCoerce(generator, new TypeItem("Namespace")), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(variableName, true), 0, 0, 0, new ArrayList()), true)), dupSetTemp(localData, generator, name_temp), - ns, generateCoerce(generator, "Namespace"), + ns, generateCoerce(generator, new TypeItem("Namespace")), dupSetTemp(localData, generator, ns_temp), //Start get original //getTemp(localData, generator, ns_temp), 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)), 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 dfe9777a3..60713a5c9 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 @@ -94,7 +94,24 @@ public class PropertyAVM2Item extends AssignableAVM2Item { } private void resolve(SourceGeneratorLocalData localData, Reference objectType, Reference propertyType, Reference propertyIndex) { - String objType = object == null ? null : object.returnType().toString(); + String objType = null; + String objSubType = null; + if(object != null){ + GraphTargetItem oretType = object.returnType(); + if(oretType instanceof UnresolvedAVM2Item){ + UnresolvedAVM2Item ur=(UnresolvedAVM2Item)oretType; + oretType = ur.resolved; + } + if(oretType instanceof TypeItem){ + TypeItem t=(TypeItem)oretType; + objType = t.fullTypeName; + if(!t.subtypes.isEmpty()){ + objSubType = t.subtypes.get(0); + } + }else{ + objType = oretType.toString(); + } + } String propType = ""; int propIndex = 0; if (scopeStack.isEmpty()) { //Everything is multiname when with command @@ -225,6 +242,17 @@ public class PropertyAVM2Item extends AssignableAVM2Item { List abcs = new ArrayList<>(); abcs.add(abc); abcs.addAll(otherABCs); + if(objType.equals("__AS3__.vec.Vector")){ + if("int".equals(objSubType)){ + objType = "__AS3__.vec.Vector$int"; + }else if("Number".equals(objSubType)){ + objType = "__AS3__.vec.Vector$double"; + }else if("uint".equals(objSubType)){ + objType = "__AS3__.vec.Vector$uint"; + }else{ + objType = "__AS3__.vec.Vector$object"; + } + } loopa: for (ABC a : abcs) { for (InstanceInfo ii : a.instance_info) { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java index 87352de85..5d148499a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java @@ -38,6 +38,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.helpers.Helper; import java.util.ArrayList; import java.util.List; @@ -59,10 +60,11 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { private boolean mustBeType; public List importedClasses; public List scopeStack = new ArrayList(); + public List subtypes; @Override public AssignableAVM2Item copy() { - UnresolvedAVM2Item c = new UnresolvedAVM2Item(importedClasses, mustBeType, type, line, name, assignedValue, openedNamespaces); + UnresolvedAVM2Item c = new UnresolvedAVM2Item(subtypes, importedClasses, mustBeType, type, line, name, assignedValue, openedNamespaces); c.setNs(ns); c.nsKind = nsKind; c.setIndex(index); @@ -152,7 +154,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { return name; } - public UnresolvedAVM2Item(List importedClasses, boolean mustBeType, GraphTargetItem type, int line, String name, GraphTargetItem storeValue, List openedNamespaces) { + public UnresolvedAVM2Item(List subtypes, List importedClasses, boolean mustBeType, GraphTargetItem type, int line, String name, GraphTargetItem storeValue, List openedNamespaces) { super(storeValue); this.name = name; this.assignedValue = storeValue; @@ -161,6 +163,7 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { this.openedNamespaces = openedNamespaces; this.mustBeType = mustBeType; this.importedClasses = importedClasses; + this.subtypes = subtypes; } public boolean isDefinition() { @@ -342,6 +345,18 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { } if (impName.equals(parts.get(0))) { TypeItem ret = new TypeItem(imp); + for (String s : subtypes) { + if (!subtypes.isEmpty() && parts.size() > 1) { + continue; + } + UnresolvedAVM2Item su = new UnresolvedAVM2Item(new ArrayList(), importedClasses, true, null, line, s, null, openedNamespaces); + su.resolve(paramTypes, paramNames, abc, otherAbcs, callStack, variables); + if (!(su.resolved instanceof TypeItem)) { + throw new CompilationException("Not a type", line); + } + TypeItem st = (TypeItem) su.resolved; + ret.subtypes.add(st.fullTypeName); + } resolved = ret; for (int i = 1; i < parts.size(); i++) { resolved = new PropertyAVM2Item(resolved, parts.get(i), null, abc, otherAbcs, openedNamespaces, new ArrayList()); @@ -360,18 +375,70 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { } } - //Search for types in opened namespaces + //Search all fully qualitfied types List allAbcs = new ArrayList<>(); allAbcs.add(abc); allAbcs.addAll(otherAbcs); + for (int i = 0; i < parts.size(); i++) { + String fname = Helper.joinStrings(parts.subList(0, i + 1), "."); + for (ABC a : allAbcs) { + for (int c = 0; c < a.instance_info.size(); c++) { + if (fname.equals(a.instance_info.get(c).getName(a.constants).getNameWithNamespace(a.constants))) { + if (!subtypes.isEmpty() && parts.size() > i + 1) { + continue; + } + TypeItem ret = new TypeItem(fname); + for (String s : subtypes) { + UnresolvedAVM2Item su = new UnresolvedAVM2Item(new ArrayList(), importedClasses, true, null, line, s, null, openedNamespaces); + su.resolve(paramTypes, paramNames, abc, otherAbcs, callStack, variables); + if (!(su.resolved instanceof TypeItem)) { + throw new CompilationException("Not a type", line); + } + TypeItem st = (TypeItem) su.resolved; + ret.subtypes.add(st.fullTypeName); + } + resolved = ret; + for (int j = i + 1; j < parts.size(); j++) { + resolved = new PropertyAVM2Item(resolved, parts.get(j), null, abc, otherAbcs, openedNamespaces, new ArrayList()); + if (j == parts.size() - 1) { + ((PropertyAVM2Item) resolved).index = index; + ((PropertyAVM2Item) resolved).assignedValue = assignedValue; + } + } + if (parts.size() == i + 1 && index != null) { + throw new CompilationException("Types do not have indices", line); + } + if (parts.size() == i + 1 && assignedValue != null) { + throw new CompilationException("Cannot assign type", line); + } + + return ret; + } + } + } + } + + //Search for types in opened namespaces for (int ni : openedNamespaces) { - Namespace ons = abc.constants.getNamespace(ni); + Namespace ons = abc.constants.getNamespace(ni); for (ABC a : allAbcs) { for (int c = 0; c < a.instance_info.size(); c++) { if ((a == abc && a.instance_info.get(c).getName(a.constants).namespace_index == ni) || (ons.kind != Namespace.KIND_PRIVATE && a.instance_info.get(c).getName(a.constants).getNamespace(a.constants).hasName(ons.getName(abc.constants), a.constants))) { String cname = a.instance_info.get(c).getName(a.constants).getName(a.constants, new ArrayList()); - if (cname.equals(parts.get(0))) { + if (parts.get(0).equals(cname)) { + if (!subtypes.isEmpty() && parts.size() > 1) { + continue; + } TypeItem ret = new TypeItem(a.instance_info.get(c).getName(a.constants).getNameWithNamespace(a.constants)); + for (String s : subtypes) { + UnresolvedAVM2Item su = new UnresolvedAVM2Item(new ArrayList(), importedClasses, true, null, line, s, null, openedNamespaces); + su.resolve(paramTypes, paramNames, abc, otherAbcs, callStack, variables); + if (!(su.resolved instanceof TypeItem)) { + throw new CompilationException("Not a type", line); + } + TypeItem st = (TypeItem) su.resolved; + ret.subtypes.add(st.fullTypeName); + } resolved = ret; for (int i = 1; i < parts.size(); i++) { resolved = new PropertyAVM2Item(resolved, parts.get(i), null, abc, otherAbcs, openedNamespaces, new ArrayList()); @@ -413,6 +480,24 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { return ret; } + if(!subtypes.isEmpty() && parts.size()==1 && parts.get(0).equals("Vector")){ + TypeItem ret = new TypeItem("__AS3__.vec.Vector"); + for (String s : subtypes) { + UnresolvedAVM2Item su = new UnresolvedAVM2Item(new ArrayList(), importedClasses, true, null, line, s, null, openedNamespaces); + su.resolve(paramTypes, paramNames, abc, otherAbcs, callStack, variables); + if (!(su.resolved instanceof TypeItem)) { + throw new CompilationException("Not a type", line); + } + TypeItem st = (TypeItem) su.resolved; + ret.subtypes.add(st.fullTypeName); + } + resolved = ret; + return ret; + } + + if(mustBeType){ + throw new CompilationException("Not a type", line); + } resolved = null; GraphTargetItem ret = null; for (int i = 0; i < parts.size(); i++) { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex index 66cb87aaf..1c15946ef 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex @@ -105,7 +105,7 @@ Identifier = [:jletter:][:jletterdigit:]* IdentifierNs = {Identifier} ":" {Identifier} -TypeNameSpec = ".<" {Identifier} ">" +TypeNameSpec = ".<" /* XML */ XMLIdentifier = {Identifier} | {IdentifierNs} @@ -280,7 +280,7 @@ SingleCharacter = [^\r\n\'\\] {LineTerminator} { yyline++;} /* whitespace */ {WhiteSpace} { /*ignore*/ } - {TypeNameSpec} { String t=yytext(); return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,t.substring(2,t.length()-1)); } + {TypeNameSpec} { return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,yytext()); } {XMLBeginOneTag} {string.setLength(0); yybegin(XML); String s=yytext(); 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 4ce10ca19..84adb6748 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 @@ -1,6 +1,6 @@ TODO List for AS3 parser/compiler: ------------------------------ - E4X (XML) -- typenames (Vectors) - default xml namespace -- custom namespace modifiers \ No newline at end of file +- custom namespace modifiers +- fix setproperty, getproperty stats calculation (stack pos) \ No newline at end of file diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java index d046a018e..1c9d1c55e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java @@ -220,6 +220,7 @@ public class MethodBody implements Cloneable, Serializable { } public boolean autoFillStats(ABC abc, int initScope) { + //System.out.println("--------------"); CodeStats stats = code.getStats(abc, this, initScope); if (stats == null) { return false; diff --git a/trunk/src/com/jpexs/decompiler/graph/TypeItem.java b/trunk/src/com/jpexs/decompiler/graph/TypeItem.java index 1b8aad9e3..1120a9884 100644 --- a/trunk/src/com/jpexs/decompiler/graph/TypeItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/TypeItem.java @@ -23,7 +23,9 @@ import com.jpexs.decompiler.flash.abc.types.Namespace; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.decompiler.graph.model.UnboundedTypeItem; +import com.jpexs.helpers.Helper; import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -38,10 +40,16 @@ public class TypeItem extends GraphTargetItem { public static UnboundedTypeItem UNBOUNDED = new UnboundedTypeItem(); public String fullTypeName; + public List subtypes = new ArrayList<>(); - public TypeItem(String fullTypeName) { + public TypeItem(String fullTypeName){ + this(fullTypeName,new ArrayList()); + } + + public TypeItem(String fullTypeName,List subtypes) { super(null, NOPRECEDENCE); this.fullTypeName = fullTypeName; + this.subtypes.addAll(subtypes); } @Override @@ -84,12 +92,20 @@ public class TypeItem extends GraphTargetItem { @Override public String toString() { - return fullTypeName; + String add=""; + if(!subtypes.isEmpty()){ + add+=".<"; + add+=Helper.joinStrings(subtypes, ","); + add+=">"; + } + return fullTypeName+add; } + public int resolveClass(ABC abc) { String name = fullTypeName; String pkg = ""; + int name_index = 0; if (name.contains(".")) { pkg = name.substring(0, name.lastIndexOf('.')); name = name.substring(name.lastIndexOf('.') + 1); @@ -98,7 +114,8 @@ public class TypeItem extends GraphTargetItem { Multiname mname = abc.constants.constant_multiname.get(ii.name_index); if (mname.getName(abc.constants, new ArrayList()).equals(name)) { if (mname.getNamespace(abc.constants).hasName(pkg, abc.constants)) { - return ii.name_index; + name_index = ii.name_index; + break; } } } @@ -106,11 +123,22 @@ public class TypeItem extends GraphTargetItem { Multiname mname = abc.constants.constant_multiname.get(i); if (name.equals(mname.getName(abc.constants, new ArrayList()))) { if (pkg.equals(mname.getNamespace(abc.constants).getName(abc.constants))) { - return i; + name_index = i; + break; } } } - return abc.constants.getMultinameId(new Multiname(Multiname.QNAME, abc.constants.getStringId(name, true), abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(pkg, true)), 0, true), 0, 0, new ArrayList()), true); + if(name_index == 0){ + name_index = abc.constants.getMultinameId(new Multiname(Multiname.QNAME, abc.constants.getStringId(name, true), abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(pkg, true)), 0, true), 0, 0, new ArrayList()), true); + } + if(subtypes.isEmpty()){ + return name_index; + } + List params=new ArrayList<>(); + for(String s:subtypes){ + params.add(new TypeItem(s).resolveClass(abc)); + } + return abc.constants.getMultinameId(new Multiname(Multiname.TYPENAME,0,0,0,name_index,params),true); } }