{"version":3,"sources":["parser/decoder.ts"],"names":["CharStreams","CommonTokenStream","ASMLexer","ASMParser","ASTNodeFile","ASTNodeStatements","ASTNodeStatementInstruction","ASTNodeStatementBlock","ASTNodeStatementLine","ASTNodeArgumentString","ASTNodeArgumentNumber","ASTNodeArguments","ExceptionInternal","ExceptionSyntax","SourceFile","Parser","copySourceData","file","ast","ctx","src","source","start","stop","startLine","line","startColumn","charPositionInLine","startIndex","stopLine","stopColumn","stopIndex","ASMListenerFile","Object","constructor","sourceFile","enterFile","statementsListener","ASMListenerStatements","statements","enterRule","enterStatements","statementListener","ASMListenerStatement","statement","entries","enterStatement","instruction","orInstruction","block","orBlock","orLine","ctxIdentifier","identifier","argumentsListener","ASMListenerArguments","arguments","ctxComment","comment","text","push","ctxBegin","begin","ctxBeginId","ctxBeginComment","ctxEnd","end","ctxEndComment","enterArguments","argumentListener","ASMListenerArgument","arg","argument","enterArgument","argumentNumber","orArgumentNumber","argumentString","orArgumentString","ParserDecoder","syntaxErrors","reset","decode","code","name","inputStream","fromString","lexer","removeErrorListeners","addErrorListener","syntaxError","recognizer","offendingSymbol","msg","e","column","length","tokenStream","parser","fileListener"],"mappings":"AAAA;AAEA,SACCA,WADD,EAECC,iBAFD,QAIO,UAJP;AAMA,SAAQC,QAAR,QAAuB,uBAAvB;AACA,SACCC,SADD,QAYO,wBAZP;AAgBA,SAAQC,WAAR,QAA0B,sBAA1B;AACA,SAAQC,iBAAR,QAAgC,4BAAhC;AAEA,SAAQC,2BAAR,QAA0C,uCAA1C;AACA,SAAQC,qBAAR,QAAoC,iCAApC;AACA,SAAQC,oBAAR,QAAmC,gCAAnC;AAEA,SAAQC,qBAAR,QAAoC,iCAApC;AACA,SAAQC,qBAAR,QAAoC,iCAApC;AACA,SAAQC,gBAAR,QAA+B,2BAA/B,C,CACA;;AACA,SAAQC,iBAAR,QAAgC,2BAAhC;AACA,SAAQC,eAAR,QAA8B,yBAA9B;AACA,SAAQC,UAAR,QAAyB,mBAAzB;AAEA,SAAQC,MAAR,QAAqB,aAArB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASC,cAAT,CAAwBC,IAAxB,EAA0CC,GAA1C,EAAwDC,GAAxD,EAWG;AACF,QAAMC,GAAG,GAAGF,GAAG,CAACG,MAAhB;AACA,QAAM;AAACC,IAAAA,KAAD;AAAQC,IAAAA;AAAR,MAAgBJ,GAAtB;AAEAC,EAAAA,GAAG,CAACI,SAAJ,GAAgBF,KAAK,CAACG,IAAtB;AACAL,EAAAA,GAAG,CAACM,WAAJ,GAAkBJ,KAAK,CAACK,kBAAxB;AACAP,EAAAA,GAAG,CAACQ,UAAJ,GAAiBN,KAAK,CAACM,UAAvB;AAEAR,EAAAA,GAAG,CAACS,QAAJ,GAAeN,IAAI,GAAGA,IAAI,CAACE,IAAR,GAAeH,KAAK,CAACG,IAAxC;AACAL,EAAAA,GAAG,CAACU,UAAJ,GAAiBP,IAAI,GAAGA,IAAI,CAACI,kBAAR,GAA6BL,KAAK,CAACK,kBAAxD;AACAP,EAAAA,GAAG,CAACW,SAAJ,GAAgBR,IAAI,GAAGA,IAAI,CAACQ,SAAR,GAAoBT,KAAK,CAACS,SAA9C;AAEAX,EAAAA,GAAG,CAACH,IAAJ,GAAWA,IAAX;AACA;AAED;AACA;AACA;;;AACA,MAAMe,eAAN,SAA8BC,MAA9B,CAA4D;AAC3D;AACD;AACA;;AAGC;AACD;AACA;AAGCC,EAAAA,WAAW,GAAG;AACb;AADa,SAPPC,UAOO,GAPM,IAAIrB,UAAJ,CAAe,EAAf,CAON;AAAA,SAFPG,IAEO,GAFA,IAAIb,WAAJ,EAEA;AAEb;AAED;AACD;AACA;AACA;AACA;;;AACQgC,EAAAA,SAAS,CAACjB,GAAD,EAAmB;AAClCH,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkB,KAAKlB,IAAvB,EAA6BE,GAA7B,CAAd,CADkC,CAGlC;;AACA,UAAMkB,kBAAkB,GAAG,IAAIC,qBAAJ,EAA3B;AACAD,IAAAA,kBAAkB,CAACF,UAAnB,GAAgC,KAAKA,UAArC;AACAhB,IAAAA,GAAG,CAACoB,UAAJ,GAAiBC,SAAjB,CAA2BH,kBAA3B;AACA,SAAKpB,IAAL,CAAUsB,UAAV,GAAuBF,kBAAkB,CAACE,UAA1C;AACA;;AA5B0D;AA+B5D;AACA;AACA;;;AACA,MAAMD,qBAAN,SAAoCL,MAApC,CAAkE;AACjE;AACD;AACA;;AAGC;AACD;AACA;AAGCC,EAAAA,WAAW,GAAG;AACb;AADa,SAPPC,UAOO,GAPM,IAAIrB,UAAJ,CAAe,EAAf,CAON;AAAA,SAFPyB,UAEO,GAFM,IAAIlC,iBAAJ,EAEN;AAEb;AAED;AACD;AACA;AACA;AACA;;;AACQoC,EAAAA,eAAe,CAACtB,GAAD,EAAyB;AAC9CH,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkB,KAAKI,UAAvB,EAAmCpB,GAAnC,CAAd,CAD8C,CAG9C;;AACA,UAAMuB,iBAAiB,GAAG,IAAIC,oBAAJ,EAA1B;AACAD,IAAAA,iBAAiB,CAACP,UAAlB,GAA+B,KAAKA,UAApC;;AACA,SAAK,MAAMS,SAAX,IAAwBzB,GAAG,CAACyB,SAAJ,EAAxB,EAAyC;AACxCA,MAAAA,SAAS,CAACJ,SAAV,CAAoBE,iBAApB;AACA;;AACD,SAAKH,UAAL,CAAgBM,OAAhB,GAA0BH,iBAAiB,CAACH,UAA5C;AACA;;AA9BgE;AAiClE;AACA;AACA;;;AACA,MAAMI,oBAAN,SAAmCV,MAAnC,CAAiE;AAChE;AACD;AACA;;AAGC;AACD;AACA;AAGCC,EAAAA,WAAW,GAAG;AACb;AADa,SAPPC,UAOO,GAPM,IAAIrB,UAAJ,CAAe,EAAf,CAON;AAAA,SAFPyB,UAEO,GAF0B,EAE1B;AAEb;AAED;AACD;AACA;AACA;AACA;;;AACQO,EAAAA,cAAc,CAAC3B,GAAD,EAAwB;AAC5C,UAAM4B,WAAW,GAAG5B,GAAG,CAAC4B,WAAJ,EAApB;;AACA,QAAIA,WAAJ,EAAiB;AAChB,WAAKC,aAAL,CAAmBD,WAAnB;AACA;AACA;;AAED,UAAME,KAAK,GAAG9B,GAAG,CAAC8B,KAAJ,EAAd;;AACA,QAAIA,KAAJ,EAAW;AACV,WAAKC,OAAL,CAAaD,KAAb;AACA;AACA;;AAED,UAAMxB,IAAI,GAAGN,GAAG,CAACM,IAAJ,EAAb;;AACA,QAAIA,IAAJ,EAAU;AACT,WAAK0B,MAAL,CAAY1B,IAAZ;AACA;AACA,KAjB2C,CAmB5C;;;AACA,UAAM,IAAIb,iBAAJ,CAAsB,yCAAtB,CAAN;AACA;AAED;AACD;AACA;AACA;AACA;;;AACQoC,EAAAA,aAAa,CAAC7B,GAAD,EAA0B;AAC7C,UAAMiC,aAAa,GAAGjC,GAAG,CAACkC,UAAJ,EAAtB,CAD6C,CAE7C;;AACA,UAAMC,iBAAiB,GAAG,IAAIC,oBAAJ,EAA1B;AACAD,IAAAA,iBAAiB,CAACnB,UAAlB,GAA+B,KAAKA,UAApC;AACAhB,IAAAA,GAAG,CAACqC,SAAJ,GAAgBhB,SAAhB,CAA0Bc,iBAA1B;AACA,UAAMG,UAAU,GAAGtC,GAAG,CAACuC,OAAJ,EAAnB;AAEA,UAAMX,WAAW,GAAG,IAAIzC,2BAAJ,EAApB;AACAU,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBY,WAAlB,EAA+B5B,GAA/B,CAAd;AAEA4B,IAAAA,WAAW,CAACM,UAAZ,CAAuBM,IAAvB,GAA8BP,aAAa,CAACO,IAA5C;AACA3C,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBY,WAAW,CAACM,UAA9B,EAA0CD,aAA1C,CAAd;AAEAL,IAAAA,WAAW,CAACS,SAAZ,GAAwBF,iBAAiB,CAACE,SAA1C;AAEAT,IAAAA,WAAW,CAACW,OAAZ,CAAoBC,IAApB,GAA2BF,UAAU,CAACE,IAAtC;AACA3C,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBY,WAAW,CAACW,OAA9B,EAAuCD,UAAvC,CAAd;AAEA,SAAKlB,UAAL,CAAgBqB,IAAhB,CAAqBb,WAArB;AACA;AAED;AACD;AACA;AACA;AACA;;;AACQG,EAAAA,OAAO,CAAC/B,GAAD,EAAoB;AACjC,UAAM0C,QAAQ,GAAG1C,GAAG,CAAC2C,KAAJ,EAAjB;AACA,UAAMC,UAAU,GAAGF,QAAQ,CAACR,UAAT,EAAnB,CAFiC,CAGjC;;AACA,UAAMC,iBAAiB,GAAG,IAAIC,oBAAJ,EAA1B;AACAD,IAAAA,iBAAiB,CAACnB,UAAlB,GAA+B,KAAKA,UAApC;AACA0B,IAAAA,QAAQ,CAACL,SAAT,GAAqBhB,SAArB,CAA+Bc,iBAA/B;AACA,UAAMU,eAAe,GAAGH,QAAQ,CAACH,OAAT,EAAxB;AAEA,UAAMO,MAAM,GAAG9C,GAAG,CAAC+C,GAAJ,EAAf;AACA,UAAMC,aAAa,GAAGF,MAAM,CAACP,OAAP,EAAtB;AAEA,UAAMrB,kBAAkB,GAAG,IAAIC,qBAAJ,EAA3B;AACAD,IAAAA,kBAAkB,CAACF,UAAnB,GAAgC,KAAKA,UAArC;AACAhB,IAAAA,GAAG,CAACoB,UAAJ,GAAiBC,SAAjB,CAA2BH,kBAA3B;AAEA,UAAMY,KAAK,GAAG,IAAI1C,qBAAJ,EAAd;AACAS,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBc,KAAlB,EAAyB9B,GAAzB,CAAd;AAEAH,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBc,KAAK,CAACa,KAAxB,EAA+BD,QAA/B,CAAd;AAEAZ,IAAAA,KAAK,CAACa,KAAN,CAAYT,UAAZ,CAAuBM,IAAvB,GAA8BI,UAAU,CAACJ,IAAzC;AACA3C,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBc,KAAK,CAACa,KAAN,CAAYT,UAA9B,EAA0CU,UAA1C,CAAd;AAEAd,IAAAA,KAAK,CAACa,KAAN,CAAYN,SAAZ,GAAwBF,iBAAiB,CAACE,SAA1C;AAEAP,IAAAA,KAAK,CAACa,KAAN,CAAYJ,OAAZ,CAAoBC,IAApB,GAA2BK,eAAe,CAACL,IAA3C;AACA3C,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBc,KAAK,CAACa,KAAN,CAAYJ,OAA9B,EAAuCM,eAAvC,CAAd;AAEAhD,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBc,KAAK,CAACiB,GAAxB,EAA6BD,MAA7B,CAAd;AAEAhB,IAAAA,KAAK,CAACiB,GAAN,CAAUR,OAAV,CAAkBC,IAAlB,GAAyBQ,aAAa,CAACR,IAAvC;AACA3C,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBc,KAAK,CAACiB,GAAN,CAAUR,OAA5B,EAAqCS,aAArC,CAAd;AAEAlB,IAAAA,KAAK,CAACV,UAAN,GAAmBF,kBAAkB,CAACE,UAAtC;AACA,SAAKA,UAAL,CAAgBqB,IAAhB,CAAqBX,KAArB;AACA;AAED;AACD;AACA;AACA;AACA;;;AACQE,EAAAA,MAAM,CAAChC,GAAD,EAAmB;AAC/B,UAAMsC,UAAU,GAAGtC,GAAG,CAACuC,OAAJ,EAAnB;AAEA,UAAMjC,IAAI,GAAG,IAAIjB,oBAAJ,EAAb;AACAQ,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBV,IAAlB,EAAwBN,GAAxB,CAAd;AAEAM,IAAAA,IAAI,CAACiC,OAAL,CAAaC,IAAb,GAAoBF,UAAU,CAACE,IAA/B;AACA3C,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBV,IAAI,CAACiC,OAAvB,EAAgCD,UAAhC,CAAd;AAEA,SAAKlB,UAAL,CAAgBqB,IAAhB,CAAqBnC,IAArB;AACA;;AAhI+D;AAmIjE;AACA;AACA;;;AACA,MAAM8B,oBAAN,SAAmCtB,MAAnC,CAAiE;AAChE;AACD;AACA;;AAGC;AACD;AACA;AAGCC,EAAAA,WAAW,GAAG;AACb;AADa,SAPPC,UAOO,GAPM,IAAIrB,UAAJ,CAAe,EAAf,CAON;AAAA,SAFP0C,SAEO,GAFK,IAAI7C,gBAAJ,EAEL;AAEb;AAED;AACD;AACA;AACA;AACA;;;AACQyD,EAAAA,cAAc,CAACjD,GAAD,EAAwB;AAC5CH,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkB,KAAKqB,SAAvB,EAAkCrC,GAAlC,CAAd,CAD4C,CAE5C;;AACA,UAAMkD,gBAAgB,GAAG,IAAIC,mBAAJ,EAAzB;AACAD,IAAAA,gBAAgB,CAAClC,UAAjB,GAA8B,KAAKA,UAAnC;;AACA,SAAK,MAAMoC,GAAX,IAAkBpD,GAAG,CAACqD,QAAJ,EAAlB,EAAkC;AACjCD,MAAAA,GAAG,CAAC/B,SAAJ,CAAc6B,gBAAd;AACA;;AACD,SAAKb,SAAL,CAAeX,OAAf,GAAyBwB,gBAAgB,CAACb,SAA1C;AACA;;AA7B+D;AAgCjE;AACA;AACA;;;AACA,MAAMc,mBAAN,SAAkCrC,MAAlC,CAAgE;AAC/D;AACD;AACA;;AAGC;AACD;AACA;AAGCC,EAAAA,WAAW,GAAG;AACb;AADa,SAPPC,UAOO,GAPM,IAAIrB,UAAJ,CAAe,EAAf,CAON;AAAA,SAFP0C,SAEO,GAFwB,EAExB;AAEb;AAED;AACD;AACA;AACA;AACA;;;AACQiB,EAAAA,aAAa,CAACtD,GAAD,EAAuB;AAC1C,UAAMuD,cAAc,GAAGvD,GAAG,CAACuD,cAAJ,EAAvB;;AACA,QAAIA,cAAJ,EAAoB;AACnB,WAAKC,gBAAL,CAAsBD,cAAtB;AACA;AACA;;AAED,UAAME,cAAc,GAAGzD,GAAG,CAACyD,cAAJ,EAAvB;;AACA,QAAIA,cAAJ,EAAoB;AACnB,WAAKC,gBAAL,CAAsBD,cAAtB;AACA;AACA,KAXyC,CAa1C;;;AACA,UAAM,IAAIhE,iBAAJ,CAAsB,wCAAtB,CAAN;AACA;AAED;AACD;AACA;AACA;AACA;;;AACQ+D,EAAAA,gBAAgB,CAACxD,GAAD,EAA6B;AACnD,UAAMoD,GAAG,GAAG,IAAI7D,qBAAJ,EAAZ;AACAM,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBoC,GAAlB,EAAuBpD,GAAvB,CAAd;AACAoD,IAAAA,GAAG,CAACZ,IAAJ,GAAWxC,GAAG,CAACwC,IAAf;AACA,SAAKH,SAAL,CAAeI,IAAf,CAAoBW,GAApB;AACA;AAED;AACD;AACA;AACA;AACA;;;AACQM,EAAAA,gBAAgB,CAAC1D,GAAD,EAA6B;AACnD,UAAMoD,GAAG,GAAG,IAAI9D,qBAAJ,EAAZ;AACAO,IAAAA,cAAc,CAAC,KAAKmB,UAAN,EAAkBoC,GAAlB,EAAuBpD,GAAvB,CAAd;AACAoD,IAAAA,GAAG,CAACZ,IAAJ,GAAWxC,GAAG,CAACwC,IAAf;AACA,SAAKH,SAAL,CAAeI,IAAf,CAAoBW,GAApB;AACA;;AA3D8D;AA8DhE;AACA;AACA;;;AACA,OAAO,MAAMO,aAAN,SAA4B/D,MAA5B,CAAmC;AACzC;AACD;AACA;AAGCmB,EAAAA,WAAW,GAAG;AACb;AADa,SAFP6C,YAEO,GAF2B,EAE3B;AAEb;AAED;AACD;AACA;;;AACQC,EAAAA,KAAK,GAAG;AACd,SAAKD,YAAL,GAAoB,EAApB;AACA;AAED;AACD;AACA;AACA;AACA;AACA;AACA;;;AACQE,EAAAA,MAAM,CAACC,IAAD,EAAeC,IAAI,GAAG,EAAtB,EAA0B;AACtC,UAAMhD,UAAU,GAAG,IAAIrB,UAAJ,CAAeoE,IAAf,EAAqBC,IAArB,CAAnB;AAEA,UAAMC,WAAW,GAAGpF,WAAW,CAACqF,UAAZ,CAAuBH,IAAvB,EAA6BC,IAA7B,CAApB;AAEA,UAAMG,KAAK,GAAG,IAAIpF,QAAJ,CAAakF,WAAb,CAAd;AACAE,IAAAA,KAAK,CAACC,oBAAN;AACAD,IAAAA,KAAK,CAACE,gBAAN,CAAuB;AACtBC,MAAAA,WAAW,EAAE,CACZC,UADY,EAEZC,eAFY,EAGZlE,IAHY,EAIZE,kBAJY,EAKZiE,GALY,EAMZC,CANY,KAOR;AACJ,cAAMC,MAAM,GAAGnE,kBAAkB,GAAG,CAApC;AACA,aAAKoD,YAAL,CAAkBnB,IAAlB,CACC,IAAI/C,eAAJ,CAAoB+E,GAApB,EAAyBzD,UAAzB,EAAqCV,IAArC,EAA2CqE,MAA3C,CADD;AAGA;AAbqB,KAAvB,EAPsC,CAuBtC;;AACA,QAAI,KAAKf,YAAL,CAAkBgB,MAAtB,EAA8B;AAC7B,YAAM,KAAKhB,YAAL,CAAkB,CAAlB,CAAN;AACA;;AAED,UAAMiB,WAAW,GAAG,IAAI/F,iBAAJ,CAAsBqF,KAAtB,CAApB;AAEA,UAAMW,MAAM,GAAG,IAAI9F,SAAJ,CAAc6F,WAAd,CAAf;AACAC,IAAAA,MAAM,CAACV,oBAAP;AACAU,IAAAA,MAAM,CAACT,gBAAP,CAAwB;AACvBC,MAAAA,WAAW,EAAE,CACZC,UADY,EAEZC,eAFY,EAGZlE,IAHY,EAIZE,kBAJY,EAKZiE,GALY,EAMZC,CANY,KAOR;AACJ,cAAMC,MAAM,GAAGnE,kBAAkB,GAAG,CAApC;AACA,aAAKoD,YAAL,CAAkBnB,IAAlB,CACC,IAAI/C,eAAJ,CAAoB+E,GAApB,EAAyBzD,UAAzB,EAAqCV,IAArC,EAA2CqE,MAA3C,CADD;AAGA;AAbsB,KAAxB,EAhCsC,CAgDtC;;AACA,QAAI,KAAKf,YAAL,CAAkBgB,MAAtB,EAA8B;AAC7B,YAAM,KAAKhB,YAAL,CAAkB,CAAlB,CAAN;AACA,KAnDqC,CAqDtC;;;AACA,UAAM9D,IAAI,GAAGgF,MAAM,CAAChF,IAAP,EAAb,CAtDsC,CAwDtC;;AACA,QAAI,KAAK8D,YAAL,CAAkBgB,MAAtB,EAA8B;AAC7B,YAAM,KAAKhB,YAAL,CAAkB,CAAlB,CAAN;AACA,KA3DqC,CA6DtC;;;AACA,UAAMmB,YAAY,GAAG,IAAIlE,eAAJ,EAArB;AACAkE,IAAAA,YAAY,CAAC/D,UAAb,GAA0BA,UAA1B;AACAlB,IAAAA,IAAI,CAACuB,SAAL,CAAe0D,YAAf;AACA,WAAOA,YAAY,CAACjF,IAApB;AACA;;AA1FwC","sourcesContent":["/* eslint-disable max-classes-per-file */\n\nimport {\n\tCharStreams,\n\tCommonTokenStream,\n\tToken\n} from 'antlr4ts';\n\nimport {ASMLexer} from '../antlr/ASMLexer';\nimport {\n\tASMParser,\n\tFileContext,\n\tStatementsContext,\n\tStatementContext,\n\tInstructionContext,\n\tBlockContext,\n\tLineContext,\n\tArgumentsContext,\n\tArgumentContext,\n\tArgumentNumberContext,\n\tArgumentStringContext\n} from '../antlr/ASMParser';\nimport {ASMListener} from '../antlr/ASMListener';\n//\nimport {ASTNode} from '../ast/node/class';\nimport {ASTNodeFile} from '../ast/node/file';\nimport {ASTNodeStatements} from '../ast/node/statements';\nimport {ASTNodeStatement} from '../ast/node/statement/class';\nimport {ASTNodeStatementInstruction} from '../ast/node/statement/instruction';\nimport {ASTNodeStatementBlock} from '../ast/node/statement/block';\nimport {ASTNodeStatementLine} from '../ast/node/statement/line';\nimport {ASTNodeArgument} from '../ast/node/argument/class';\nimport {ASTNodeArgumentString} from '../ast/node/argument/string';\nimport {ASTNodeArgumentNumber} from '../ast/node/argument/number';\nimport {ASTNodeArguments} from '../ast/node/arguments';\n//\nimport {ExceptionInternal} from '../exception/internal';\nimport {ExceptionSyntax} from '../exception/syntax';\nimport {SourceFile} from '../sourcefile';\n\nimport {Parser} from './class';\n\n/**\n * Copy position from context to an AST node.\n *\n * @param file Source file.\n * @param ast AST node.\n * @param ctx Antlr context.\n * @param ctx.start Start token.\n * @param ctx.stop Stop token.\n */\nfunction copySourceData(file: SourceFile, ast: ASTNode, ctx: {\n\n\t/**\n\t * Start token.\n\t */\n\tstart: Token;\n\n\t/**\n\t * Stop token.\n\t */\n\tstop?: Token;\n}) {\n\tconst src = ast.source;\n\tconst {start, stop} = ctx;\n\n\tsrc.startLine = start.line;\n\tsrc.startColumn = start.charPositionInLine;\n\tsrc.startIndex = start.startIndex;\n\n\tsrc.stopLine = stop ? stop.line : start.line;\n\tsrc.stopColumn = stop ? stop.charPositionInLine : start.charPositionInLine;\n\tsrc.stopIndex = stop ? stop.stopIndex : start.stopIndex;\n\n\tsrc.file = file;\n}\n\n/**\n * File listener.\n */\nclass ASMListenerFile extends Object implements ASMListener {\n\t/**\n\t * Source file.\n\t */\n\tpublic sourceFile = new SourceFile('');\n\n\t/**\n\t * File object.\n\t */\n\tpublic file = new ASTNodeFile();\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * File context handler.\n\t *\n\t * @param ctx Context.\n\t */\n\tpublic enterFile(ctx: FileContext) {\n\t\tcopySourceData(this.sourceFile, this.file, ctx);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst statementsListener = new ASMListenerStatements();\n\t\tstatementsListener.sourceFile = this.sourceFile;\n\t\tctx.statements().enterRule(statementsListener);\n\t\tthis.file.statements = statementsListener.statements;\n\t}\n}\n\n/**\n * Statements listener.\n */\nclass ASMListenerStatements extends Object implements ASMListener {\n\t/**\n\t * Source file.\n\t */\n\tpublic sourceFile = new SourceFile('');\n\n\t/**\n\t * Statements collection.\n\t */\n\tpublic statements = new ASTNodeStatements();\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Statements context handler.\n\t *\n\t * @param ctx Context.\n\t */\n\tpublic enterStatements(ctx: StatementsContext) {\n\t\tcopySourceData(this.sourceFile, this.statements, ctx);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst statementListener = new ASMListenerStatement();\n\t\tstatementListener.sourceFile = this.sourceFile;\n\t\tfor (const statement of ctx.statement()) {\n\t\t\tstatement.enterRule(statementListener);\n\t\t}\n\t\tthis.statements.entries = statementListener.statements;\n\t}\n}\n\n/**\n * Statement listener.\n */\nclass ASMListenerStatement extends Object implements ASMListener {\n\t/**\n\t * Source file.\n\t */\n\tpublic sourceFile = new SourceFile('');\n\n\t/**\n\t * Statement list.\n\t */\n\tpublic statements: ASTNodeStatement[] = [];\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Statement context handler.\n\t *\n\t * @param ctx Context.\n\t */\n\tpublic enterStatement(ctx: StatementContext) {\n\t\tconst instruction = ctx.instruction();\n\t\tif (instruction) {\n\t\t\tthis.orInstruction(instruction);\n\t\t\treturn;\n\t\t}\n\n\t\tconst block = ctx.block();\n\t\tif (block) {\n\t\t\tthis.orBlock(block);\n\t\t\treturn;\n\t\t}\n\n\t\tconst line = ctx.line();\n\t\tif (line) {\n\t\t\tthis.orLine(line);\n\t\t\treturn;\n\t\t}\n\n\t\t// Should never reach this unless out of sync with grammar.\n\t\tthrow new ExceptionInternal('Unhandled antlr StatementContext option');\n\t}\n\n\t/**\n\t * Handle instruction context.\n\t *\n\t * @param ctx Context.\n\t */\n\tpublic orInstruction(ctx: InstructionContext) {\n\t\tconst ctxIdentifier = ctx.identifier();\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst argumentsListener = new ASMListenerArguments();\n\t\targumentsListener.sourceFile = this.sourceFile;\n\t\tctx.arguments().enterRule(argumentsListener);\n\t\tconst ctxComment = ctx.comment();\n\n\t\tconst instruction = new ASTNodeStatementInstruction();\n\t\tcopySourceData(this.sourceFile, instruction, ctx);\n\n\t\tinstruction.identifier.text = ctxIdentifier.text;\n\t\tcopySourceData(this.sourceFile, instruction.identifier, ctxIdentifier);\n\n\t\tinstruction.arguments = argumentsListener.arguments;\n\n\t\tinstruction.comment.text = ctxComment.text;\n\t\tcopySourceData(this.sourceFile, instruction.comment, ctxComment);\n\n\t\tthis.statements.push(instruction);\n\t}\n\n\t/**\n\t * Handle block context.\n\t *\n\t * @param ctx Context.\n\t */\n\tpublic orBlock(ctx: BlockContext) {\n\t\tconst ctxBegin = ctx.begin();\n\t\tconst ctxBeginId = ctxBegin.identifier();\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst argumentsListener = new ASMListenerArguments();\n\t\targumentsListener.sourceFile = this.sourceFile;\n\t\tctxBegin.arguments().enterRule(argumentsListener);\n\t\tconst ctxBeginComment = ctxBegin.comment();\n\n\t\tconst ctxEnd = ctx.end();\n\t\tconst ctxEndComment = ctxEnd.comment();\n\n\t\tconst statementsListener = new ASMListenerStatements();\n\t\tstatementsListener.sourceFile = this.sourceFile;\n\t\tctx.statements().enterRule(statementsListener);\n\n\t\tconst block = new ASTNodeStatementBlock();\n\t\tcopySourceData(this.sourceFile, block, ctx);\n\n\t\tcopySourceData(this.sourceFile, block.begin, ctxBegin);\n\n\t\tblock.begin.identifier.text = ctxBeginId.text;\n\t\tcopySourceData(this.sourceFile, block.begin.identifier, ctxBeginId);\n\n\t\tblock.begin.arguments = argumentsListener.arguments;\n\n\t\tblock.begin.comment.text = ctxBeginComment.text;\n\t\tcopySourceData(this.sourceFile, block.begin.comment, ctxBeginComment);\n\n\t\tcopySourceData(this.sourceFile, block.end, ctxEnd);\n\n\t\tblock.end.comment.text = ctxEndComment.text;\n\t\tcopySourceData(this.sourceFile, block.end.comment, ctxEndComment);\n\n\t\tblock.statements = statementsListener.statements;\n\t\tthis.statements.push(block);\n\t}\n\n\t/**\n\t * Handle line context.\n\t *\n\t * @param ctx Context.\n\t */\n\tpublic orLine(ctx: LineContext) {\n\t\tconst ctxComment = ctx.comment();\n\n\t\tconst line = new ASTNodeStatementLine();\n\t\tcopySourceData(this.sourceFile, line, ctx);\n\n\t\tline.comment.text = ctxComment.text;\n\t\tcopySourceData(this.sourceFile, line.comment, ctxComment);\n\n\t\tthis.statements.push(line);\n\t}\n}\n\n/**\n * Arguments listener.\n */\nclass ASMListenerArguments extends Object implements ASMListener {\n\t/**\n\t * Source file.\n\t */\n\tpublic sourceFile = new SourceFile('');\n\n\t/**\n\t * Arguments collection.\n\t */\n\tpublic arguments = new ASTNodeArguments();\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Arguments context handler.\n\t *\n\t * @param ctx Context.\n\t */\n\tpublic enterArguments(ctx: ArgumentsContext) {\n\t\tcopySourceData(this.sourceFile, this.arguments, ctx);\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst argumentListener = new ASMListenerArgument();\n\t\targumentListener.sourceFile = this.sourceFile;\n\t\tfor (const arg of ctx.argument()) {\n\t\t\targ.enterRule(argumentListener);\n\t\t}\n\t\tthis.arguments.entries = argumentListener.arguments;\n\t}\n}\n\n/**\n * Argument listener.\n */\nclass ASMListenerArgument extends Object implements ASMListener {\n\t/**\n\t * Source file.\n\t */\n\tpublic sourceFile = new SourceFile('');\n\n\t/**\n\t * Argument list.\n\t */\n\tpublic arguments: ASTNodeArgument[] = [];\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Argument context handler.\n\t *\n\t * @param ctx Context.\n\t */\n\tpublic enterArgument(ctx: ArgumentContext) {\n\t\tconst argumentNumber = ctx.argumentNumber();\n\t\tif (argumentNumber) {\n\t\t\tthis.orArgumentNumber(argumentNumber);\n\t\t\treturn;\n\t\t}\n\n\t\tconst argumentString = ctx.argumentString();\n\t\tif (argumentString) {\n\t\t\tthis.orArgumentString(argumentString);\n\t\t\treturn;\n\t\t}\n\n\t\t// Should never reach this unless out of sync with grammar.\n\t\tthrow new ExceptionInternal('Unhandled antlr ArgumentContext option');\n\t}\n\n\t/**\n\t * Handle argument number context.\n\t *\n\t * @param ctx Context.\n\t */\n\tpublic orArgumentNumber(ctx: ArgumentNumberContext) {\n\t\tconst arg = new ASTNodeArgumentNumber();\n\t\tcopySourceData(this.sourceFile, arg, ctx);\n\t\targ.text = ctx.text;\n\t\tthis.arguments.push(arg);\n\t}\n\n\t/**\n\t * Handle argument string context.\n\t *\n\t * @param ctx Context.\n\t */\n\tpublic orArgumentString(ctx: ArgumentStringContext) {\n\t\tconst arg = new ASTNodeArgumentString();\n\t\tcopySourceData(this.sourceFile, arg, ctx);\n\t\targ.text = ctx.text;\n\t\tthis.arguments.push(arg);\n\t}\n}\n\n/**\n * ParserDecoder constructor.\n */\nexport class ParserDecoder extends Parser {\n\t/**\n\t * Syntax errors since the last reset.\n\t */\n\tpublic syntaxErrors: ExceptionSyntax[] = [];\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Reset any stateful properties.\n\t */\n\tpublic reset() {\n\t\tthis.syntaxErrors = [];\n\t}\n\n\t/**\n\t * Parse and decode ASM to AST.\n\t *\n\t * @param code Assembly code.\n\t * @param name Optional source file name used in the AST.\n\t * @returns The AST instance and any errors.\n\t */\n\tpublic decode(code: string, name = '') {\n\t\tconst sourceFile = new SourceFile(code, name);\n\n\t\tconst inputStream = CharStreams.fromString(code, name);\n\n\t\tconst lexer = new ASMLexer(inputStream);\n\t\tlexer.removeErrorListeners();\n\t\tlexer.addErrorListener({\n\t\t\tsyntaxError: (\n\t\t\t\trecognizer,\n\t\t\t\toffendingSymbol,\n\t\t\t\tline,\n\t\t\t\tcharPositionInLine,\n\t\t\t\tmsg,\n\t\t\t\te\n\t\t\t) => {\n\t\t\t\tconst column = charPositionInLine + 1;\n\t\t\t\tthis.syntaxErrors.push(\n\t\t\t\t\tnew ExceptionSyntax(msg, sourceFile, line, column)\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// If syntax errors, throw first one.\n\t\tif (this.syntaxErrors.length) {\n\t\t\tthrow this.syntaxErrors[0];\n\t\t}\n\n\t\tconst tokenStream = new CommonTokenStream(lexer);\n\n\t\tconst parser = new ASMParser(tokenStream);\n\t\tparser.removeErrorListeners();\n\t\tparser.addErrorListener({\n\t\t\tsyntaxError: (\n\t\t\t\trecognizer,\n\t\t\t\toffendingSymbol,\n\t\t\t\tline,\n\t\t\t\tcharPositionInLine,\n\t\t\t\tmsg,\n\t\t\t\te\n\t\t\t) => {\n\t\t\t\tconst column = charPositionInLine + 1;\n\t\t\t\tthis.syntaxErrors.push(\n\t\t\t\t\tnew ExceptionSyntax(msg, sourceFile, line, column)\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// If syntax errors, throw first one.\n\t\tif (this.syntaxErrors.length) {\n\t\t\tthrow this.syntaxErrors[0];\n\t\t}\n\n\t\t// Trigger parsing, may cause syntax errors.\n\t\tconst file = parser.file();\n\n\t\t// If syntax errors, throw first one.\n\t\tif (this.syntaxErrors.length) {\n\t\t\tthrow this.syntaxErrors[0];\n\t\t}\n\n\t\t// File parsed without errors, create AST.\n\t\tconst fileListener = new ASMListenerFile();\n\t\tfileListener.sourceFile = sourceFile;\n\t\tfile.enterRule(fileListener);\n\t\treturn fileListener.file;\n\t}\n}\n"],"file":"decoder.mjs","sourceRoot":"../../src"}