{"version":3,"sources":["parser/encoder.ts"],"names":["utilStringRepeat","utilStringPadRight","typed","ExceptionInternal","ASTNodeStatementInstruction","ASTNodeStatementBlock","ASTNodeStatementLine","Parser","ParserEncoder","constructor","optionIndentSize","optionIndentTab","optionInstructionsArgumentsAlign","optionInstructionsCommentsAlign","_instructionAlignStack","reset","indentString","char","size","encode","ast","encodeStatements","statements","depth","alignArguments","alignComments","argCol","comCol","idLenMax","argLenMax","idArgLenMax","statement","entries","instruction","cast","id","encodeIdentifier","identifier","args","encodeArguments","arguments","idArgs","_align","Math","max","length","push","r","map","e","encodeStatement","join","pop","encodeStatementInstruction","block","encodeStatementBlock","line","encodeStatementLine","stack","stackSize","encodeComment","comment","_line","encodeBegin","begin","encodeEnd","end","text","encodeArgument","str","add","column","empty","_indent"],"mappings":"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","sourcesContent":["import {\n\tutilStringRepeat,\n\tutilStringPadRight\n} from '@sage-js/core';\n\nimport {typed} from '../typed';\nimport {ExceptionInternal} from '../exception/internal';\nimport {ASTNodeIdentifier} from '../ast/node/identifier';\nimport {ASTNodeArguments} from '../ast/node/arguments';\nimport {ASTNodeArgument} from '../ast/node/argument/class';\nimport {ASTNodeComment} from '../ast/node/comment';\nimport {ASTNodeBegin} from '../ast/node/begin';\nimport {ASTNodeEnd} from '../ast/node/end';\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';\n\nimport {Parser} from './class';\n\n/**\n * ParserEncoder constructor.\n */\nexport class ParserEncoder extends Parser {\n\t/**\n\t * Indent size.\n\t */\n\tpublic optionIndentSize = 1;\n\n\t/**\n\t * Indent with tab instead of space.\n\t */\n\tpublic optionIndentTab = true;\n\n\t/**\n\t * Align instructions arguments column.\n\t */\n\tpublic optionInstructionsArgumentsAlign = true;\n\n\t/**\n\t * Align instructions comments column.\n\t */\n\tpublic optionInstructionsCommentsAlign = true;\n\n\t/**\n\t * Stack of instruction alignments.\n\t */\n\tprotected _instructionAlignStack: number[][] = [];\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._instructionAlignStack = [];\n\t}\n\n\t/**\n\t * Get the indent string.\n\t *\n\t * @returns Indent string.\n\t */\n\tpublic get indentString() {\n\t\tconst char = this.optionIndentTab ? '\\t' : ' ';\n\t\tconst size = this.optionIndentSize;\n\t\treturn size > 1 ? utilStringRepeat(char, size) : char;\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @returns ASM code.\n\t */\n\tpublic encode(ast: ASTNodeFile) {\n\t\treturn this.encodeStatements(ast.statements);\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @param depth Indent depth.\n\t * @returns ASM code.\n\t */\n\tpublic encodeStatements(\n\t\tast: ASTNodeStatements,\n\t\tdepth = 0\n\t) {\n\t\tconst alignArguments = this.optionInstructionsArgumentsAlign;\n\t\tconst alignComments = this.optionInstructionsCommentsAlign;\n\t\tlet argCol = 0;\n\t\tlet comCol = 0;\n\n\t\tif (alignArguments || alignComments) {\n\t\t\tlet idLenMax = 0;\n\t\t\tlet argLenMax = 0;\n\t\t\tlet idArgLenMax = 0;\n\n\t\t\tfor (const statement of ast.entries) {\n\t\t\t\tconst instruction = typed.cast(\n\t\t\t\t\tstatement,\n\t\t\t\t\tASTNodeStatementInstruction\n\t\t\t\t);\n\t\t\t\tif (!instruction) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = this.encodeIdentifier(instruction.identifier);\n\t\t\t\tconst args = this.encodeArguments(instruction.arguments);\n\t\t\t\tconst idArgs = this._align(id, args, 0);\n\n\t\t\t\tidLenMax = Math.max(idLenMax, id.length);\n\t\t\t\targLenMax = Math.max(argLenMax, args.length);\n\t\t\t\tidArgLenMax = Math.max(idArgLenMax, idArgs.length);\n\t\t\t}\n\n\t\t\tif (alignArguments && alignComments) {\n\t\t\t\targCol = idLenMax + 1;\n\t\t\t\tcomCol = argCol + argLenMax + 1;\n\t\t\t}\n\t\t\telse if (alignArguments) {\n\t\t\t\targCol = idLenMax + 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcomCol = idArgLenMax + 1;\n\t\t\t}\n\t\t}\n\n\t\tthis._instructionAlignStack.push([argCol, comCol]);\n\n\t\tlet r = '';\n\t\ttry {\n\t\t\tr = ast.entries\n\t\t\t\t.map(e => this.encodeStatement(e, depth))\n\t\t\t\t.join('');\n\t\t}\n\t\tfinally {\n\t\t\tthis._instructionAlignStack.pop();\n\t\t}\n\n\t\treturn r;\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @param depth Indent depth.\n\t * @returns ASM code.\n\t */\n\tpublic encodeStatement(\n\t\tast: ASTNodeStatement,\n\t\tdepth = 0\n\t): string {\n\t\tconst instruction = typed.cast(ast, ASTNodeStatementInstruction);\n\t\tif (instruction) {\n\t\t\treturn this.encodeStatementInstruction(instruction, depth);\n\t\t}\n\n\t\tconst block = typed.cast(ast, ASTNodeStatementBlock);\n\t\tif (block) {\n\t\t\treturn this.encodeStatementBlock(block, depth);\n\t\t}\n\n\t\tconst line = typed.cast(ast, ASTNodeStatementLine);\n\t\tif (line) {\n\t\t\treturn this.encodeStatementLine(line, depth);\n\t\t}\n\n\t\t// Should not get here.\n\t\tthrow new ExceptionInternal('Unhandled statement, type unknown');\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @param depth Indent depth.\n\t * @returns ASM code.\n\t */\n\tpublic encodeStatementInstruction(\n\t\tast: ASTNodeStatementInstruction,\n\t\tdepth = 0\n\t) {\n\t\tlet argCol = 0;\n\t\tlet comCol = 0;\n\t\tconst stack = this._instructionAlignStack;\n\t\tconst stackSize = stack.length;\n\t\tif (stackSize) {\n\t\t\t[argCol, comCol] = stack[stackSize - 1];\n\t\t}\n\n\t\tlet r = this.encodeIdentifier(ast.identifier);\n\n\t\tr = this._align(r, this.encodeArguments(ast.arguments), argCol);\n\n\t\tr = this._align(r, this.encodeComment(ast.comment), comCol);\n\n\t\treturn this._line(r, depth);\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @param depth Indent depth.\n\t * @returns ASM code.\n\t */\n\tpublic encodeStatementBlock(\n\t\tast: ASTNodeStatementBlock,\n\t\tdepth = 0\n\t) {\n\t\treturn (\n\t\t\tthis.encodeBegin(ast.begin, depth) +\n\t\t\tthis.encodeStatements(ast.statements, depth + 1) +\n\t\t\tthis.encodeEnd(ast.end, depth)\n\t\t);\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @param depth Indent depth.\n\t * @returns ASM code.\n\t */\n\tpublic encodeStatementLine(\n\t\tast: ASTNodeStatementLine,\n\t\tdepth = 0\n\t) {\n\t\treturn this._line(this.encodeComment(ast.comment), depth);\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @param depth Indent depth.\n\t * @returns ASM code.\n\t */\n\tpublic encodeBegin(\n\t\tast: ASTNodeBegin,\n\t\tdepth = 0\n\t) {\n\t\tlet r = `begin ${this.encodeIdentifier(ast.identifier)}`;\n\n\t\tr = this._align(r, this.encodeArguments(ast.arguments), 0);\n\n\t\tr = this._align(r, this.encodeComment(ast.comment), 0);\n\n\t\treturn this._line(r, depth);\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @param depth Indent depth.\n\t * @returns ASM code.\n\t */\n\tpublic encodeEnd(\n\t\tast: ASTNodeEnd,\n\t\tdepth = 0\n\t) {\n\t\tlet r = 'end';\n\n\t\tr = this._align(r, this.encodeComment(ast.comment), 0);\n\n\t\treturn this._line(r, depth);\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @returns ASM code.\n\t */\n\tpublic encodeIdentifier(\n\t\tast: ASTNodeIdentifier\n\t) {\n\t\treturn ast.text;\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @returns ASM code.\n\t */\n\tpublic encodeArguments(\n\t\tast: ASTNodeArguments\n\t) {\n\t\treturn ast.entries\n\t\t\t.map(e => this.encodeArgument(e))\n\t\t\t.join(', ');\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @returns ASM code.\n\t */\n\tpublic encodeArgument(\n\t\tast: ASTNodeArgument\n\t) {\n\t\treturn ast.text;\n\t}\n\n\t/**\n\t * Encode AST to ASM.\n\t *\n\t * @param ast AST node.\n\t * @returns ASM code.\n\t */\n\tpublic encodeComment(\n\t\tast: ASTNodeComment\n\t) {\n\t\treturn ast.text;\n\t}\n\n\t/**\n\t * Column align a string.\n\t *\n\t * @param str String start.\n\t * @param add String added.\n\t * @param column Column number.\n\t * @param empty Set to true to indent even when empty.\n\t * @returns Aligned string.\n\t */\n\tprotected _align(str: string, add: string, column: number, empty = false) {\n\t\tif (!empty && !add) {\n\t\t\treturn str;\n\t\t}\n\t\tif (column < str.length) {\n\t\t\treturn `${str} ${add}`;\n\t\t}\n\t\treturn utilStringPadRight(str, column, ' ') + add;\n\t}\n\n\t/**\n\t * Indent string, optionally if non-empty.\n\t *\n\t * @param str String to be indented.\n\t * @param depth Indent depth.\n\t * @param empty Set to true to indent even when empty.\n\t * @returns Indented string.\n\t */\n\tprotected _indent(str: string, depth: number, empty = false) {\n\t\tif (!empty && !str) {\n\t\t\treturn '';\n\t\t}\n\t\treturn utilStringRepeat(this.indentString, depth) + str;\n\t}\n\n\t/**\n\t * Create line, optionally indented.\n\t *\n\t * @param str String to be indented.\n\t * @param depth Indent depth.\n\t * @returns Indented line.\n\t */\n\tprotected _line(str: string, depth = 0) {\n\t\treturn `${this._indent(str, depth, false)}\\n`;\n\t}\n}\n"],"file":"encoder.mjs","sourceRoot":"../../src"}