codexivo 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -5,7 +5,7 @@
5
5
  "import type { Span } from './syntax/token';\n\nexport type ErrorKind = 'léxico' | 'sintaxis' | 'ejecución' | 'límite';\n\nexport interface ErrorInfo {\n kind: ErrorKind;\n code: string;\n message: string;\n hint?: string;\n span?: Span;\n /** Nombres de los procedimientos activos cuando ocurrió el error, del más externo al más interno. */\n callStack?: string[];\n}\n\n/**\n * Error de Codexivo. Siempre describe qué pasó (`message`) y, cuando es posible,\n * qué revisar (`hint`) y dónde (`span`).\n */\nexport class CodexivoError extends Error implements ErrorInfo {\n kind: ErrorKind;\n code: string;\n hint?: string;\n span?: Span;\n callStack?: string[];\n\n constructor(info: ErrorInfo) {\n super(info.message);\n this.name = 'CodexivoError';\n this.kind = info.kind;\n this.code = info.code;\n this.hint = info.hint;\n this.span = info.span;\n this.callStack = info.callStack;\n }\n\n toJSON(): ErrorInfo {\n return {\n kind: this.kind,\n code: this.code,\n message: this.message,\n hint: this.hint,\n span: this.span,\n callStack: this.callStack,\n };\n }\n}\n\n/** Texto legible de un error, como lo muestran el REPL y la consola del sandbox. */\nexport const formatError = (error: ErrorInfo): string => {\n const where = error.span ? ` en la línea ${error.span.start.line}, columna ${error.span.start.column}` : '';\n const lines = [`Error de ${error.kind}${where}: ${error.message}`];\n if (error.hint) {\n lines.push(`Pista: ${error.hint}`);\n }\n return lines.join('\\n');\n};\n",
6
6
  "export interface Position {\n /** Línea, desde 1. */\n line: number;\n /** Columna, desde 1. */\n column: number;\n /** Desplazamiento en caracteres desde el inicio del código, desde 0. */\n offset: number;\n}\n\n/** Rango del código fuente. `end` apunta justo después del último carácter. */\nexport interface Span {\n start: Position;\n end: Position;\n}\n\nexport enum TokenType {\n // literales y nombres\n NUMBER = 'NUMBER',\n STRING = 'STRING',\n IDENT = 'IDENT',\n\n // palabras reservadas\n LET = 'LET',\n CONST = 'CONST',\n DOMAIN = 'DOMAIN',\n FUNCTION = 'FUNCTION',\n RETURN = 'RETURN',\n IF = 'IF',\n ELSEIF = 'ELSEIF',\n ELSE = 'ELSE',\n WHILE = 'WHILE',\n DO = 'DO',\n UNTIL = 'UNTIL',\n FOR = 'FOR',\n FOR_EACH = 'FOR_EACH',\n FROM = 'FROM',\n TO = 'TO',\n STEP = 'STEP',\n IN = 'IN',\n REPEAT = 'REPEAT',\n TIMES = 'TIMES',\n BREAK = 'BREAK',\n CONTINUE = 'CONTINUE',\n TRUE = 'TRUE',\n FALSE = 'FALSE',\n NULL = 'NULL',\n AND = 'AND',\n OR = 'OR',\n NOT = 'NOT',\n MOD = 'MOD',\n DIV = 'DIV',\n\n // operadores\n ASSIGN = 'ASSIGN',\n PLUS_ASSIGN = 'PLUS_ASSIGN',\n MINUS_ASSIGN = 'MINUS_ASSIGN',\n STAR_ASSIGN = 'STAR_ASSIGN',\n SLASH_ASSIGN = 'SLASH_ASSIGN',\n PERCENT_ASSIGN = 'PERCENT_ASSIGN',\n INCREMENT = 'INCREMENT',\n DECREMENT = 'DECREMENT',\n PLUS = 'PLUS',\n MINUS = 'MINUS',\n STAR = 'STAR',\n SLASH = 'SLASH',\n PERCENT = 'PERCENT',\n CARET = 'CARET',\n BANG = 'BANG',\n EQ = 'EQ',\n NEQ = 'NEQ',\n LT = 'LT',\n GT = 'GT',\n LTE = 'LTE',\n GTE = 'GTE',\n\n // delimitadores\n COMMA = 'COMMA',\n COLON = 'COLON',\n DOT = 'DOT',\n SEMICOLON = 'SEMICOLON',\n LPAREN = 'LPAREN',\n RPAREN = 'RPAREN',\n LBRACE = 'LBRACE',\n RBRACE = 'RBRACE',\n LBRACKET = 'LBRACKET',\n RBRACKET = 'RBRACKET',\n\n EOF = 'EOF',\n ILLEGAL = 'ILLEGAL',\n}\n\nexport interface Token {\n type: TokenType;\n /** Texto exacto del código. */\n lexeme: string;\n /** Valor ya interpretado: el número de un NUMBER o el contenido (con escapes resueltos) de un STRING. */\n value?: number | string;\n span: Span;\n}\n\nexport const KEYWORDS: Readonly<Record<string, TokenType>> = {\n variable: TokenType.LET,\n constante: TokenType.CONST,\n dominio: TokenType.DOMAIN,\n procedimiento: TokenType.FUNCTION,\n regresa: TokenType.RETURN,\n si: TokenType.IF,\n pero_si: TokenType.ELSEIF,\n si_no: TokenType.ELSE,\n mientras: TokenType.WHILE,\n hacer: TokenType.DO,\n hasta_que: TokenType.UNTIL,\n para: TokenType.FOR,\n para_cada: TokenType.FOR_EACH,\n desde: TokenType.FROM,\n hasta: TokenType.TO,\n con_paso: TokenType.STEP,\n en: TokenType.IN,\n repetir: TokenType.REPEAT,\n veces: TokenType.TIMES,\n romper: TokenType.BREAK,\n continuar: TokenType.CONTINUE,\n verdadero: TokenType.TRUE,\n falso: TokenType.FALSE,\n nulo: TokenType.NULL,\n y: TokenType.AND,\n o: TokenType.OR,\n no: TokenType.NOT,\n mod: TokenType.MOD,\n div: TokenType.DIV,\n // Las comparaciones en palabras producen el mismo token que su símbolo: el AST no las distingue.\n es_igual_a: TokenType.EQ,\n es_distinto_de: TokenType.NEQ,\n es_menor_que: TokenType.LT,\n es_mayor_que: TokenType.GT,\n es_menor_o_igual_a: TokenType.LTE,\n es_mayor_o_igual_a: TokenType.GTE,\n};\n\nexport const isKeyword = (word: string): boolean => Object.hasOwn(KEYWORDS, word);\n\nconst SYMBOLS: Partial<Record<TokenType, string>> = {\n [TokenType.ASSIGN]: '=',\n [TokenType.PLUS_ASSIGN]: '+=',\n [TokenType.MINUS_ASSIGN]: '-=',\n [TokenType.STAR_ASSIGN]: '*=',\n [TokenType.SLASH_ASSIGN]: '/=',\n [TokenType.PERCENT_ASSIGN]: '%=',\n [TokenType.INCREMENT]: '++',\n [TokenType.DECREMENT]: '--',\n [TokenType.PLUS]: '+',\n [TokenType.MINUS]: '-',\n [TokenType.STAR]: '*',\n [TokenType.SLASH]: '/',\n [TokenType.PERCENT]: '%',\n [TokenType.CARET]: '^',\n [TokenType.BANG]: '!',\n [TokenType.EQ]: '==',\n [TokenType.NEQ]: '!=',\n [TokenType.LT]: '<',\n [TokenType.GT]: '>',\n [TokenType.LTE]: '<=',\n [TokenType.GTE]: '>=',\n [TokenType.COMMA]: ',',\n [TokenType.COLON]: ':',\n [TokenType.DOT]: '.',\n [TokenType.SEMICOLON]: ';',\n [TokenType.LPAREN]: '(',\n [TokenType.RPAREN]: ')',\n [TokenType.LBRACE]: '{',\n [TokenType.RBRACE]: '}',\n [TokenType.LBRACKET]: '[',\n [TokenType.RBRACKET]: ']',\n};\n\nconst KEYWORD_BY_TYPE = Object.fromEntries(Object.entries(KEYWORDS).map(([word, type]) => [type, word])) as Partial<\n Record<TokenType, string>\n>;\n\n/** Cómo nombrar un tipo de token en un mensaje: \"`)`\", \"la palabra `si`\", \"un número\"… */\nexport const describeTokenType = (type: TokenType): string => {\n const symbol = SYMBOLS[type];\n if (symbol) return `\\`${symbol}\\``;\n const keyword = KEYWORD_BY_TYPE[type];\n if (keyword) return `la palabra \\`${keyword}\\``;\n switch (type) {\n case TokenType.NUMBER:\n return 'un número';\n case TokenType.STRING:\n return 'un texto';\n case TokenType.IDENT:\n return 'un nombre';\n case TokenType.EOF:\n return 'el final del programa';\n default:\n return 'un carácter no válido';\n }\n};\n\n/** Cómo nombrar un token concreto en un mensaje. */\nexport const describeToken = (token: Token): string => {\n switch (token.type) {\n case TokenType.NUMBER:\n return `el número \\`${token.lexeme}\\``;\n case TokenType.STRING:\n return `el texto ${token.lexeme}`;\n case TokenType.IDENT:\n return `el nombre \\`${token.lexeme}\\``;\n case TokenType.ILLEGAL:\n return `el carácter \\`${token.lexeme}\\``;\n default:\n // `es_igual_a` y `==` son el mismo token; se nombra como se escribió.\n return isKeyword(token.lexeme) ? `la palabra \\`${token.lexeme}\\`` : describeTokenType(token.type);\n }\n};\n",
7
7
  "import { CodexivoError } from '../errors';\nimport { KEYWORDS, TokenType } from './token';\nimport type { Position, Span, Token } from './token';\n\nexport interface LexResult {\n tokens: Token[];\n errors: CodexivoError[];\n}\n\nconst LETTER = /[A-Za-z_À-ÖØ-öø-ÿ]/;\nconst DIGIT = /[0-9]/;\nconst WHITESPACE = /\\s/;\n\nconst TWO_CHAR_OPERATORS: Readonly<Record<string, TokenType>> = {\n '==': TokenType.EQ,\n '!=': TokenType.NEQ,\n '<=': TokenType.LTE,\n '>=': TokenType.GTE,\n '+=': TokenType.PLUS_ASSIGN,\n '-=': TokenType.MINUS_ASSIGN,\n '*=': TokenType.STAR_ASSIGN,\n '/=': TokenType.SLASH_ASSIGN,\n '%=': TokenType.PERCENT_ASSIGN,\n '++': TokenType.INCREMENT,\n '--': TokenType.DECREMENT,\n};\n\nconst ONE_CHAR_OPERATORS: Readonly<Record<string, TokenType>> = {\n '=': TokenType.ASSIGN,\n '+': TokenType.PLUS,\n '-': TokenType.MINUS,\n '*': TokenType.STAR,\n '/': TokenType.SLASH,\n '%': TokenType.PERCENT,\n '^': TokenType.CARET,\n '!': TokenType.BANG,\n '<': TokenType.LT,\n '>': TokenType.GT,\n ',': TokenType.COMMA,\n ':': TokenType.COLON,\n '.': TokenType.DOT,\n ';': TokenType.SEMICOLON,\n '(': TokenType.LPAREN,\n ')': TokenType.RPAREN,\n '{': TokenType.LBRACE,\n '}': TokenType.RBRACE,\n '[': TokenType.LBRACKET,\n ']': TokenType.RBRACKET,\n};\n\nconst VALUE_ENDS = new Set([\n TokenType.IDENT,\n TokenType.NUMBER,\n TokenType.STRING,\n TokenType.RPAREN,\n TokenType.RBRACKET,\n TokenType.RBRACE,\n]);\n\nconst ESCAPES: Readonly<Record<string, string>> = {\n n: '\\n',\n t: '\\t',\n '\\\\': '\\\\',\n '\"': '\"',\n \"'\": \"'\",\n};\n\nconst ILLEGAL_HINTS: Readonly<Record<string, string>> = {\n '&': 'Para el «y» lógico escribe la palabra `y`.',\n '|': 'Para el «o» lógico escribe la palabra `o`.',\n '“': 'Parece una comilla tipográfica; usa comillas rectas `\"`.',\n '”': 'Parece una comilla tipográfica; usa comillas rectas `\"`.',\n '‘': \"Parece una comilla tipográfica; usa comillas rectas `'`.\",\n '’': \"Parece una comilla tipográfica; usa comillas rectas `'`.\",\n};\n\n/** Convierte código fuente en tokens. Nunca lanza: los problemas se reportan en `errors`. */\nexport const tokenize = (source: string): LexResult => {\n const tokens: Token[] = [];\n const errors: CodexivoError[] = [];\n\n let offset = 0;\n let line = 1;\n let column = 1;\n\n const position = (): Position => ({ line, column, offset });\n const peek = (ahead = 0): string => source[offset + ahead] ?? '';\n const advance = (): string => {\n const character = source[offset] ?? '';\n offset += 1;\n if (character === '\\n') {\n line += 1;\n column = 1;\n } else {\n column += 1;\n }\n return character;\n };\n\n const push = (type: TokenType, start: Position, value?: number | string): Token => {\n const token: Token = { type, lexeme: source.slice(start.offset, offset), span: { start, end: position() } };\n if (value !== undefined) token.value = value;\n tokens.push(token);\n return token;\n };\n\n const lexicalError = (code: string, message: string, span: Span, hint?: string) => {\n errors.push(new CodexivoError({ kind: 'léxico', code, message, hint, span }));\n };\n\n while (offset < source.length) {\n const character = peek();\n\n if (WHITESPACE.test(character)) {\n advance();\n continue;\n }\n\n const start = position();\n\n // comentarios\n if (character === '/' && peek(1) === '/') {\n while (offset < source.length && peek() !== '\\n') advance();\n continue;\n }\n if (character === '/' && peek(1) === '*') {\n advance();\n advance();\n while (offset < source.length && !(peek() === '*' && peek(1) === '/')) advance();\n if (offset >= source.length) {\n lexicalError(\n 'COMENTARIO_SIN_CERRAR',\n 'El comentario que empieza aquí no se cerró.',\n {\n start,\n end: { line: start.line, column: start.column + 2, offset: start.offset + 2 },\n },\n 'Cierra el comentario con `*/`.',\n );\n } else {\n advance();\n advance();\n }\n continue;\n }\n\n // números\n // Después de un valor, `.` es acceso a un campo (`d.1` es un error claro, no `d` seguido de `.1`).\n const last = tokens[tokens.length - 1];\n const afterValue = last !== undefined && VALUE_ENDS.has(last.type) && last.span.end.offset === offset;\n if (DIGIT.test(character) || (character === '.' && DIGIT.test(peek(1)) && !afterValue)) {\n // `_` separa grupos de dígitos (`1_000_000`); se revisa que esté bien puesto al final.\n const digits = () => {\n while (DIGIT.test(peek()) || peek() === '_') advance();\n };\n digits();\n if (peek() === '.' && DIGIT.test(peek(1))) {\n advance();\n digits();\n }\n if (LETTER.test(peek()) && peek() !== '_') {\n while (LETTER.test(peek()) || DIGIT.test(peek())) advance();\n const token = push(TokenType.ILLEGAL, start);\n lexicalError(\n 'NOMBRE_EMPIEZA_CON_NÚMERO',\n `\\`${token.lexeme}\\` no es un número ni un nombre válido.`,\n token.span,\n 'Los nombres no pueden empezar con un dígito. Si es una multiplicación, escribe el operador: `2 * x`.',\n );\n continue;\n }\n const text = source.slice(start.offset, offset);\n if (/(^|\\D)_|_(\\D|$)/.test(text)) {\n const token = push(TokenType.ILLEGAL, start);\n lexicalError(\n 'SEPARADOR_INVÁLIDO',\n `\\`${text}\\` no es un número válido.`,\n token.span,\n 'El `_` solo puede ir entre dos dígitos para separar grupos, como en `1_000_000`.',\n );\n continue;\n }\n push(TokenType.NUMBER, start, Number(text.replaceAll('_', '')));\n continue;\n }\n\n // nombres y palabras reservadas\n if (LETTER.test(character)) {\n while (LETTER.test(peek()) || DIGIT.test(peek())) advance();\n const word = source.slice(start.offset, offset);\n push(KEYWORDS[word] ?? TokenType.IDENT, start);\n continue;\n }\n\n // textos\n if (character === '\"' || character === \"'\") {\n const quote = advance();\n let value = '';\n let closed = false;\n while (offset < source.length && peek() !== '\\n') {\n const current = advance();\n if (current === quote) {\n closed = true;\n break;\n }\n if (current === '\\\\') {\n const escapeStart = { line, column: column - 1, offset: offset - 1 };\n const escaped = advance();\n const replacement = ESCAPES[escaped];\n if (replacement === undefined) {\n lexicalError(\n 'ESCAPE_DESCONOCIDO',\n `\\`\\\\${escaped}\\` no es una secuencia de escape válida.`,\n { start: escapeStart, end: position() },\n 'Las secuencias válidas son `\\\\n`, `\\\\t`, `\\\\\\\\`, `\\\\\"` y `\\\\\\'`.',\n );\n value += escaped;\n } else {\n value += replacement;\n }\n continue;\n }\n value += current;\n }\n const token = push(TokenType.STRING, start, value);\n if (!closed) {\n lexicalError(\n 'TEXTO_SIN_CERRAR',\n 'El texto que empieza aquí no se cerró.',\n token.span,\n `Agrega la comilla \\`${quote}\\` al final. Un texto no puede ocupar varias líneas; usa \\`\\\\n\\` para un salto de línea.`,\n );\n }\n continue;\n }\n\n // operadores y delimitadores\n const pair = character + peek(1);\n const twoChar = TWO_CHAR_OPERATORS[pair];\n if (twoChar) {\n advance();\n advance();\n push(twoChar, start);\n continue;\n }\n const oneChar = ONE_CHAR_OPERATORS[character];\n if (oneChar) {\n advance();\n push(oneChar, start);\n continue;\n }\n\n advance();\n const token = push(TokenType.ILLEGAL, start);\n lexicalError(\n 'CARÁCTER_DESCONOCIDO',\n `Codexivo no reconoce el carácter \\`${character}\\`.`,\n token.span,\n ILLEGAL_HINTS[character],\n );\n }\n\n const end = position();\n tokens.push({ type: TokenType.EOF, lexeme: '', span: { start: end, end } });\n return { tokens, errors };\n};\n",
8
- "import { CodexivoError } from '../errors';\nimport type * as ast from './ast';\nimport { tokenize } from './lexer';\nimport { describeToken, describeTokenType, TokenType } from './token';\nimport type { Position, Span, Token } from './token';\n\nexport interface ParseResult {\n program: ast.Program;\n tokens: Token[];\n /** Errores léxicos y sintácticos, en el orden en que aparecen en el código. */\n errors: CodexivoError[];\n}\n\n/** Analiza el código y construye el AST. Nunca lanza: los problemas se reportan en `errors`. */\nexport const parse = (source: string): ParseResult => {\n const { tokens, errors: lexicalErrors } = tokenize(source);\n const parser = new Parser(tokens);\n const program = parser.parseProgram();\n const errors = [...lexicalErrors, ...parser.errors].sort(\n (a, b) => (a.span?.start.offset ?? 0) - (b.span?.start.offset ?? 0),\n );\n return { program, tokens, errors };\n};\n\nenum Precedence {\n LOWEST,\n OR,\n AND,\n NOT,\n COMPARE,\n SUM,\n PRODUCT,\n UNARY,\n POWER,\n CALL,\n}\n\nconst INFIX_PRECEDENCE: Partial<Record<TokenType, Precedence>> = {\n [TokenType.OR]: Precedence.OR,\n [TokenType.AND]: Precedence.AND,\n [TokenType.EQ]: Precedence.COMPARE,\n [TokenType.NEQ]: Precedence.COMPARE,\n [TokenType.LT]: Precedence.COMPARE,\n [TokenType.GT]: Precedence.COMPARE,\n [TokenType.LTE]: Precedence.COMPARE,\n [TokenType.GTE]: Precedence.COMPARE,\n [TokenType.PLUS]: Precedence.SUM,\n [TokenType.MINUS]: Precedence.SUM,\n [TokenType.STAR]: Precedence.PRODUCT,\n [TokenType.SLASH]: Precedence.PRODUCT,\n [TokenType.PERCENT]: Precedence.PRODUCT,\n [TokenType.MOD]: Precedence.PRODUCT,\n [TokenType.DIV]: Precedence.PRODUCT,\n [TokenType.CARET]: Precedence.POWER,\n [TokenType.LPAREN]: Precedence.CALL,\n [TokenType.LBRACKET]: Precedence.CALL,\n [TokenType.DOT]: Precedence.CALL,\n};\n\nconst BINARY_OPERATORS: Partial<Record<TokenType, ast.BinaryOperator>> = {\n [TokenType.PLUS]: '+',\n [TokenType.MINUS]: '-',\n [TokenType.STAR]: '*',\n [TokenType.SLASH]: '/',\n [TokenType.PERCENT]: 'mod',\n [TokenType.MOD]: 'mod',\n [TokenType.DIV]: 'div',\n [TokenType.CARET]: '^',\n [TokenType.EQ]: '==',\n [TokenType.NEQ]: '!=',\n [TokenType.LT]: '<',\n [TokenType.GT]: '>',\n [TokenType.LTE]: '<=',\n [TokenType.GTE]: '>=',\n};\n\nconst ASSIGNMENT_OPERATORS: Partial<Record<TokenType, ast.AssignmentOperator>> = {\n [TokenType.ASSIGN]: '=',\n [TokenType.PLUS_ASSIGN]: '+=',\n [TokenType.MINUS_ASSIGN]: '-=',\n [TokenType.STAR_ASSIGN]: '*=',\n [TokenType.SLASH_ASSIGN]: '/=',\n [TokenType.PERCENT_ASSIGN]: '%=',\n};\n\nconst INCREMENT_OPERATORS: Partial<Record<TokenType, ast.IncrementOperator>> = {\n [TokenType.INCREMENT]: '++',\n [TokenType.DECREMENT]: '--',\n};\n\nconst STATEMENT_KEYWORDS = new Set([\n TokenType.LET,\n TokenType.DOMAIN,\n TokenType.CONST,\n TokenType.REPEAT,\n TokenType.FOR_EACH,\n TokenType.BREAK,\n TokenType.CONTINUE,\n TokenType.FUNCTION,\n TokenType.RETURN,\n TokenType.IF,\n TokenType.WHILE,\n TokenType.DO,\n TokenType.FOR,\n]);\n\n/** Lo único que puede ir dentro de un `dominio`. */\nconst DOMAIN_MEMBERS = new Set<ast.Statement['kind']>(['VariableDeclaration', 'FunctionDeclaration', 'Domain']);\n\n/** Cómo empieza una sentencia, para nombrarla en un mensaje. */\nconst printStart = (statement: ast.Statement): string | undefined => {\n switch (statement.kind) {\n case 'If':\n return 'si';\n case 'While':\n return 'mientras';\n case 'DoUntil':\n return 'hacer';\n case 'For':\n return 'para';\n case 'ForEach':\n return 'para_cada';\n case 'Repeat':\n return 'repetir';\n case 'Return':\n return 'regresa';\n case 'Break':\n return 'romper';\n case 'Continue':\n return 'continuar';\n case 'Block':\n return '{';\n default:\n return undefined;\n }\n};\n\nconst KEYWORD_LIKE_TYPOS: Readonly<Record<string, string>> = {\n sino: 'En Codexivo se escribe `si_no`, con guion bajo.',\n pero: 'En Codexivo se escribe `pero_si`, con guion bajo.',\n};\n\nconst MAX_ERRORS = 50;\nconst MAX_DEPTH = 400;\n\n/** Señal interna para abandonar la sentencia actual. El error, si lo hay, ya se registró. */\nclass ParseFailure {}\n\nclass Parser {\n readonly errors: CodexivoError[] = [];\n private position = 0;\n private nextId = 1;\n private depth = 0;\n /**\n * Paréntesis, corchetes o llaves abiertos alrededor de la expresión actual. Dentro de ellos una expresión puede\n * seguir en la línea siguiente; fuera, un salto de línea la termina (salvo después de un operador).\n */\n private grouping = 0;\n /** Bucles abiertos alrededor de la sentencia actual, sin contar los de afuera de un procedimiento. */\n private loopDepth = 0;\n\n constructor(private readonly tokens: Token[]) {}\n\n parseProgram(): ast.Program {\n const start = this.current.span.start;\n const statements = this.parseStatements(TokenType.EOF);\n return { kind: 'Program', id: this.id(), statements, span: { start, end: this.current.span.end } };\n }\n\n // ── utilidades ─────────────────────────────────────────────────────────────\n\n private get current(): Token {\n return this.tokens[this.position] ?? this.tokens[this.tokens.length - 1]!;\n }\n\n private get previous(): Token {\n return this.tokens[this.position - 1] ?? this.current;\n }\n\n private peek(ahead = 1): Token {\n return this.tokens[this.position + ahead] ?? this.tokens[this.tokens.length - 1]!;\n }\n\n private id(): number {\n return this.nextId++;\n }\n\n private advance(): Token {\n const token = this.current;\n if (token.type !== TokenType.EOF) this.position += 1;\n return token;\n }\n\n private check(type: TokenType): boolean {\n return this.current.type === type;\n }\n\n private match(type: TokenType): boolean {\n if (!this.check(type)) return false;\n this.advance();\n return true;\n }\n\n private spanFrom(start: Position): Span {\n return { start, end: this.previous.span.end };\n }\n\n private error(code: string, message: string, span: Span, hint?: string): never {\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push(new CodexivoError({ kind: 'sintaxis', code, message, hint, span }));\n }\n throw new ParseFailure();\n }\n\n /** Un token ILLEGAL ya tiene su error léxico; no lo reportamos dos veces. */\n private failSilentlyOnIllegal(): void {\n if (this.check(TokenType.ILLEGAL)) throw new ParseFailure();\n }\n\n private expect(type: TokenType, context: string, hint?: string): Token {\n if (this.check(type)) return this.advance();\n this.failSilentlyOnIllegal();\n const found = this.current;\n let finalHint = hint;\n if (type === TokenType.RPAREN && found.type === TokenType.ASSIGN) {\n finalHint = 'Para comparar se usa `es_igual_a` (o `==`); un solo `=` sirve para asignar.';\n }\n this.error(\n 'TOKEN_ESPERADO',\n `Se esperaba ${describeTokenType(type)} ${context}, pero se encontró ${describeToken(found)}.`,\n found.span,\n finalHint,\n );\n }\n\n private enter(): void {\n this.depth += 1;\n if (this.depth > MAX_DEPTH) {\n this.error(\n 'ANIDAMIENTO_EXCESIVO',\n 'El programa tiene demasiados niveles anidados.',\n this.current.span,\n 'Divide la expresión en variables intermedias.',\n );\n }\n }\n\n private leave(): void {\n this.depth -= 1;\n }\n\n /** Salta tokens hasta un punto seguro para seguir analizando después de un error. */\n private synchronize(failedAt: Token): void {\n if (this.position === this.tokens.indexOf(failedAt) && !this.check(TokenType.EOF)) this.advance();\n while (!this.check(TokenType.EOF)) {\n if (this.previous.type === TokenType.SEMICOLON) return;\n if (this.check(TokenType.RBRACE)) return;\n if (STATEMENT_KEYWORDS.has(this.current.type)) return;\n if (this.current.span.start.line > failedAt.span.start.line) return;\n this.advance();\n }\n }\n\n // ── sentencias ─────────────────────────────────────────────────────────────\n\n private parseStatements(terminator: TokenType.EOF | TokenType.RBRACE): ast.Statement[] {\n // Un bloque dentro de un paréntesis (el cuerpo de un procedimiento que se pasa como argumento) vuelve a\n // terminar sus sentencias con el salto de línea.\n const grouping = this.grouping;\n this.grouping = 0;\n try {\n return this.parseStatementList(terminator);\n } finally {\n this.grouping = grouping;\n }\n }\n\n private parseStatementList(terminator: TokenType.EOF | TokenType.RBRACE): ast.Statement[] {\n const statements: ast.Statement[] = [];\n let recovering = false;\n while (!this.check(terminator) && !this.check(TokenType.EOF)) {\n const failedAt = this.current;\n try {\n if (terminator === TokenType.EOF && this.check(TokenType.RBRACE)) {\n // Una `}` sobrante después de un error suele ser parte de lo que ya se reportó.\n if (recovering) {\n this.advance();\n continue;\n }\n this.error('LLAVE_SOBRANTE', 'Sobra esta `}`: no hay ningún bloque abierto.', this.current.span);\n }\n statements.push(this.parseStatement());\n recovering = false;\n } catch (error) {\n if (!(error instanceof ParseFailure)) throw error;\n this.depth = 0;\n recovering = true;\n this.synchronize(failedAt);\n }\n }\n this.checkDuplicateProcedures(statements);\n return statements;\n }\n\n /** Un procedimiento con nombre existe desde el inicio de su bloque, así que su nombre no se puede repetir ahí. */\n private checkDuplicateProcedures(statements: ast.Statement[]): void {\n const procedures = new Set(\n statements.flatMap(statement => (statement.kind === 'FunctionDeclaration' ? [statement.name.name] : [])),\n );\n if (procedures.size === 0) return;\n const seen = new Set<string>();\n for (const statement of statements) {\n if (statement.kind !== 'FunctionDeclaration' && statement.kind !== 'VariableDeclaration') continue;\n const { name } = statement;\n if (!procedures.has(name.name)) continue;\n if (statement.kind === 'FunctionDeclaration' && !seen.has(name.name)) {\n seen.add(name.name);\n continue;\n }\n if (this.errors.length >= MAX_ERRORS) return;\n this.errors.push(\n new CodexivoError({\n kind: 'sintaxis',\n code: 'NOMBRE_REPETIDO',\n message: `Ya hay un procedimiento llamado \\`${name.name}\\` en este bloque.`,\n hint: 'Un procedimiento con nombre existe desde el inicio de su bloque; cambia uno de los dos nombres.',\n span: name.span,\n }),\n );\n }\n }\n\n private parseStatement(): ast.Statement {\n const token = this.current;\n switch (token.type) {\n case TokenType.SEMICOLON:\n this.advance();\n return this.parseStatementAfterStraySemicolon();\n case TokenType.LET:\n case TokenType.CONST:\n return this.endSimpleStatement(this.parseVariableDeclaration());\n case TokenType.RETURN:\n return this.endSimpleStatement(this.parseReturn());\n case TokenType.IF:\n return this.endCompoundStatement(this.parseIf());\n case TokenType.WHILE:\n return this.endCompoundStatement(this.parseWhile());\n case TokenType.DO:\n return this.endSimpleStatement(this.parseDoUntil());\n case TokenType.FOR:\n return this.endCompoundStatement(this.parseFor());\n case TokenType.REPEAT:\n return this.endCompoundStatement(this.parseRepeat());\n case TokenType.FOR_EACH:\n return this.endCompoundStatement(this.parseForEach());\n case TokenType.DOMAIN:\n return this.endCompoundStatement(this.parseDomain());\n case TokenType.BREAK:\n case TokenType.CONTINUE:\n return this.endSimpleStatement(this.parseLoopJump());\n case TokenType.IN:\n this.error('EN_SIN_PARA_CADA', '`en` solo se usa dentro de `para_cada … en …`.', token.span);\n case TokenType.FUNCTION:\n if (this.peek().type === TokenType.IDENT) return this.endCompoundStatement(this.parseFunctionDeclaration());\n return this.endSimpleStatement(this.parseSimpleStatement());\n case TokenType.LBRACE:\n if (\n (this.peek().type === TokenType.STRING || this.peek().type === TokenType.NUMBER) &&\n this.peek(2).type === TokenType.COLON\n ) {\n this.error(\n 'DICCIONARIO_COMO_SENTENCIA',\n 'Al inicio de una sentencia, `{` abre un bloque, no un diccionario.',\n token.span,\n 'Guarda el diccionario en una variable: `variable d = { \"clave\": valor }`.',\n );\n }\n return this.endCompoundStatement(this.parseBlock('para abrir el bloque'));\n case TokenType.ELSE:\n case TokenType.ELSEIF:\n this.error(\n 'RAMA_SIN_SI',\n `${describeToken(token)} tiene que ir justo después del \\`}\\` de un \\`si\\`.`,\n token.span,\n );\n case TokenType.UNTIL:\n this.error('HASTA_QUE_SIN_HACER', '`hasta_que` tiene que ir justo después del `}` de un `hacer`.', token.span);\n case TokenType.IDENT: {\n const typoHint = KEYWORD_LIKE_TYPOS[token.lexeme];\n const next = this.peek();\n if (\n typoHint &&\n (next.type === TokenType.LBRACE || next.type === TokenType.IF || next.type === TokenType.LPAREN)\n ) {\n this.error('PALABRA_DESCONOCIDA', `\\`${token.lexeme}\\` no es una palabra de Codexivo.`, token.span, typoHint);\n }\n return this.endSimpleStatement(this.parseSimpleStatement());\n }\n default:\n return this.endSimpleStatement(this.parseSimpleStatement());\n }\n }\n\n private parseStatementAfterStraySemicolon(): ast.Statement {\n // `;;` o un `;` suelto no hacen nada; seguimos con lo que venga.\n if (this.check(TokenType.EOF) || this.check(TokenType.RBRACE)) {\n const span = this.previous.span;\n return { kind: 'Block', id: this.id(), statements: [], span };\n }\n return this.parseStatement();\n }\n\n /** Después de una sentencia simple va `;`, el final de la línea, `}` o el final del programa. */\n private endSimpleStatement<T extends ast.Statement>(statement: T): T {\n if (this.match(TokenType.SEMICOLON)) return statement;\n if (this.check(TokenType.RBRACE) || this.check(TokenType.EOF)) return statement;\n if (this.current.span.start.line > this.previous.span.end.line) return statement;\n this.failSilentlyOnIllegal();\n this.error(\n 'FIN_DE_SENTENCIA',\n `Se esperaba \\`;\\` o un salto de línea antes de ${describeToken(this.current)}.`,\n this.current.span,\n 'Si querías combinar dos valores, falta un operador entre ellos.',\n );\n }\n\n private endCompoundStatement<T extends ast.Statement>(statement: T): T {\n this.match(TokenType.SEMICOLON);\n return statement;\n }\n\n private parseVariableDeclaration(): ast.VariableDeclaration {\n const keyword = this.advance(); // variable / constante\n const constant = keyword.type === TokenType.CONST;\n const name = this.parseBindingName(`después de \\`${keyword.lexeme}\\``);\n this.expect(\n TokenType.ASSIGN,\n `después de \\`${keyword.lexeme} ${name.name}\\``,\n constant\n ? `Toda constante necesita su valor desde el principio: \\`constante ${name.name} = 10\\`.`\n : `Toda variable empieza con un valor: \\`variable ${name.name} = 0\\`.`,\n );\n const value = this.parseExpression();\n if (value.kind === 'FunctionLiteral' && !value.name) value.name = name.name;\n return {\n kind: 'VariableDeclaration',\n id: this.id(),\n constant,\n name,\n value,\n span: this.spanFrom(keyword.span.start),\n };\n }\n\n private parseBindingName(context: string): ast.Identifier {\n const token = this.current;\n if (token.type !== TokenType.IDENT) {\n this.failSilentlyOnIllegal();\n if (token.lexeme && /^[a-z_]+$/.test(token.lexeme) && token.type !== TokenType.EOF) {\n // Se salta la palabra para que, al recuperarse, no empiece otra sentencia (`variable dominio = 1`).\n this.advance();\n this.error(\n 'PALABRA_RESERVADA',\n `\\`${token.lexeme}\\` es una palabra reservada y no se puede usar como nombre.`,\n token.span,\n 'Elige otro nombre, por ejemplo agregando una palabra: `valor_inicial`.',\n );\n }\n this.error(\n 'NOMBRE_ESPERADO',\n `Se esperaba un nombre ${context}, pero se encontró ${describeToken(token)}.`,\n token.span,\n );\n }\n this.advance();\n return { kind: 'Identifier', id: this.id(), name: token.lexeme, span: token.span };\n }\n\n /** Asignación (`x = …`, `lista[i] += …`), incremento (`i++`) o expresión. */\n private parseSimpleStatement(): ast.Assignment | ast.Increment | ast.ExpressionStatement {\n const start = this.current.span.start;\n const expression = this.parseExpression(Precedence.LOWEST, true);\n const operator = ASSIGNMENT_OPERATORS[this.current.type];\n const increment = INCREMENT_OPERATORS[this.current.type];\n if (!operator && !increment) {\n return { kind: 'ExpressionStatement', id: this.id(), expression, span: this.spanFrom(start) };\n }\n if (expression.kind !== 'Identifier' && expression.kind !== 'Index') {\n this.error(\n 'ASIGNACIÓN_INVÁLIDA',\n increment\n ? `\\`${this.current.lexeme}\\` solo funciona con una variable o un elemento, como \\`i${this.current.lexeme}\\` o \\`lista[0]${this.current.lexeme}\\`.`\n : 'Solo se le puede asignar un valor a una variable o a un elemento, como `x = 1` o `lista[0] = 1`.',\n this.current.span,\n );\n }\n this.advance();\n if (increment) {\n return { kind: 'Increment', id: this.id(), target: expression, operator: increment, span: this.spanFrom(start) };\n }\n const value = this.parseExpression();\n if (value.kind === 'FunctionLiteral' && !value.name && expression.kind === 'Identifier') {\n value.name = expression.name;\n }\n return {\n kind: 'Assignment',\n id: this.id(),\n target: expression,\n operator: operator!,\n value,\n span: this.spanFrom(start),\n };\n }\n\n private parseReturn(): ast.Return {\n const keyword = this.advance();\n const endsHere =\n this.check(TokenType.SEMICOLON) ||\n this.check(TokenType.RBRACE) ||\n this.check(TokenType.EOF) ||\n this.current.span.start.line > keyword.span.end.line;\n const value = endsHere ? undefined : this.parseExpression();\n return { kind: 'Return', id: this.id(), value, span: this.spanFrom(keyword.span.start) };\n }\n\n private parseBlock(context: string): ast.Block {\n const open = this.expect(TokenType.LBRACE, context, 'Los bloques de Codexivo siempre van entre llaves `{ }`.');\n const statements = this.parseStatements(TokenType.RBRACE);\n if (!this.check(TokenType.RBRACE)) {\n this.error(\n 'BLOQUE_SIN_CERRAR',\n `Falta \\`}\\` para cerrar el bloque que empieza en la línea ${open.span.start.line}.`,\n open.span,\n );\n }\n this.advance();\n return { kind: 'Block', id: this.id(), statements, span: this.spanFrom(open.span.start) };\n }\n\n /** Analiza `parse` dentro de paréntesis, corchetes o llaves, donde los saltos de línea no terminan nada. */\n private grouped<T>(parse: () => T): T {\n this.grouping += 1;\n try {\n return parse();\n } finally {\n this.grouping -= 1;\n }\n }\n\n private parseCondition(keyword: string): ast.Expression {\n this.expect(\n TokenType.LPAREN,\n `después de \\`${keyword}\\``,\n `La condición va entre paréntesis: \\`${keyword} (x > 0)\\`.`,\n );\n const condition = this.grouped(() => this.parseExpression());\n this.expect(TokenType.RPAREN, `para cerrar la condición de \\`${keyword}\\``);\n return condition;\n }\n\n private parseIf(): ast.If {\n const start = this.current.span.start;\n const branches: ast.IfBranch[] = [];\n let keyword = 'si';\n do {\n const branchStart = this.advance().span.start; // si / pero_si\n const condition = this.parseCondition(keyword);\n const body = this.parseBlock(`después de la condición de \\`${keyword}\\``);\n branches.push({ condition, body, span: this.spanFrom(branchStart) });\n keyword = 'pero_si';\n } while (this.check(TokenType.ELSEIF));\n\n let alternative: ast.Block | undefined;\n if (this.match(TokenType.ELSE)) {\n if (this.check(TokenType.IF)) {\n this.error(\n 'SI_NO_SI',\n 'Después de `si_no` va directamente un bloque.',\n this.current.span,\n 'Para otra condición usa `pero_si (…)`.',\n );\n }\n alternative = this.parseBlock('después de `si_no`');\n }\n return { kind: 'If', id: this.id(), branches, alternative, span: this.spanFrom(start) };\n }\n\n private parseWhile(): ast.While {\n const start = this.advance().span.start;\n const condition = this.parseCondition('mientras');\n const body = this.parseLoopBody('después de la condición de `mientras`');\n return { kind: 'While', id: this.id(), condition, body, span: this.spanFrom(start) };\n }\n\n private parseDoUntil(): ast.DoUntil {\n const start = this.advance().span.start;\n const body = this.parseLoopBody('después de `hacer`');\n this.expect(\n TokenType.UNTIL,\n 'después del bloque de `hacer`',\n 'La forma completa es `hacer { … } hasta_que (condición)`.',\n );\n const condition = this.parseCondition('hasta_que');\n return { kind: 'DoUntil', id: this.id(), body, condition, span: this.spanFrom(start) };\n }\n\n private parseFor(): ast.For | ast.ForRange {\n const start = this.advance().span.start;\n // `para i desde …` cuenta; `para (…; …; …)` es la forma clásica.\n if (!this.check(TokenType.LPAREN)) return this.parseForRange(start);\n this.expect(\n TokenType.LPAREN,\n 'después de `para`',\n 'La forma completa es `para (variable i = 0; i < 10; i += 1) { … }`.',\n );\n\n const { init, condition, update } = this.grouped(() => {\n let init: ast.For['init'];\n if (!this.check(TokenType.SEMICOLON)) {\n if (this.check(TokenType.LET) || this.check(TokenType.CONST)) init = this.parseVariableDeclaration();\n else init = this.parseSimpleStatement();\n }\n this.expect(TokenType.SEMICOLON, 'después del inicio del `para`');\n\n const condition = this.check(TokenType.SEMICOLON) ? undefined : this.parseExpression();\n this.expect(TokenType.SEMICOLON, 'después de la condición del `para`');\n\n let update: ast.For['update'];\n if (!this.check(TokenType.RPAREN)) update = this.parseSimpleStatement();\n this.expect(TokenType.RPAREN, 'para cerrar el `para`');\n return { init, condition, update };\n });\n\n const body = this.parseLoopBody('después de `para (…)`');\n return { kind: 'For', id: this.id(), init, condition, update, body, span: this.spanFrom(start) };\n }\n\n private parseForRange(start: Position): ast.ForRange {\n const form = 'La forma completa es `para i desde 1 hasta 10 { … }`.';\n if (this.check(TokenType.LET)) {\n // Se salta `variable` para no reportar también la declaración incompleta.\n this.advance();\n this.error(\n 'TOKEN_ESPERADO',\n 'La variable de `para … desde … hasta` se escribe sin `variable`.',\n this.current.span,\n form,\n );\n }\n const variable = this.parseBindingName('después de `para`');\n if (this.check(TokenType.ASSIGN)) {\n this.error(\n 'TOKEN_ESPERADO',\n `Para contar se escribe \\`desde\\`, no \\`=\\`: \\`para ${variable.name} desde 1 hasta 10\\`.`,\n this.current.span,\n 'La forma clásica `para (variable i = 0; i < 10; i++)` va entre paréntesis.',\n );\n }\n // Un `{` justo después de `desde`, `hasta` o `con_paso` es el cuerpo, no un diccionario: falta el valor.\n const value = (after: string): ast.Expression => {\n if (this.check(TokenType.LBRACE)) {\n this.error('EXPRESIÓN_ESPERADA', `Falta un valor después de \\`${after}\\`.`, this.current.span, form);\n }\n return this.parseExpression();\n };\n this.expect(TokenType.FROM, `después de \\`para ${variable.name}\\``, form);\n const from = value('desde');\n this.expect(TokenType.TO, 'después del inicio del `para`', form);\n const to = value('hasta');\n const step = this.match(TokenType.STEP) ? value('con_paso') : undefined;\n const body = this.parseLoopBody('después de `para … desde … hasta …`');\n return { kind: 'ForRange', id: this.id(), variable, from, to, step, body, span: this.spanFrom(start) };\n }\n\n private parseRepeat(): ast.Repeat {\n const keyword = this.advance();\n if (this.check(TokenType.TIMES) || this.check(TokenType.LBRACE)) {\n this.error(\n 'REPETIR_SIN_CANTIDAD',\n 'Falta cuántas veces se repite.',\n this.current.span,\n 'La forma completa es `repetir 4 veces { … }`.',\n );\n }\n const count = this.parseExpression();\n this.expect(\n TokenType.TIMES,\n 'después de la cantidad de `repetir`',\n 'La forma completa es `repetir 4 veces { … }`.',\n );\n const body = this.parseLoopBody('después de `repetir … veces`');\n return { kind: 'Repeat', id: this.id(), count, body, span: this.spanFrom(keyword.span.start) };\n }\n\n private parseDomain(): ast.Domain {\n const keyword = this.advance();\n const name = this.parseBindingName('después de `dominio`');\n const open = this.expect(\n TokenType.LBRACE,\n `después de \\`dominio ${name.name}\\``,\n 'Lo que agrupa un dominio va entre llaves: `dominio calculadora { … }`.',\n );\n // Un dominio no está dentro de ningún bucle, aunque se escriba dentro de uno.\n const loopDepth = this.loopDepth;\n this.loopDepth = 0;\n let statements: ast.Statement[];\n try {\n statements = this.parseStatements(TokenType.RBRACE);\n } finally {\n this.loopDepth = loopDepth;\n }\n if (!this.check(TokenType.RBRACE)) {\n this.error(\n 'BLOQUE_SIN_CERRAR',\n `Falta \\`}\\` para cerrar el dominio que empieza en la línea ${open.span.start.line}.`,\n open.span,\n );\n }\n this.advance();\n for (const statement of statements) {\n if (DOMAIN_MEMBERS.has(statement.kind) || this.errors.length >= MAX_ERRORS) continue;\n this.errors.push(\n new CodexivoError({\n kind: 'sintaxis',\n code: 'DOMINIO_SOLO_DECLARACIONES',\n message: printStart(statement)\n ? `Un dominio solo agrupa declaraciones, y \\`${printStart(statement)}\\` no es una.`\n : 'Un dominio solo agrupa declaraciones, y esta sentencia no es una.',\n hint: 'Dentro de `dominio` van `variable`, `constante`, `procedimiento` u otro `dominio`. Lo demás va en un procedimiento o fuera del dominio.',\n span: statement.span,\n }),\n );\n }\n const body: ast.Block = { kind: 'Block', id: this.id(), statements, span: this.spanFrom(open.span.start) };\n return { kind: 'Domain', id: this.id(), name, body, span: this.spanFrom(keyword.span.start) };\n }\n\n private parseForEach(): ast.ForEach {\n const keyword = this.advance();\n const form = 'La forma completa es `para_cada fruta en frutas { … }`, sin paréntesis.';\n if (this.check(TokenType.LPAREN)) {\n this.error('TOKEN_ESPERADO', '`para_cada` no lleva paréntesis.', this.current.span, form);\n }\n const variable = this.parseBindingName('después de `para_cada`');\n let value: ast.Identifier | undefined;\n if (this.match(TokenType.COMMA)) {\n value = this.parseBindingName(`después de \\`para_cada ${variable.name},\\``);\n if (value.name === variable.name) {\n this.error('PARÁMETRO_REPETIDO', `La variable \\`${value.name}\\` está repetida.`, value.span);\n }\n }\n const names = value ? `${variable.name}, ${value.name}` : variable.name;\n this.expect(TokenType.IN, `después de \\`para_cada ${names}\\``, form);\n const iterable = this.parseExpression();\n const body = this.parseLoopBody('después de `para_cada … en …`');\n return {\n kind: 'ForEach',\n id: this.id(),\n variable,\n value,\n iterable,\n body,\n span: this.spanFrom(keyword.span.start),\n };\n }\n\n /** El cuerpo de un bucle: ahí sí se puede usar `romper` y `continuar`. */\n private parseLoopBody(context: string): ast.Block {\n this.loopDepth += 1;\n try {\n return this.parseBlock(context);\n } finally {\n this.loopDepth -= 1;\n }\n }\n\n private parseLoopJump(): ast.Break | ast.Continue {\n const token = this.advance();\n const kind = token.type === TokenType.BREAK ? 'Break' : 'Continue';\n if (this.loopDepth === 0) {\n this.error(\n kind === 'Break' ? 'ROMPER_FUERA_DE_BUCLE' : 'CONTINUAR_FUERA_DE_BUCLE',\n `\\`${token.lexeme}\\` solo se puede usar dentro de un bucle.`,\n token.span,\n kind === 'Break'\n ? 'Para salir de un procedimiento usa `regresa`.'\n : 'Dentro de un procedimiento, `continuar` no afecta al bucle desde donde se llamó.',\n );\n }\n return { kind, id: this.id(), span: token.span };\n }\n\n // ── expresiones ────────────────────────────────────────────────────────────\n\n /** `statement` indica que la expresión es una sentencia completa, donde `i++` sí está permitido. */\n private parseExpression(precedence: Precedence = Precedence.LOWEST, statement = false): ast.Expression {\n this.enter();\n let left = this.parsePrefix();\n while (precedence < (INFIX_PRECEDENCE[this.current.type] ?? Precedence.LOWEST)) {\n // Sin `;`, una línea que empieza con `-`, `(` o `[` es otra sentencia, no la continuación de la anterior.\n if (this.grouping === 0 && this.current.span.start.line > this.previous.span.end.line) break;\n left = this.parseInfix(left);\n }\n if (!statement && INCREMENT_OPERATORS[this.current.type]) this.incrementInExpression(left);\n this.leave();\n return left;\n }\n\n private incrementInExpression(left?: ast.Expression): never {\n const operator = this.current.lexeme;\n const name = left?.kind === 'Identifier' ? left.name : 'i';\n this.error(\n 'INCREMENTO_EN_EXPRESIÓN',\n `\\`${operator}\\` es una sentencia: va sola, justo después del nombre de una variable.`,\n this.current.span,\n left?.kind === 'Identifier' || !left\n ? `Escribe \\`${name}${operator}\\` en su propia línea y después usa \\`${name}\\`.`\n : `Escribe el \\`${operator}\\` en su propia línea, antes o después de usar el valor.`,\n );\n }\n\n private parsePrefix(): ast.Expression {\n const token = this.current;\n switch (token.type) {\n case TokenType.NUMBER:\n this.advance();\n return { kind: 'NumberLiteral', id: this.id(), value: token.value as number, span: token.span };\n case TokenType.STRING:\n this.advance();\n return { kind: 'StringLiteral', id: this.id(), value: token.value as string, span: token.span };\n case TokenType.TRUE:\n case TokenType.FALSE:\n this.advance();\n return { kind: 'BooleanLiteral', id: this.id(), value: token.type === TokenType.TRUE, span: token.span };\n case TokenType.NULL:\n this.advance();\n return { kind: 'NullLiteral', id: this.id(), span: token.span };\n case TokenType.IDENT:\n this.advance();\n return { kind: 'Identifier', id: this.id(), name: token.lexeme, span: token.span };\n case TokenType.LPAREN: {\n this.advance();\n const expression = this.grouped(() => this.parseExpression());\n this.expect(TokenType.RPAREN, 'para cerrar el paréntesis');\n return expression;\n }\n case TokenType.LBRACKET:\n return this.parseList();\n case TokenType.LBRACE:\n return this.parseDict();\n case TokenType.MINUS: {\n this.advance();\n const operand = this.parseExpression(Precedence.UNARY);\n return { kind: 'Unary', id: this.id(), operator: '-', operand, span: this.spanFrom(token.span.start) };\n }\n case TokenType.NOT:\n case TokenType.BANG: {\n this.advance();\n const operand = this.parseExpression(Precedence.NOT);\n return { kind: 'Unary', id: this.id(), operator: 'no', operand, span: this.spanFrom(token.span.start) };\n }\n case TokenType.FUNCTION:\n if (this.peek().type === TokenType.IDENT) {\n this.error(\n 'PROCEDIMIENTO_CON_NOMBRE',\n 'Un procedimiento con nombre es una sentencia; no puede ir dentro de una expresión.',\n this.peek().span,\n 'Como valor, escríbelo sin nombre: `variable doble = procedimiento(x) { … }`.',\n );\n }\n return this.parseFunction(this.advance().span.start);\n case TokenType.INCREMENT:\n case TokenType.DECREMENT:\n if (this.peek().type === TokenType.IDENT) {\n const name = this.peek().lexeme;\n this.error(\n 'INCREMENTO_EN_EXPRESIÓN',\n `En Codexivo \\`${token.lexeme}\\` va después del nombre de la variable.`,\n { start: token.span.start, end: this.peek().span.end },\n `Escribe \\`${name}${token.lexeme}\\` como una sentencia propia.`,\n );\n }\n this.incrementInExpression();\n case TokenType.ILLEGAL:\n throw new ParseFailure();\n case TokenType.IF:\n case TokenType.WHILE:\n case TokenType.FOR:\n case TokenType.DO:\n case TokenType.LET:\n case TokenType.CONST:\n case TokenType.DOMAIN:\n case TokenType.REPEAT:\n case TokenType.FOR_EACH:\n case TokenType.BREAK:\n case TokenType.CONTINUE:\n case TokenType.RETURN:\n this.error(\n 'SENTENCIA_EN_EXPRESIÓN',\n `${describeToken(token)} empieza una sentencia y no se puede usar dentro de una expresión.`,\n token.span,\n );\n case TokenType.EOF:\n this.error(\n 'EXPRESIÓN_INCOMPLETA',\n 'El programa terminó a mitad de una expresión.',\n token.span,\n 'Revisa que no falte un valor al final.',\n );\n default:\n this.error(\n 'EXPRESIÓN_ESPERADA',\n `Se esperaba un valor, pero se encontró ${describeToken(token)}.`,\n token.span,\n /^[a-z_]+$/.test(token.lexeme)\n ? `\\`${token.lexeme}\\` es una palabra reservada; no se puede usar como nombre de variable.`\n : undefined,\n );\n }\n }\n\n private parseInfix(left: ast.Expression): ast.Expression {\n const token = this.current;\n const start = left.span.start;\n switch (token.type) {\n case TokenType.LPAREN: {\n this.advance();\n const args = this.parseList_(TokenType.RPAREN, 'para cerrar los argumentos');\n return { kind: 'Call', id: this.id(), callee: left, args, span: this.spanFrom(start) };\n }\n case TokenType.LBRACKET: {\n this.advance();\n if (this.check(TokenType.RBRACKET)) {\n this.error(\n 'ÍNDICE_VACÍO',\n 'Falta el índice entre los corchetes.',\n this.current.span,\n 'Por ejemplo: `lista[0]`.',\n );\n }\n const index = this.grouped(() => this.parseExpression());\n this.expect(TokenType.RBRACKET, 'para cerrar el índice');\n return { kind: 'Index', id: this.id(), object: left, index, span: this.spanFrom(start) };\n }\n case TokenType.DOT: {\n this.advance();\n const property = this.current;\n if (property.type !== TokenType.IDENT) {\n this.failSilentlyOnIllegal();\n // Una palabra reservada como `si` no debe empezar otra sentencia al recuperarse del error.\n if (property.type !== TokenType.EOF) this.advance();\n this.error(\n 'CAMPO_ESPERADO',\n `Después de \\`.\\` va el nombre de un campo, pero se encontró ${describeToken(property)}.`,\n property.span,\n 'Con `.` solo se usan claves que son nombres válidos; para las demás escribe `d[\"clave\"]`.',\n );\n }\n this.advance();\n const index: ast.StringLiteral = {\n kind: 'StringLiteral',\n id: this.id(),\n value: property.lexeme,\n span: property.span,\n };\n return { kind: 'Index', id: this.id(), object: left, index, dot: true, span: this.spanFrom(start) };\n }\n case TokenType.AND:\n case TokenType.OR: {\n this.advance();\n const precedence = INFIX_PRECEDENCE[token.type]!;\n const right = this.parseExpression(precedence);\n const operator = token.type === TokenType.AND ? 'y' : 'o';\n return { kind: 'Logical', id: this.id(), operator, left, right, span: this.spanFrom(start) };\n }\n default: {\n this.advance();\n const precedence = INFIX_PRECEDENCE[token.type]!;\n // `^` es asociativo a la derecha: `2 ^ 3 ^ 2` es `2 ^ (3 ^ 2)`.\n const right = this.parseExpression(precedence === Precedence.POWER ? precedence - 1 : precedence);\n const operator = BINARY_OPERATORS[token.type]!;\n if (precedence === Precedence.COMPARE && INFIX_PRECEDENCE[this.current.type] === Precedence.COMPARE) {\n this.error(\n 'COMPARACIÓN_ENCADENADA',\n 'No se pueden encadenar comparaciones.',\n { start, end: this.current.span.end },\n 'Une las dos comparaciones con `y`, por ejemplo: `1 < x y x < 5`.',\n );\n }\n return { kind: 'Binary', id: this.id(), operator, left, right, span: this.spanFrom(start) };\n }\n }\n }\n\n private parseList(): ast.ListLiteral {\n const start = this.advance().span.start;\n const elements = this.parseList_(TokenType.RBRACKET, 'para cerrar la lista');\n return { kind: 'ListLiteral', id: this.id(), elements, span: this.spanFrom(start) };\n }\n\n private parseDict(): ast.DictLiteral {\n const open = this.advance();\n const entries: ast.DictEntry[] = [];\n const literalKeys = new Set<string | number>();\n while (!this.check(TokenType.RBRACE)) {\n const entryStart = this.current.span.start;\n if (this.check(TokenType.IDENT) && this.peek().type === TokenType.COLON) {\n this.error(\n 'CLAVE_SIN_COMILLAS',\n `La clave \\`${this.current.lexeme}\\` necesita comillas.`,\n this.current.span,\n `Escribe \\`\"${this.current.lexeme}\": …\\`. Si querías usar el valor de una variable como clave, ponla entre paréntesis: \\`(${this.current.lexeme}): …\\`.`,\n );\n }\n const key = this.grouped(() => this.parseExpression());\n this.expect(TokenType.COLON, 'después de la clave', 'Cada elemento de un diccionario se escribe `clave: valor`.');\n const value = this.grouped(() => this.parseExpression());\n if (key.kind === 'StringLiteral' || key.kind === 'NumberLiteral') {\n if (literalKeys.has(key.value)) {\n this.error('CLAVE_REPETIDA', `La clave ${describeKey(key.value)} está repetida.`, key.span);\n }\n literalKeys.add(key.value);\n if (value.kind === 'FunctionLiteral' && !value.name && key.kind === 'StringLiteral') value.name = key.value;\n }\n entries.push({ key, value, span: this.spanFrom(entryStart) });\n if (!this.match(TokenType.COMMA)) break;\n }\n if (!this.check(TokenType.RBRACE)) {\n this.failSilentlyOnIllegal();\n this.error(\n 'TOKEN_ESPERADO',\n `Se esperaba \\`,\\` o \\`}\\` en el diccionario que empieza en la línea ${open.span.start.line}, pero se encontró ${describeToken(this.current)}.`,\n this.current.span,\n );\n }\n this.advance();\n return { kind: 'DictLiteral', id: this.id(), entries, span: this.spanFrom(open.span.start) };\n }\n\n /** Expresiones separadas por comas hasta `closing`. Se permite una coma final. */\n private parseList_(closing: TokenType, context: string): ast.Expression[] {\n const items: ast.Expression[] = [];\n while (!this.check(closing)) {\n items.push(this.grouped(() => this.parseExpression()));\n if (!this.match(TokenType.COMMA)) break;\n }\n this.expect(closing, context);\n return items;\n }\n\n private parseFunctionDeclaration(): ast.FunctionDeclaration {\n const start = this.advance().span.start;\n const name = this.parseBindingName('después de `procedimiento`');\n const fn = this.parseFunction(start, name.name);\n return { kind: 'FunctionDeclaration', id: this.id(), name, function: fn, span: fn.span };\n }\n\n /** Parámetros y cuerpo; `procedimiento` (y el nombre, si lo hay) ya se leyeron. */\n private parseFunction(start: Position, name?: string): ast.FunctionLiteral {\n this.expect(\n TokenType.LPAREN,\n 'después de `procedimiento`',\n 'Los parámetros van entre paréntesis: `procedimiento(a, b) { … }`.',\n );\n const params: ast.Identifier[] = [];\n const seen = new Set<string>();\n while (!this.check(TokenType.RPAREN)) {\n const param = this.parseBindingName('como parámetro');\n if (seen.has(param.name)) {\n this.error('PARÁMETRO_REPETIDO', `El parámetro \\`${param.name}\\` está repetido.`, param.span);\n }\n seen.add(param.name);\n params.push(param);\n if (!this.match(TokenType.COMMA)) break;\n }\n this.expect(TokenType.RPAREN, 'para cerrar los parámetros');\n // `romper` y `continuar` no cruzan los límites de un procedimiento.\n const loopDepth = this.loopDepth;\n this.loopDepth = 0;\n let body: ast.Block;\n try {\n body = this.parseBlock('para el cuerpo del procedimiento');\n } finally {\n this.loopDepth = loopDepth;\n }\n return { kind: 'FunctionLiteral', id: this.id(), name, params, body, span: this.spanFrom(start) };\n }\n}\n\nconst describeKey = (key: string | number): string => (typeof key === 'string' ? JSON.stringify(key) : String(key));\n",
8
+ "import { CodexivoError } from '../errors';\nimport type * as ast from './ast';\nimport { tokenize } from './lexer';\nimport { describeToken, describeTokenType, TokenType } from './token';\nimport type { Position, Span, Token } from './token';\n\nexport interface ParseResult {\n program: ast.Program;\n tokens: Token[];\n /** Errores léxicos y sintácticos, en el orden en que aparecen en el código. */\n errors: CodexivoError[];\n /** Cómo se construyó el árbol, paso a paso. Solo con `{ trace: true }`. */\n trace?: ParseEvent[];\n}\n\nexport interface ParseOptions {\n /** Registra en `trace` cada paso del parser. Sin esta opción el parser no hace ningún trabajo extra. */\n trace?: boolean;\n}\n\n/** Un operador en una decisión de precedencia. */\nexport interface PrecedenceOperator {\n /** El texto del operador tal como está en el código (`+`, `y`, `es_igual_a`, `(` de una llamada…). */\n operator: string;\n /** La precedencia con la que se compara: más alta, agrupa antes. */\n precedence: number;\n}\n\n/**\n * Un paso del parser. Todos son objetos planos con su `span`: se pueden convertir a JSON o mandar desde un Web Worker.\n *\n * - `consume`: toma el token número `index` de `tokens`.\n * - `enter` / `exit`: empieza o termina de construir un nodo. `exit.id` es el `id` del nodo en el AST. Un nodo que se\n * construye a partir de otro que ya estaba hecho (el lado izquierdo de `1 + 2`, el procedimiento de una llamada, la\n * variable de una asignación) lo indica en `enter.left`.\n * - `precedence`: el parser Pratt decide de quién es `operand`. Si `incoming` tiene más precedencia que `building` (el\n * operador que se está construyendo), `incoming` se lo lleva; si no, se queda con `building`. Sin `building`, no hay\n * operador esperando ese valor.\n * - `error`: un error de sintaxis (el mismo de `errors`).\n * - `recover`: después de un error, el parser abandona los nodos que seguían abiertos (`abandoned`, del más interno al\n * más externo; no tendrán `exit`), salta los tokens `skipped.from` a `skipped.to - 1` y sigue desde `skipped.to`.\n */\nexport type ParseEvent =\n | { type: 'consume'; index: number; tokenType: TokenType; lexeme: string; span: Span }\n | { type: 'enter'; kind: ast.Node['kind']; left?: number; span: Span }\n | { type: 'exit'; kind: ast.Node['kind']; id: number; span: Span }\n | {\n type: 'precedence';\n operand: number;\n building?: PrecedenceOperator;\n incoming: PrecedenceOperator;\n decision: 'se_queda' | 'se_lo_lleva';\n span: Span;\n }\n | { type: 'error'; code: string; message: string; span: Span }\n | {\n type: 'recover';\n abandoned: ast.Node['kind'][];\n skipped: { from: number; to: number };\n span: Span;\n };\n\n/** Analiza el código y construye el AST. Nunca lanza: los problemas se reportan en `errors`. */\nexport const parse = (source: string, options: ParseOptions = {}): ParseResult => {\n const { tokens, errors: lexicalErrors } = tokenize(source);\n const parser = new Parser(tokens, options.trace ? [] : undefined);\n const program = parser.parseProgram();\n const errors = [...lexicalErrors, ...parser.errors].sort(\n (a, b) => (a.span?.start.offset ?? 0) - (b.span?.start.offset ?? 0),\n );\n return parser.trace ? { program, tokens, errors, trace: parser.trace } : { program, tokens, errors };\n};\n\n/** `parse` con la traza: cómo se construyó el árbol, paso a paso. */\nexport const traceParse = (source: string): ParseResult & { trace: ParseEvent[] } =>\n parse(source, { trace: true }) as ParseResult & { trace: ParseEvent[] };\n\nenum Precedence {\n LOWEST,\n OR,\n AND,\n NOT,\n COMPARE,\n SUM,\n PRODUCT,\n UNARY,\n POWER,\n CALL,\n}\n\nconst INFIX_PRECEDENCE: Partial<Record<TokenType, Precedence>> = {\n [TokenType.OR]: Precedence.OR,\n [TokenType.AND]: Precedence.AND,\n [TokenType.EQ]: Precedence.COMPARE,\n [TokenType.NEQ]: Precedence.COMPARE,\n [TokenType.LT]: Precedence.COMPARE,\n [TokenType.GT]: Precedence.COMPARE,\n [TokenType.LTE]: Precedence.COMPARE,\n [TokenType.GTE]: Precedence.COMPARE,\n [TokenType.PLUS]: Precedence.SUM,\n [TokenType.MINUS]: Precedence.SUM,\n [TokenType.STAR]: Precedence.PRODUCT,\n [TokenType.SLASH]: Precedence.PRODUCT,\n [TokenType.PERCENT]: Precedence.PRODUCT,\n [TokenType.MOD]: Precedence.PRODUCT,\n [TokenType.DIV]: Precedence.PRODUCT,\n [TokenType.CARET]: Precedence.POWER,\n [TokenType.LPAREN]: Precedence.CALL,\n [TokenType.LBRACKET]: Precedence.CALL,\n [TokenType.DOT]: Precedence.CALL,\n};\n\nconst BINARY_OPERATORS: Partial<Record<TokenType, ast.BinaryOperator>> = {\n [TokenType.PLUS]: '+',\n [TokenType.MINUS]: '-',\n [TokenType.STAR]: '*',\n [TokenType.SLASH]: '/',\n [TokenType.PERCENT]: 'mod',\n [TokenType.MOD]: 'mod',\n [TokenType.DIV]: 'div',\n [TokenType.CARET]: '^',\n [TokenType.EQ]: '==',\n [TokenType.NEQ]: '!=',\n [TokenType.LT]: '<',\n [TokenType.GT]: '>',\n [TokenType.LTE]: '<=',\n [TokenType.GTE]: '>=',\n};\n\nconst ASSIGNMENT_OPERATORS: Partial<Record<TokenType, ast.AssignmentOperator>> = {\n [TokenType.ASSIGN]: '=',\n [TokenType.PLUS_ASSIGN]: '+=',\n [TokenType.MINUS_ASSIGN]: '-=',\n [TokenType.STAR_ASSIGN]: '*=',\n [TokenType.SLASH_ASSIGN]: '/=',\n [TokenType.PERCENT_ASSIGN]: '%=',\n};\n\nconst INCREMENT_OPERATORS: Partial<Record<TokenType, ast.IncrementOperator>> = {\n [TokenType.INCREMENT]: '++',\n [TokenType.DECREMENT]: '--',\n};\n\nconst STATEMENT_KEYWORDS = new Set([\n TokenType.LET,\n TokenType.DOMAIN,\n TokenType.CONST,\n TokenType.REPEAT,\n TokenType.FOR_EACH,\n TokenType.BREAK,\n TokenType.CONTINUE,\n TokenType.FUNCTION,\n TokenType.RETURN,\n TokenType.IF,\n TokenType.WHILE,\n TokenType.DO,\n TokenType.FOR,\n]);\n\n/** Lo único que puede ir dentro de un `dominio`. */\nconst DOMAIN_MEMBERS = new Set<ast.Statement['kind']>(['VariableDeclaration', 'FunctionDeclaration', 'Domain']);\n\n/** Cómo empieza una sentencia, para nombrarla en un mensaje. */\nconst printStart = (statement: ast.Statement): string | undefined => {\n switch (statement.kind) {\n case 'If':\n return 'si';\n case 'While':\n return 'mientras';\n case 'DoUntil':\n return 'hacer';\n case 'For':\n return 'para';\n case 'ForEach':\n return 'para_cada';\n case 'Repeat':\n return 'repetir';\n case 'Return':\n return 'regresa';\n case 'Break':\n return 'romper';\n case 'Continue':\n return 'continuar';\n case 'Block':\n return '{';\n default:\n return undefined;\n }\n};\n\nconst KEYWORD_LIKE_TYPOS: Readonly<Record<string, string>> = {\n sino: 'En Codexivo se escribe `si_no`, con guion bajo.',\n pero: 'En Codexivo se escribe `pero_si`, con guion bajo.',\n};\n\nconst MAX_ERRORS = 50;\nconst MAX_DEPTH = 400;\n\n/** Señal interna para abandonar la sentencia actual. El error, si lo hay, ya se registró. */\nclass ParseFailure {}\n\nclass Parser {\n readonly errors: CodexivoError[] = [];\n private position = 0;\n private nextId = 1;\n private depth = 0;\n /**\n * Paréntesis, corchetes o llaves abiertos alrededor de la expresión actual. Dentro de ellos una expresión puede\n * seguir en la línea siguiente; fuera, un salto de línea la termina (salvo después de un operador).\n */\n private grouping = 0;\n /** Bucles abiertos alrededor de la sentencia actual, sin contar los de afuera de un procedimiento. */\n private loopDepth = 0;\n /** Con traza: los nodos con `enter` que todavía no tienen `exit`. */\n private readonly open: ast.Node['kind'][] = [];\n\n constructor(\n private readonly tokens: Token[],\n /** Los pasos del parser, solo si se pidió la traza. */\n readonly trace?: ParseEvent[],\n ) {}\n\n parseProgram(): ast.Program {\n const start = this.current.span.start;\n this.begin('Program');\n const statements = this.parseStatements(TokenType.EOF);\n return this.finish({ kind: 'Program', id: this.id(), statements, span: { start, end: this.current.span.end } });\n }\n\n // ── utilidades ─────────────────────────────────────────────────────────────\n\n private get current(): Token {\n return this.tokens[this.position] ?? this.tokens[this.tokens.length - 1]!;\n }\n\n private get previous(): Token {\n return this.tokens[this.position - 1] ?? this.current;\n }\n\n private peek(ahead = 1): Token {\n return this.tokens[this.position + ahead] ?? this.tokens[this.tokens.length - 1]!;\n }\n\n private id(): number {\n return this.nextId++;\n }\n\n private advance(): Token {\n const token = this.current;\n if (token.type === TokenType.EOF) return token;\n this.trace?.push({\n type: 'consume',\n index: this.position,\n tokenType: token.type,\n lexeme: token.lexeme,\n span: token.span,\n });\n this.position += 1;\n return token;\n }\n\n /** Salta un token al recuperarse de un error; en la traza va dentro de `recover`, no como `consume`. */\n private skip(): void {\n if (!this.check(TokenType.EOF)) this.position += 1;\n }\n\n // ── traza ──────────────────────────────────────────────────────────────────\n\n /** Empieza a construir un nodo. `left` es el nodo ya construido que el nuevo toma como primer hijo. */\n private begin(kind: ast.Node['kind'], left?: ast.Node, span: Span = this.current.span): void {\n if (!this.trace) return;\n this.open.push(kind);\n this.trace.push(left ? { type: 'enter', kind, left: left.id, span } : { type: 'enter', kind, span });\n }\n\n /** Termina de construir un nodo (su `begin` ya se registró). */\n private finish<T extends ast.Node>(node: T): T {\n if (!this.trace) return node;\n this.open.pop();\n this.trace.push({ type: 'exit', kind: node.kind, id: node.id, span: node.span });\n return node;\n }\n\n /** Un nodo hecho de un solo token: `begin`, `consume` y `finish`. */\n private leaf<T extends ast.Node>(kind: T['kind'], build: (token: Token, id: number) => T): T {\n this.begin(kind);\n const token = this.advance();\n return this.finish(build(token, this.id()));\n }\n\n private tracePrecedence(\n operand: ast.Expression,\n precedence: Precedence,\n owner: Token | undefined,\n incoming: Precedence,\n takes: boolean,\n ): void {\n this.trace!.push({\n type: 'precedence',\n operand: operand.id,\n ...(owner ? { building: { operator: owner.lexeme, precedence } } : {}),\n incoming: { operator: this.current.lexeme, precedence: incoming },\n decision: takes ? 'se_lo_lleva' : 'se_queda',\n span: this.current.span,\n });\n }\n\n /** Después de un error: los nodos abiertos desde `openBefore` se abandonan y se saltaron los tokens desde `from`. */\n private traceRecover(openBefore: number, from: number): void {\n if (!this.trace) return;\n const to = this.position;\n const span =\n to > from\n ? { start: this.tokens[from]!.span.start, end: this.tokens[to - 1]!.span.end }\n : { start: this.current.span.start, end: this.current.span.start };\n const abandoned = this.open.splice(openBefore).reverse();\n this.trace.push({ type: 'recover', abandoned, skipped: { from, to }, span });\n }\n\n private check(type: TokenType): boolean {\n return this.current.type === type;\n }\n\n private match(type: TokenType): boolean {\n if (!this.check(type)) return false;\n this.advance();\n return true;\n }\n\n private spanFrom(start: Position): Span {\n return { start, end: this.previous.span.end };\n }\n\n private error(code: string, message: string, span: Span, hint?: string): never {\n this.report(code, message, span, hint);\n throw new ParseFailure();\n }\n\n /** Registra un error sin abandonar lo que se está analizando. */\n private report(code: string, message: string, span: Span, hint?: string): void {\n if (this.errors.length >= MAX_ERRORS) return;\n this.errors.push(new CodexivoError({ kind: 'sintaxis', code, message, hint, span }));\n this.trace?.push({ type: 'error', code, message, span });\n }\n\n /** Un token ILLEGAL ya tiene su error léxico; no lo reportamos dos veces. */\n private failSilentlyOnIllegal(): void {\n if (this.check(TokenType.ILLEGAL)) throw new ParseFailure();\n }\n\n private expect(type: TokenType, context: string, hint?: string): Token {\n if (this.check(type)) return this.advance();\n this.failSilentlyOnIllegal();\n const found = this.current;\n let finalHint = hint;\n if (type === TokenType.RPAREN && found.type === TokenType.ASSIGN) {\n finalHint = 'Para comparar se usa `es_igual_a` (o `==`); un solo `=` sirve para asignar.';\n }\n this.error(\n 'TOKEN_ESPERADO',\n `Se esperaba ${describeTokenType(type)} ${context}, pero se encontró ${describeToken(found)}.`,\n found.span,\n finalHint,\n );\n }\n\n private enter(): void {\n this.depth += 1;\n if (this.depth > MAX_DEPTH) {\n this.error(\n 'ANIDAMIENTO_EXCESIVO',\n 'El programa tiene demasiados niveles anidados.',\n this.current.span,\n 'Divide la expresión en variables intermedias.',\n );\n }\n }\n\n private leave(): void {\n this.depth -= 1;\n }\n\n /** Salta tokens hasta un punto seguro para seguir analizando después de un error. */\n private synchronize(failedAt: Token): void {\n if (this.position === this.tokens.indexOf(failedAt)) this.skip();\n while (!this.check(TokenType.EOF)) {\n if (this.previous.type === TokenType.SEMICOLON) return;\n if (this.check(TokenType.RBRACE)) return;\n if (STATEMENT_KEYWORDS.has(this.current.type)) return;\n if (this.current.span.start.line > failedAt.span.start.line) return;\n this.skip();\n }\n }\n\n // ── sentencias ─────────────────────────────────────────────────────────────\n\n private parseStatements(terminator: TokenType.EOF | TokenType.RBRACE): ast.Statement[] {\n // Un bloque dentro de un paréntesis (el cuerpo de un procedimiento que se pasa como argumento) vuelve a\n // terminar sus sentencias con el salto de línea.\n const grouping = this.grouping;\n this.grouping = 0;\n try {\n return this.parseStatementList(terminator);\n } finally {\n this.grouping = grouping;\n }\n }\n\n private parseStatementList(terminator: TokenType.EOF | TokenType.RBRACE): ast.Statement[] {\n const statements: ast.Statement[] = [];\n let recovering = false;\n while (!this.check(terminator) && !this.check(TokenType.EOF)) {\n const failedAt = this.current;\n const openBefore = this.open.length;\n try {\n if (terminator === TokenType.EOF && this.check(TokenType.RBRACE)) {\n // Una `}` sobrante después de un error suele ser parte de lo que ya se reportó.\n if (recovering) {\n const from = this.position;\n this.skip();\n this.traceRecover(openBefore, from);\n continue;\n }\n this.error('LLAVE_SOBRANTE', 'Sobra esta `}`: no hay ningún bloque abierto.', this.current.span);\n }\n statements.push(this.parseStatement());\n recovering = false;\n } catch (error) {\n if (!(error instanceof ParseFailure)) throw error;\n this.depth = 0;\n recovering = true;\n const from = this.position;\n this.synchronize(failedAt);\n this.traceRecover(openBefore, from);\n }\n }\n this.checkDuplicateProcedures(statements);\n return statements;\n }\n\n /** Un procedimiento con nombre existe desde el inicio de su bloque, así que su nombre no se puede repetir ahí. */\n private checkDuplicateProcedures(statements: ast.Statement[]): void {\n const procedures = new Set(\n statements.flatMap(statement => (statement.kind === 'FunctionDeclaration' ? [statement.name.name] : [])),\n );\n if (procedures.size === 0) return;\n const seen = new Set<string>();\n for (const statement of statements) {\n if (statement.kind !== 'FunctionDeclaration' && statement.kind !== 'VariableDeclaration') continue;\n const { name } = statement;\n if (!procedures.has(name.name)) continue;\n if (statement.kind === 'FunctionDeclaration' && !seen.has(name.name)) {\n seen.add(name.name);\n continue;\n }\n if (this.errors.length >= MAX_ERRORS) return;\n this.report(\n 'NOMBRE_REPETIDO',\n `Ya hay un procedimiento llamado \\`${name.name}\\` en este bloque.`,\n name.span,\n 'Un procedimiento con nombre existe desde el inicio de su bloque; cambia uno de los dos nombres.',\n );\n }\n }\n\n private parseStatement(): ast.Statement {\n const token = this.current;\n switch (token.type) {\n case TokenType.SEMICOLON:\n this.advance();\n return this.parseStatementAfterStraySemicolon();\n case TokenType.LET:\n case TokenType.CONST:\n return this.endSimpleStatement(this.parseVariableDeclaration());\n case TokenType.RETURN:\n return this.endSimpleStatement(this.parseReturn());\n case TokenType.IF:\n return this.endCompoundStatement(this.parseIf());\n case TokenType.WHILE:\n return this.endCompoundStatement(this.parseWhile());\n case TokenType.DO:\n return this.endSimpleStatement(this.parseDoUntil());\n case TokenType.FOR:\n return this.endCompoundStatement(this.parseFor());\n case TokenType.REPEAT:\n return this.endCompoundStatement(this.parseRepeat());\n case TokenType.FOR_EACH:\n return this.endCompoundStatement(this.parseForEach());\n case TokenType.DOMAIN:\n return this.endCompoundStatement(this.parseDomain());\n case TokenType.BREAK:\n case TokenType.CONTINUE:\n return this.endSimpleStatement(this.parseLoopJump());\n case TokenType.IN:\n this.error('EN_SIN_PARA_CADA', '`en` solo se usa dentro de `para_cada … en …`.', token.span);\n case TokenType.FUNCTION:\n if (this.peek().type === TokenType.IDENT) return this.endCompoundStatement(this.parseFunctionDeclaration());\n return this.endSimpleStatement(this.parseSimpleStatement());\n case TokenType.LBRACE:\n if (\n (this.peek().type === TokenType.STRING || this.peek().type === TokenType.NUMBER) &&\n this.peek(2).type === TokenType.COLON\n ) {\n this.error(\n 'DICCIONARIO_COMO_SENTENCIA',\n 'Al inicio de una sentencia, `{` abre un bloque, no un diccionario.',\n token.span,\n 'Guarda el diccionario en una variable: `variable d = { \"clave\": valor }`.',\n );\n }\n return this.endCompoundStatement(this.parseBlock('para abrir el bloque'));\n case TokenType.ELSE:\n case TokenType.ELSEIF:\n this.error(\n 'RAMA_SIN_SI',\n `${describeToken(token)} tiene que ir justo después del \\`}\\` de un \\`si\\`.`,\n token.span,\n );\n case TokenType.UNTIL:\n this.error('HASTA_QUE_SIN_HACER', '`hasta_que` tiene que ir justo después del `}` de un `hacer`.', token.span);\n case TokenType.IDENT: {\n const typoHint = KEYWORD_LIKE_TYPOS[token.lexeme];\n const next = this.peek();\n if (\n typoHint &&\n (next.type === TokenType.LBRACE || next.type === TokenType.IF || next.type === TokenType.LPAREN)\n ) {\n this.error('PALABRA_DESCONOCIDA', `\\`${token.lexeme}\\` no es una palabra de Codexivo.`, token.span, typoHint);\n }\n return this.endSimpleStatement(this.parseSimpleStatement());\n }\n default:\n return this.endSimpleStatement(this.parseSimpleStatement());\n }\n }\n\n private parseStatementAfterStraySemicolon(): ast.Statement {\n // `;;` o un `;` suelto no hacen nada; seguimos con lo que venga.\n if (this.check(TokenType.EOF) || this.check(TokenType.RBRACE)) {\n const span = this.previous.span;\n this.begin('Block', undefined, span);\n return this.finish({ kind: 'Block', id: this.id(), statements: [], span });\n }\n return this.parseStatement();\n }\n\n /** Después de una sentencia simple va `;`, el final de la línea, `}` o el final del programa. */\n private endSimpleStatement<T extends ast.Statement>(statement: T): T {\n if (this.match(TokenType.SEMICOLON)) return statement;\n if (this.check(TokenType.RBRACE) || this.check(TokenType.EOF)) return statement;\n if (this.current.span.start.line > this.previous.span.end.line) return statement;\n this.failSilentlyOnIllegal();\n this.error(\n 'FIN_DE_SENTENCIA',\n `Se esperaba \\`;\\` o un salto de línea antes de ${describeToken(this.current)}.`,\n this.current.span,\n 'Si querías combinar dos valores, falta un operador entre ellos.',\n );\n }\n\n private endCompoundStatement<T extends ast.Statement>(statement: T): T {\n this.match(TokenType.SEMICOLON);\n return statement;\n }\n\n private parseVariableDeclaration(): ast.VariableDeclaration {\n this.begin('VariableDeclaration');\n const keyword = this.advance(); // variable / constante\n const constant = keyword.type === TokenType.CONST;\n const name = this.parseBindingName(`después de \\`${keyword.lexeme}\\``);\n this.expect(\n TokenType.ASSIGN,\n `después de \\`${keyword.lexeme} ${name.name}\\``,\n constant\n ? `Toda constante necesita su valor desde el principio: \\`constante ${name.name} = 10\\`.`\n : `Toda variable empieza con un valor: \\`variable ${name.name} = 0\\`.`,\n );\n const value = this.parseExpression();\n if (value.kind === 'FunctionLiteral' && !value.name) value.name = name.name;\n return this.finish({\n kind: 'VariableDeclaration',\n id: this.id(),\n constant,\n name,\n value,\n span: this.spanFrom(keyword.span.start),\n });\n }\n\n private parseBindingName(context: string): ast.Identifier {\n const token = this.current;\n if (token.type !== TokenType.IDENT) {\n this.failSilentlyOnIllegal();\n if (token.lexeme && /^[a-z_]+$/.test(token.lexeme) && token.type !== TokenType.EOF) {\n // Se salta la palabra para que, al recuperarse, no empiece otra sentencia (`variable dominio = 1`).\n this.advance();\n this.error(\n 'PALABRA_RESERVADA',\n `\\`${token.lexeme}\\` es una palabra reservada y no se puede usar como nombre.`,\n token.span,\n 'Elige otro nombre, por ejemplo agregando una palabra: `valor_inicial`.',\n );\n }\n this.error(\n 'NOMBRE_ESPERADO',\n `Se esperaba un nombre ${context}, pero se encontró ${describeToken(token)}.`,\n token.span,\n );\n }\n return this.leaf('Identifier', (token, id) => ({ kind: 'Identifier', id, name: token.lexeme, span: token.span }));\n }\n\n /** Asignación (`x = …`, `lista[i] += …`), incremento (`i++`) o expresión. */\n private parseSimpleStatement(): ast.Assignment | ast.Increment | ast.ExpressionStatement {\n const start = this.current.span.start;\n const expression = this.parseExpression(Precedence.LOWEST, true);\n const operator = ASSIGNMENT_OPERATORS[this.current.type];\n const increment = INCREMENT_OPERATORS[this.current.type];\n if (!operator && !increment) {\n this.begin('ExpressionStatement', expression, expression.span);\n return this.finish({ kind: 'ExpressionStatement', id: this.id(), expression, span: this.spanFrom(start) });\n }\n if (expression.kind !== 'Identifier' && expression.kind !== 'Index') {\n this.error(\n 'ASIGNACIÓN_INVÁLIDA',\n increment\n ? `\\`${this.current.lexeme}\\` solo funciona con una variable o un elemento, como \\`i${this.current.lexeme}\\` o \\`lista[0]${this.current.lexeme}\\`.`\n : 'Solo se le puede asignar un valor a una variable o a un elemento, como `x = 1` o `lista[0] = 1`.',\n this.current.span,\n );\n }\n this.begin(increment ? 'Increment' : 'Assignment', expression);\n this.advance();\n if (increment) {\n return this.finish({\n kind: 'Increment',\n id: this.id(),\n target: expression,\n operator: increment,\n span: this.spanFrom(start),\n });\n }\n const value = this.parseExpression();\n if (value.kind === 'FunctionLiteral' && !value.name && expression.kind === 'Identifier') {\n value.name = expression.name;\n }\n return this.finish({\n kind: 'Assignment',\n id: this.id(),\n target: expression,\n operator: operator!,\n value,\n span: this.spanFrom(start),\n });\n }\n\n private parseReturn(): ast.Return {\n this.begin('Return');\n const keyword = this.advance();\n const endsHere =\n this.check(TokenType.SEMICOLON) ||\n this.check(TokenType.RBRACE) ||\n this.check(TokenType.EOF) ||\n this.current.span.start.line > keyword.span.end.line;\n const value = endsHere ? undefined : this.parseExpression();\n return this.finish({ kind: 'Return', id: this.id(), value, span: this.spanFrom(keyword.span.start) });\n }\n\n private parseBlock(context: string): ast.Block {\n this.begin('Block');\n const open = this.expect(TokenType.LBRACE, context, 'Los bloques de Codexivo siempre van entre llaves `{ }`.');\n const statements = this.parseStatements(TokenType.RBRACE);\n if (!this.check(TokenType.RBRACE)) {\n this.error(\n 'BLOQUE_SIN_CERRAR',\n `Falta \\`}\\` para cerrar el bloque que empieza en la línea ${open.span.start.line}.`,\n open.span,\n );\n }\n this.advance();\n return this.finish({ kind: 'Block', id: this.id(), statements, span: this.spanFrom(open.span.start) });\n }\n\n /** Analiza `parse` dentro de paréntesis, corchetes o llaves, donde los saltos de línea no terminan nada. */\n private grouped<T>(parse: () => T): T {\n this.grouping += 1;\n try {\n return parse();\n } finally {\n this.grouping -= 1;\n }\n }\n\n private parseCondition(keyword: string): ast.Expression {\n this.expect(\n TokenType.LPAREN,\n `después de \\`${keyword}\\``,\n `La condición va entre paréntesis: \\`${keyword} (x > 0)\\`.`,\n );\n const condition = this.grouped(() => this.parseExpression());\n this.expect(TokenType.RPAREN, `para cerrar la condición de \\`${keyword}\\``);\n return condition;\n }\n\n private parseIf(): ast.If {\n const start = this.current.span.start;\n this.begin('If');\n const branches: ast.IfBranch[] = [];\n let keyword = 'si';\n do {\n const branchStart = this.advance().span.start; // si / pero_si\n const condition = this.parseCondition(keyword);\n const body = this.parseBlock(`después de la condición de \\`${keyword}\\``);\n branches.push({ condition, body, span: this.spanFrom(branchStart) });\n keyword = 'pero_si';\n } while (this.check(TokenType.ELSEIF));\n\n let alternative: ast.Block | undefined;\n if (this.match(TokenType.ELSE)) {\n if (this.check(TokenType.IF)) {\n this.error(\n 'SI_NO_SI',\n 'Después de `si_no` va directamente un bloque.',\n this.current.span,\n 'Para otra condición usa `pero_si (…)`.',\n );\n }\n alternative = this.parseBlock('después de `si_no`');\n }\n return this.finish({ kind: 'If', id: this.id(), branches, alternative, span: this.spanFrom(start) });\n }\n\n private parseWhile(): ast.While {\n this.begin('While');\n const start = this.advance().span.start;\n const condition = this.parseCondition('mientras');\n const body = this.parseLoopBody('después de la condición de `mientras`');\n return this.finish({ kind: 'While', id: this.id(), condition, body, span: this.spanFrom(start) });\n }\n\n private parseDoUntil(): ast.DoUntil {\n this.begin('DoUntil');\n const start = this.advance().span.start;\n const body = this.parseLoopBody('después de `hacer`');\n this.expect(\n TokenType.UNTIL,\n 'después del bloque de `hacer`',\n 'La forma completa es `hacer { … } hasta_que (condición)`.',\n );\n const condition = this.parseCondition('hasta_que');\n return this.finish({ kind: 'DoUntil', id: this.id(), body, condition, span: this.spanFrom(start) });\n }\n\n private parseFor(): ast.For | ast.ForRange {\n this.begin(this.peek().type === TokenType.LPAREN ? 'For' : 'ForRange');\n const start = this.advance().span.start;\n // `para i desde …` cuenta; `para (…; …; …)` es la forma clásica.\n if (!this.check(TokenType.LPAREN)) return this.parseForRange(start);\n this.expect(\n TokenType.LPAREN,\n 'después de `para`',\n 'La forma completa es `para (variable i = 0; i < 10; i += 1) { … }`.',\n );\n\n const { init, condition, update } = this.grouped(() => {\n let init: ast.For['init'];\n if (!this.check(TokenType.SEMICOLON)) {\n if (this.check(TokenType.LET) || this.check(TokenType.CONST)) init = this.parseVariableDeclaration();\n else init = this.parseSimpleStatement();\n }\n this.expect(TokenType.SEMICOLON, 'después del inicio del `para`');\n\n const condition = this.check(TokenType.SEMICOLON) ? undefined : this.parseExpression();\n this.expect(TokenType.SEMICOLON, 'después de la condición del `para`');\n\n let update: ast.For['update'];\n if (!this.check(TokenType.RPAREN)) update = this.parseSimpleStatement();\n this.expect(TokenType.RPAREN, 'para cerrar el `para`');\n return { init, condition, update };\n });\n\n const body = this.parseLoopBody('después de `para (…)`');\n return this.finish({ kind: 'For', id: this.id(), init, condition, update, body, span: this.spanFrom(start) });\n }\n\n private parseForRange(start: Position): ast.ForRange {\n const form = 'La forma completa es `para i desde 1 hasta 10 { … }`.';\n if (this.check(TokenType.LET)) {\n // Se salta `variable` para no reportar también la declaración incompleta.\n this.advance();\n this.error(\n 'TOKEN_ESPERADO',\n 'La variable de `para … desde … hasta` se escribe sin `variable`.',\n this.current.span,\n form,\n );\n }\n const variable = this.parseBindingName('después de `para`');\n if (this.check(TokenType.ASSIGN)) {\n this.error(\n 'TOKEN_ESPERADO',\n `Para contar se escribe \\`desde\\`, no \\`=\\`: \\`para ${variable.name} desde 1 hasta 10\\`.`,\n this.current.span,\n 'La forma clásica `para (variable i = 0; i < 10; i++)` va entre paréntesis.',\n );\n }\n // Un `{` justo después de `desde`, `hasta` o `con_paso` es el cuerpo, no un diccionario: falta el valor.\n const value = (after: string): ast.Expression => {\n if (this.check(TokenType.LBRACE)) {\n this.error('EXPRESIÓN_ESPERADA', `Falta un valor después de \\`${after}\\`.`, this.current.span, form);\n }\n return this.parseExpression();\n };\n this.expect(TokenType.FROM, `después de \\`para ${variable.name}\\``, form);\n const from = value('desde');\n this.expect(TokenType.TO, 'después del inicio del `para`', form);\n const to = value('hasta');\n const step = this.match(TokenType.STEP) ? value('con_paso') : undefined;\n const body = this.parseLoopBody('después de `para … desde … hasta …`');\n return this.finish({ kind: 'ForRange', id: this.id(), variable, from, to, step, body, span: this.spanFrom(start) });\n }\n\n private parseRepeat(): ast.Repeat {\n this.begin('Repeat');\n const keyword = this.advance();\n if (this.check(TokenType.TIMES) || this.check(TokenType.LBRACE)) {\n this.error(\n 'REPETIR_SIN_CANTIDAD',\n 'Falta cuántas veces se repite.',\n this.current.span,\n 'La forma completa es `repetir 4 veces { … }`.',\n );\n }\n const count = this.parseExpression();\n this.expect(\n TokenType.TIMES,\n 'después de la cantidad de `repetir`',\n 'La forma completa es `repetir 4 veces { … }`.',\n );\n const body = this.parseLoopBody('después de `repetir … veces`');\n return this.finish({ kind: 'Repeat', id: this.id(), count, body, span: this.spanFrom(keyword.span.start) });\n }\n\n private parseDomain(): ast.Domain {\n this.begin('Domain');\n const keyword = this.advance();\n const name = this.parseBindingName('después de `dominio`');\n this.begin('Block');\n const open = this.expect(\n TokenType.LBRACE,\n `después de \\`dominio ${name.name}\\``,\n 'Lo que agrupa un dominio va entre llaves: `dominio calculadora { … }`.',\n );\n // Un dominio no está dentro de ningún bucle, aunque se escriba dentro de uno.\n const loopDepth = this.loopDepth;\n this.loopDepth = 0;\n let statements: ast.Statement[];\n try {\n statements = this.parseStatements(TokenType.RBRACE);\n } finally {\n this.loopDepth = loopDepth;\n }\n if (!this.check(TokenType.RBRACE)) {\n this.error(\n 'BLOQUE_SIN_CERRAR',\n `Falta \\`}\\` para cerrar el dominio que empieza en la línea ${open.span.start.line}.`,\n open.span,\n );\n }\n this.advance();\n for (const statement of statements) {\n if (DOMAIN_MEMBERS.has(statement.kind)) continue;\n this.report(\n 'DOMINIO_SOLO_DECLARACIONES',\n printStart(statement)\n ? `Un dominio solo agrupa declaraciones, y \\`${printStart(statement)}\\` no es una.`\n : 'Un dominio solo agrupa declaraciones, y esta sentencia no es una.',\n statement.span,\n 'Dentro de `dominio` van `variable`, `constante`, `procedimiento` u otro `dominio`. Lo demás va en un procedimiento o fuera del dominio.',\n );\n }\n const body = this.finish<ast.Block>({\n kind: 'Block',\n id: this.id(),\n statements,\n span: this.spanFrom(open.span.start),\n });\n return this.finish({ kind: 'Domain', id: this.id(), name, body, span: this.spanFrom(keyword.span.start) });\n }\n\n private parseForEach(): ast.ForEach {\n this.begin('ForEach');\n const keyword = this.advance();\n const form = 'La forma completa es `para_cada fruta en frutas { … }`, sin paréntesis.';\n if (this.check(TokenType.LPAREN)) {\n this.error('TOKEN_ESPERADO', '`para_cada` no lleva paréntesis.', this.current.span, form);\n }\n const variable = this.parseBindingName('después de `para_cada`');\n let value: ast.Identifier | undefined;\n if (this.match(TokenType.COMMA)) {\n value = this.parseBindingName(`después de \\`para_cada ${variable.name},\\``);\n if (value.name === variable.name) {\n this.error('PARÁMETRO_REPETIDO', `La variable \\`${value.name}\\` está repetida.`, value.span);\n }\n }\n const names = value ? `${variable.name}, ${value.name}` : variable.name;\n this.expect(TokenType.IN, `después de \\`para_cada ${names}\\``, form);\n const iterable = this.parseExpression();\n const body = this.parseLoopBody('después de `para_cada … en …`');\n return this.finish({\n kind: 'ForEach',\n id: this.id(),\n variable,\n value,\n iterable,\n body,\n span: this.spanFrom(keyword.span.start),\n });\n }\n\n /** El cuerpo de un bucle: ahí sí se puede usar `romper` y `continuar`. */\n private parseLoopBody(context: string): ast.Block {\n this.loopDepth += 1;\n try {\n return this.parseBlock(context);\n } finally {\n this.loopDepth -= 1;\n }\n }\n\n private parseLoopJump(): ast.Break | ast.Continue {\n const kind = this.check(TokenType.BREAK) ? 'Break' : 'Continue';\n this.begin(kind);\n const token = this.advance();\n if (this.loopDepth === 0) {\n this.error(\n kind === 'Break' ? 'ROMPER_FUERA_DE_BUCLE' : 'CONTINUAR_FUERA_DE_BUCLE',\n `\\`${token.lexeme}\\` solo se puede usar dentro de un bucle.`,\n token.span,\n kind === 'Break'\n ? 'Para salir de un procedimiento usa `regresa`.'\n : 'Dentro de un procedimiento, `continuar` no afecta al bucle desde donde se llamó.',\n );\n }\n return this.finish({ kind, id: this.id(), span: token.span });\n }\n\n // ── expresiones ────────────────────────────────────────────────────────────\n\n /**\n * `statement` indica que la expresión es una sentencia completa, donde `i++` sí está permitido. `owner` es el operador\n * que espera esta expresión como su lado derecho (o su operando), con precedencia `precedence`; solo se usa en la traza.\n */\n private parseExpression(\n precedence: Precedence = Precedence.LOWEST,\n statement = false,\n owner?: Token,\n ): ast.Expression {\n this.enter();\n let left = this.parsePrefix();\n while (true) {\n const incoming = INFIX_PRECEDENCE[this.current.type];\n if (incoming === undefined) break;\n // Sin `;`, una línea que empieza con `-`, `(` o `[` es otra sentencia, no la continuación de la anterior.\n if (this.grouping === 0 && this.current.span.start.line > this.previous.span.end.line) break;\n // La decisión del parser Pratt: si el operador que llega agrupa más fuerte, se lleva a `left`.\n const takes = precedence < incoming;\n if (this.trace) this.tracePrecedence(left, precedence, owner, incoming, takes);\n if (!takes) break;\n left = this.parseInfix(left);\n }\n if (!statement && INCREMENT_OPERATORS[this.current.type]) this.incrementInExpression(left);\n this.leave();\n return left;\n }\n\n private incrementInExpression(left?: ast.Expression): never {\n const operator = this.current.lexeme;\n const name = left?.kind === 'Identifier' ? left.name : 'i';\n this.error(\n 'INCREMENTO_EN_EXPRESIÓN',\n `\\`${operator}\\` es una sentencia: va sola, justo después del nombre de una variable.`,\n this.current.span,\n left?.kind === 'Identifier' || !left\n ? `Escribe \\`${name}${operator}\\` en su propia línea y después usa \\`${name}\\`.`\n : `Escribe el \\`${operator}\\` en su propia línea, antes o después de usar el valor.`,\n );\n }\n\n private parsePrefix(): ast.Expression {\n const token = this.current;\n switch (token.type) {\n case TokenType.NUMBER:\n return this.leaf('NumberLiteral', (_, id) => ({\n kind: 'NumberLiteral',\n id,\n value: token.value as number,\n span: token.span,\n }));\n case TokenType.STRING:\n return this.leaf('StringLiteral', (_, id) => ({\n kind: 'StringLiteral',\n id,\n value: token.value as string,\n span: token.span,\n }));\n case TokenType.TRUE:\n case TokenType.FALSE:\n return this.leaf('BooleanLiteral', (_, id) => ({\n kind: 'BooleanLiteral',\n id,\n value: token.type === TokenType.TRUE,\n span: token.span,\n }));\n case TokenType.NULL:\n return this.leaf('NullLiteral', (_, id) => ({ kind: 'NullLiteral', id, span: token.span }));\n case TokenType.IDENT:\n return this.leaf('Identifier', (_, id) => ({ kind: 'Identifier', id, name: token.lexeme, span: token.span }));\n case TokenType.LPAREN: {\n this.advance();\n const expression = this.grouped(() => this.parseExpression());\n this.expect(TokenType.RPAREN, 'para cerrar el paréntesis');\n return expression;\n }\n case TokenType.LBRACKET:\n return this.parseList();\n case TokenType.LBRACE:\n return this.parseDict();\n case TokenType.MINUS: {\n this.begin('Unary');\n this.advance();\n const operand = this.parseExpression(Precedence.UNARY, false, token);\n return this.finish({\n kind: 'Unary',\n id: this.id(),\n operator: '-',\n operand,\n span: this.spanFrom(token.span.start),\n });\n }\n case TokenType.NOT:\n case TokenType.BANG: {\n this.begin('Unary');\n this.advance();\n const operand = this.parseExpression(Precedence.NOT, false, token);\n return this.finish({\n kind: 'Unary',\n id: this.id(),\n operator: 'no',\n operand,\n span: this.spanFrom(token.span.start),\n });\n }\n case TokenType.FUNCTION:\n if (this.peek().type === TokenType.IDENT) {\n this.error(\n 'PROCEDIMIENTO_CON_NOMBRE',\n 'Un procedimiento con nombre es una sentencia; no puede ir dentro de una expresión.',\n this.peek().span,\n 'Como valor, escríbelo sin nombre: `variable doble = procedimiento(x) { … }`.',\n );\n }\n this.begin('FunctionLiteral');\n return this.parseFunction(this.advance().span.start);\n case TokenType.INCREMENT:\n case TokenType.DECREMENT:\n if (this.peek().type === TokenType.IDENT) {\n const name = this.peek().lexeme;\n this.error(\n 'INCREMENTO_EN_EXPRESIÓN',\n `En Codexivo \\`${token.lexeme}\\` va después del nombre de la variable.`,\n { start: token.span.start, end: this.peek().span.end },\n `Escribe \\`${name}${token.lexeme}\\` como una sentencia propia.`,\n );\n }\n this.incrementInExpression();\n case TokenType.ILLEGAL:\n throw new ParseFailure();\n case TokenType.IF:\n case TokenType.WHILE:\n case TokenType.FOR:\n case TokenType.DO:\n case TokenType.LET:\n case TokenType.CONST:\n case TokenType.DOMAIN:\n case TokenType.REPEAT:\n case TokenType.FOR_EACH:\n case TokenType.BREAK:\n case TokenType.CONTINUE:\n case TokenType.RETURN:\n this.error(\n 'SENTENCIA_EN_EXPRESIÓN',\n `${describeToken(token)} empieza una sentencia y no se puede usar dentro de una expresión.`,\n token.span,\n );\n case TokenType.EOF:\n this.error(\n 'EXPRESIÓN_INCOMPLETA',\n 'El programa terminó a mitad de una expresión.',\n token.span,\n 'Revisa que no falte un valor al final.',\n );\n default:\n this.error(\n 'EXPRESIÓN_ESPERADA',\n `Se esperaba un valor, pero se encontró ${describeToken(token)}.`,\n token.span,\n /^[a-z_]+$/.test(token.lexeme)\n ? `\\`${token.lexeme}\\` es una palabra reservada; no se puede usar como nombre de variable.`\n : undefined,\n );\n }\n }\n\n private parseInfix(left: ast.Expression): ast.Expression {\n const token = this.current;\n const start = left.span.start;\n switch (token.type) {\n case TokenType.LPAREN: {\n this.begin('Call', left);\n this.advance();\n const args = this.parseList_(TokenType.RPAREN, 'para cerrar los argumentos');\n return this.finish({ kind: 'Call', id: this.id(), callee: left, args, span: this.spanFrom(start) });\n }\n case TokenType.LBRACKET: {\n this.begin('Index', left);\n this.advance();\n if (this.check(TokenType.RBRACKET)) {\n this.error(\n 'ÍNDICE_VACÍO',\n 'Falta el índice entre los corchetes.',\n this.current.span,\n 'Por ejemplo: `lista[0]`.',\n );\n }\n const index = this.grouped(() => this.parseExpression());\n this.expect(TokenType.RBRACKET, 'para cerrar el índice');\n return this.finish({ kind: 'Index', id: this.id(), object: left, index, span: this.spanFrom(start) });\n }\n case TokenType.DOT: {\n this.begin('Index', left);\n this.advance();\n const property = this.current;\n if (property.type !== TokenType.IDENT) {\n this.failSilentlyOnIllegal();\n // Una palabra reservada como `si` no debe empezar otra sentencia al recuperarse del error.\n if (property.type !== TokenType.EOF) this.advance();\n this.error(\n 'CAMPO_ESPERADO',\n `Después de \\`.\\` va el nombre de un campo, pero se encontró ${describeToken(property)}.`,\n property.span,\n 'Con `.` solo se usan claves que son nombres válidos; para las demás escribe `d[\"clave\"]`.',\n );\n }\n const index = this.leaf<ast.StringLiteral>('StringLiteral', (_, id) => ({\n kind: 'StringLiteral',\n id,\n value: property.lexeme,\n span: property.span,\n }));\n return this.finish({\n kind: 'Index',\n id: this.id(),\n object: left,\n index,\n dot: true,\n span: this.spanFrom(start),\n });\n }\n case TokenType.AND:\n case TokenType.OR: {\n this.begin('Logical', left);\n this.advance();\n const precedence = INFIX_PRECEDENCE[token.type]!;\n const right = this.parseExpression(precedence, false, token);\n const operator = token.type === TokenType.AND ? 'y' : 'o';\n return this.finish({ kind: 'Logical', id: this.id(), operator, left, right, span: this.spanFrom(start) });\n }\n default: {\n this.begin('Binary', left);\n this.advance();\n const precedence = INFIX_PRECEDENCE[token.type]!;\n // `^` es asociativo a la derecha: `2 ^ 3 ^ 2` es `2 ^ (3 ^ 2)`.\n const right = this.parseExpression(precedence === Precedence.POWER ? precedence - 1 : precedence, false, token);\n const operator = BINARY_OPERATORS[token.type]!;\n if (precedence === Precedence.COMPARE && INFIX_PRECEDENCE[this.current.type] === Precedence.COMPARE) {\n this.error(\n 'COMPARACIÓN_ENCADENADA',\n 'No se pueden encadenar comparaciones.',\n { start, end: this.current.span.end },\n 'Une las dos comparaciones con `y`, por ejemplo: `1 < x y x < 5`.',\n );\n }\n return this.finish({ kind: 'Binary', id: this.id(), operator, left, right, span: this.spanFrom(start) });\n }\n }\n }\n\n private parseList(): ast.ListLiteral {\n this.begin('ListLiteral');\n const start = this.advance().span.start;\n const elements = this.parseList_(TokenType.RBRACKET, 'para cerrar la lista');\n return this.finish({ kind: 'ListLiteral', id: this.id(), elements, span: this.spanFrom(start) });\n }\n\n private parseDict(): ast.DictLiteral {\n this.begin('DictLiteral');\n const open = this.advance();\n const entries: ast.DictEntry[] = [];\n const literalKeys = new Set<string | number>();\n while (!this.check(TokenType.RBRACE)) {\n const entryStart = this.current.span.start;\n if (this.check(TokenType.IDENT) && this.peek().type === TokenType.COLON) {\n this.error(\n 'CLAVE_SIN_COMILLAS',\n `La clave \\`${this.current.lexeme}\\` necesita comillas.`,\n this.current.span,\n `Escribe \\`\"${this.current.lexeme}\": …\\`. Si querías usar el valor de una variable como clave, ponla entre paréntesis: \\`(${this.current.lexeme}): …\\`.`,\n );\n }\n const key = this.grouped(() => this.parseExpression());\n this.expect(TokenType.COLON, 'después de la clave', 'Cada elemento de un diccionario se escribe `clave: valor`.');\n const value = this.grouped(() => this.parseExpression());\n if (key.kind === 'StringLiteral' || key.kind === 'NumberLiteral') {\n if (literalKeys.has(key.value)) {\n this.error('CLAVE_REPETIDA', `La clave ${describeKey(key.value)} está repetida.`, key.span);\n }\n literalKeys.add(key.value);\n if (value.kind === 'FunctionLiteral' && !value.name && key.kind === 'StringLiteral') value.name = key.value;\n }\n entries.push({ key, value, span: this.spanFrom(entryStart) });\n if (!this.match(TokenType.COMMA)) break;\n }\n if (!this.check(TokenType.RBRACE)) {\n this.failSilentlyOnIllegal();\n this.error(\n 'TOKEN_ESPERADO',\n `Se esperaba \\`,\\` o \\`}\\` en el diccionario que empieza en la línea ${open.span.start.line}, pero se encontró ${describeToken(this.current)}.`,\n this.current.span,\n );\n }\n this.advance();\n return this.finish({ kind: 'DictLiteral', id: this.id(), entries, span: this.spanFrom(open.span.start) });\n }\n\n /** Expresiones separadas por comas hasta `closing`. Se permite una coma final. */\n private parseList_(closing: TokenType, context: string): ast.Expression[] {\n const items: ast.Expression[] = [];\n while (!this.check(closing)) {\n items.push(this.grouped(() => this.parseExpression()));\n if (!this.match(TokenType.COMMA)) break;\n }\n this.expect(closing, context);\n return items;\n }\n\n private parseFunctionDeclaration(): ast.FunctionDeclaration {\n this.begin('FunctionDeclaration');\n const start = this.advance().span.start;\n const name = this.parseBindingName('después de `procedimiento`');\n this.begin('FunctionLiteral');\n const fn = this.parseFunction(start, name.name);\n return this.finish({ kind: 'FunctionDeclaration', id: this.id(), name, function: fn, span: fn.span });\n }\n\n /** Parámetros y cuerpo; `procedimiento` (y el nombre, si lo hay) ya se leyeron y el nodo ya empezó (`begin`). */\n private parseFunction(start: Position, name?: string): ast.FunctionLiteral {\n this.expect(\n TokenType.LPAREN,\n 'después de `procedimiento`',\n 'Los parámetros van entre paréntesis: `procedimiento(a, b) { … }`.',\n );\n const params: ast.Identifier[] = [];\n const seen = new Set<string>();\n while (!this.check(TokenType.RPAREN)) {\n const param = this.parseBindingName('como parámetro');\n if (seen.has(param.name)) {\n this.error('PARÁMETRO_REPETIDO', `El parámetro \\`${param.name}\\` está repetido.`, param.span);\n }\n seen.add(param.name);\n params.push(param);\n if (!this.match(TokenType.COMMA)) break;\n }\n this.expect(TokenType.RPAREN, 'para cerrar los parámetros');\n // `romper` y `continuar` no cruzan los límites de un procedimiento.\n const loopDepth = this.loopDepth;\n this.loopDepth = 0;\n let body: ast.Block;\n try {\n body = this.parseBlock('para el cuerpo del procedimiento');\n } finally {\n this.loopDepth = loopDepth;\n }\n return this.finish({ kind: 'FunctionLiteral', id: this.id(), name, params, body, span: this.spanFrom(start) });\n }\n}\n\nconst describeKey = (key: string | number): string => (typeof key === 'string' ? JSON.stringify(key) : String(key));\n",
9
9
  "import type * as ast from '../syntax/ast';\nimport type { Value } from './values';\n\nexport type DecisionLabel = 'si' | 'pero_si' | 'mientras' | 'hasta_que' | 'para' | 'repetir' | 'para_cada';\n\n/**\n * Instrucciones de la máquina de Codexivo. Cada una conserva el nodo del AST que la originó, así la\n * máquina puede decir qué parte del código está ejecutando y dónde ocurrió un error.\n */\nexport type Instruction =\n /** Inicio de una sentencia: punto natural para pausar. */\n | { op: 'step'; node: ast.Statement }\n | { op: 'const'; value: Value; node: ast.Node }\n | { op: 'list'; count: number; node: ast.ListLiteral }\n /** Saca `count` pares clave–valor de la pila y crea un diccionario. */\n | { op: 'dict'; count: number; node: ast.DictLiteral }\n | { op: 'load'; name: string; node: ast.Identifier; forUpdate?: boolean }\n /**\n * Saca un valor de la pila y crea la variable (o constante) `target` en el alcance actual. `node` es la\n * sentencia que la declara: una declaración, un procedimiento con nombre o la variable de un `para_cada`.\n */\n | {\n op: 'declare';\n name: string;\n constant: boolean;\n target: ast.Identifier;\n node: ast.Node;\n /** La variable de un `para … desde … hasta`: avanza sola y no se puede cambiar en el cuerpo. */\n loop?: boolean;\n }\n /** Saca un valor de la pila y lo guarda en una variable existente. */\n | { op: 'store'; name: string; target: ast.Identifier; node: ast.Assignment | ast.Increment }\n /** Saca valor, índice (o clave) y lista (o diccionario), en ese orden, y cambia el elemento. */\n | { op: 'setIndex'; target: ast.Index; node: ast.Assignment | ast.Increment }\n /** Copia los `count` valores de la cima de la pila. */\n | { op: 'dup'; count: number }\n /** Saca `count` valores de la pila (los valores ocultos de un bucle al salir con `romper`). */\n | { op: 'pop'; count: number }\n /** Saca un valor de la pila; es el valor de una sentencia de expresión. */\n | { op: 'result'; node: ast.ExpressionStatement }\n | { op: 'unary'; operator: ast.UnaryOperator; node: ast.Unary }\n | { op: 'binary'; operator: ast.BinaryOperator; node: ast.Binary | ast.Assignment | ast.Increment }\n | { op: 'index'; node: ast.Index }\n | { op: 'closure'; chunk: Chunk; node: ast.FunctionLiteral }\n | { op: 'call'; argc: number; node: ast.Call }\n | { op: 'return'; hasValue: boolean; node: ast.Return }\n | { op: 'jump'; target: number }\n /** Saca la condición (debe ser lógica) y salta si vale `jumpWhen`. */\n | {\n op: 'branch';\n target: number;\n jumpWhen: boolean;\n label: DecisionLabel;\n node: ast.Expression;\n owner: ast.Statement;\n }\n /** Revisa que la cantidad de `repetir` (en la cima de la pila) sea un entero ≥ 0; queda como contador oculto. */\n | { op: 'repeatStart'; node: ast.Expression; owner: ast.Repeat }\n /** Si al contador le quedan vueltas, lo reduce y sigue; si no, lo saca de la pila y salta a `target`. */\n | { op: 'repeatNext'; target: number; node: ast.Expression; owner: ast.Repeat }\n /**\n * Revisa lo que se recorre y deja tres valores ocultos en la pila: lo recorrido, su longitud (o, en un\n * diccionario, la lista de sus claves al empezar) y la posición 0.\n */\n | { op: 'forEachStart'; node: ast.Expression; owner: ast.ForEach }\n /**\n * Saca inicio, final y paso de la pila, los revisa y deja cuatro valores ocultos: el inicio, el paso, la\n * cantidad de vueltas y la vuelta actual.\n */\n | { op: 'rangeStart'; explicitStep: boolean; owner: ast.ForRange }\n /** Si quedan vueltas, pone el siguiente valor en la pila; si no, saca los valores ocultos y salta a `target`. */\n | { op: 'rangeNext'; target: number; node: ast.Expression; owner: ast.ForRange }\n /**\n * Si quedan elementos, pone el siguiente en la pila (en un diccionario, la clave; o el valor y luego la\n * clave si hay dos variables); si no, saca los valores ocultos y salta a `target`.\n */\n | { op: 'forEachNext'; target: number; node: ast.Expression; owner: ast.ForEach }\n /** Cortocircuito: revisa el lado izquierdo de `y`/`o`; si ya decide el resultado, lo deja y salta. */\n | { op: 'shortCircuit'; target: number; node: ast.Logical }\n /** Revisa que el lado derecho de `y`/`o` sea lógico. */\n | { op: 'checkLogical'; node: ast.Logical }\n /** Abre el alcance de un `dominio`: ahí se declaran sus miembros. */\n | { op: 'domainStart' }\n /** Cierra el alcance del dominio, lo convierte en un valor y lo declara (como constante) afuera. */\n | { op: 'domainEnd'; name: string; writable: string[]; node: ast.Domain }\n | { op: 'enterScope' }\n | { op: 'exitScope' }\n | { op: 'halt' };\n\n/** Código de un procedimiento o del programa principal. */\nexport interface Chunk {\n name: string;\n params: string[];\n code: Instruction[];\n node: ast.Program | ast.FunctionLiteral;\n /**\n * Código de la biblioteca escrito en Codexivo (`prelude.ts`). Sus pasos no pausan, no emiten eventos ni\n * cuentan operaciones: la llamada se cobra según la tabla de costos, y sus errores se ubican en la llamada.\n */\n hidden?: boolean;\n /** Parámetros obligatorios, si son menos que `params` (los demás llegan como `nulo`). Solo en la biblioteca. */\n minParams?: number;\n}\n\n/** Traduce el AST a instrucciones. El AST debe venir sin errores de sintaxis. */\nexport const compile = (program: ast.Program): Chunk => {\n const compiler = new Compiler({ name: 'programa', params: [], code: [], node: program }, false);\n compiler.statements(program.statements);\n compiler.emit({ op: 'halt' });\n return compiler.chunk;\n};\n\n/** Compila un procedimiento. `hidden` marca el código de la biblioteca (ver `Chunk.hidden`). */\nexport const compileProcedure = (node: ast.FunctionLiteral, hidden = false): Chunk => {\n const chunk: Chunk = {\n name: node.name ?? 'procedimiento',\n params: node.params.map(param => param.name),\n code: [],\n node,\n };\n if (hidden) chunk.hidden = true;\n const compiler = new Compiler(chunk, hidden);\n // El cuerpo comparte alcance con los parámetros: así `variable x` dentro de `procedimiento(x)` es un error.\n compiler.statements(node.body.statements);\n compiler.emit({ op: 'const', value: null, node });\n compiler.emit({ op: 'return', hasValue: true, node: { kind: 'Return', id: node.id, span: node.body.span } });\n return compiler.chunk;\n};\n\n/** Operador que aplica cada asignación compuesta. */\nconst COMPOUND_OPERATORS: Record<Exclude<ast.AssignmentOperator, '='>, ast.BinaryOperator> = {\n '+=': '+',\n '-=': '-',\n '*=': '*',\n '/=': '/',\n '%=': 'mod',\n};\n\n/** Un bucle abierto: a dónde saltan `romper` y `continuar`, y qué hay que limpiar antes. */\ninterface Loop {\n breaks: number[];\n continues: number[];\n /** Alcances abiertos en el punto al que llegan los saltos. */\n scopeDepth: number;\n /** Valores ocultos del bucle en la pila (el contador de `repetir`, el estado de `para_cada`). */\n slots: number;\n}\n\nclass Compiler {\n private scopeDepth = 0;\n private readonly loops: Loop[] = [];\n\n constructor(\n readonly chunk: Chunk,\n private readonly hidden: boolean,\n ) {}\n\n emit(instruction: Instruction): number {\n this.chunk.code.push(instruction);\n return this.chunk.code.length - 1;\n }\n\n private get here(): number {\n return this.chunk.code.length;\n }\n\n private patch(at: number, target: number): void {\n const instruction = this.chunk.code[at];\n if (instruction && 'target' in instruction) instruction.target = target;\n }\n\n private enterScope(): void {\n this.emit({ op: 'enterScope' });\n this.scopeDepth += 1;\n }\n\n private exitScope(): void {\n this.emit({ op: 'exitScope' });\n this.scopeDepth -= 1;\n }\n\n /** Las sentencias de un bloque. Los procedimientos con nombre se crean antes que todo lo demás. */\n statements(statements: ast.Statement[]): void {\n for (const statement of statements) {\n if (statement.kind !== 'FunctionDeclaration') continue;\n this.emit({ op: 'closure', chunk: compileProcedure(statement.function, this.hidden), node: statement.function });\n this.emit({\n op: 'declare',\n name: statement.name.name,\n constant: false,\n target: statement.name,\n node: statement,\n });\n }\n for (const statement of statements) this.statement(statement);\n }\n\n /** Abre un bucle, compila su cuerpo y regresa los saltos de `romper` y `continuar` para conectarlos. */\n private loop(slots: number, body: () => void): Loop {\n const loop: Loop = { breaks: [], continues: [], scopeDepth: this.scopeDepth, slots };\n this.loops.push(loop);\n body();\n this.loops.pop();\n return loop;\n }\n\n private connect(jumps: number[], target: number): void {\n for (const jump of jumps) this.patch(jump, target);\n }\n\n statement(node: ast.Statement): void {\n if (node.kind === 'FunctionDeclaration') return; // ya se declaró al entrar al bloque\n if (node.kind !== 'Block') this.emit({ op: 'step', node });\n switch (node.kind) {\n case 'VariableDeclaration':\n this.expression(node.value);\n this.emit({ op: 'declare', name: node.name.name, constant: node.constant, target: node.name, node });\n return;\n case 'Assignment':\n case 'Increment':\n this.assignment(node);\n return;\n case 'ExpressionStatement':\n this.expression(node.expression);\n this.emit({ op: 'result', node });\n return;\n case 'Return':\n if (node.value) this.expression(node.value);\n this.emit({ op: 'return', hasValue: Boolean(node.value), node });\n return;\n case 'Block':\n this.block(node);\n return;\n case 'Domain':\n this.emit({ op: 'domainStart' });\n this.scopeDepth += 1;\n this.statements(node.body.statements);\n this.scopeDepth -= 1;\n this.emit({\n op: 'domainEnd',\n name: node.name.name,\n writable: node.body.statements.flatMap(member =>\n member.kind === 'VariableDeclaration' && !member.constant ? [member.name.name] : [],\n ),\n node,\n });\n return;\n case 'Break':\n case 'Continue': {\n const loop = this.loops[this.loops.length - 1]!;\n // El código que sigue nunca se ejecuta, así que la cuenta de alcances no cambia.\n for (let depth = this.scopeDepth; depth > loop.scopeDepth; depth--) this.emit({ op: 'exitScope' });\n if (node.kind === 'Break') {\n if (loop.slots > 0) this.emit({ op: 'pop', count: loop.slots });\n loop.breaks.push(this.emit({ op: 'jump', target: -1 }));\n } else {\n loop.continues.push(this.emit({ op: 'jump', target: -1 }));\n }\n return;\n }\n case 'If': {\n const exits: number[] = [];\n node.branches.forEach((branch, index) => {\n this.expression(branch.condition);\n const skip = this.emit({\n op: 'branch',\n target: -1,\n jumpWhen: false,\n label: index === 0 ? 'si' : 'pero_si',\n node: branch.condition,\n owner: node,\n });\n this.block(branch.body);\n exits.push(this.emit({ op: 'jump', target: -1 }));\n this.patch(skip, this.here);\n });\n if (node.alternative) this.block(node.alternative);\n for (const exit of exits) this.patch(exit, this.here);\n return;\n }\n case 'While': {\n const start = this.here;\n this.expression(node.condition);\n const exit = this.emit({\n op: 'branch',\n target: -1,\n jumpWhen: false,\n label: 'mientras',\n node: node.condition,\n owner: node,\n });\n const loop = this.loop(0, () => this.block(node.body));\n this.emit({ op: 'jump', target: start });\n this.patch(exit, this.here);\n this.connect(loop.continues, start);\n this.connect(loop.breaks, this.here);\n return;\n }\n case 'DoUntil': {\n const start = this.here;\n const loop = this.loop(0, () => this.block(node.body));\n this.connect(loop.continues, this.here);\n this.expression(node.condition);\n this.emit({\n op: 'branch',\n target: start,\n jumpWhen: false,\n label: 'hasta_que',\n node: node.condition,\n owner: node,\n });\n this.connect(loop.breaks, this.here);\n return;\n }\n case 'For': {\n this.enterScope();\n if (node.init) this.statement(node.init);\n const start = this.here;\n let exit = -1;\n if (node.condition) {\n this.expression(node.condition);\n exit = this.emit({\n op: 'branch',\n target: -1,\n jumpWhen: false,\n label: 'para',\n node: node.condition,\n owner: node,\n });\n }\n const loop = this.loop(0, () => this.block(node.body));\n this.connect(loop.continues, this.here);\n if (node.update) this.statement(node.update);\n this.emit({ op: 'jump', target: start });\n if (exit >= 0) this.patch(exit, this.here);\n this.connect(loop.breaks, this.here);\n this.exitScope();\n return;\n }\n case 'Repeat': {\n this.expression(node.count);\n this.emit({ op: 'repeatStart', node: node.count, owner: node });\n const start = this.here;\n const exit = this.emit({ op: 'repeatNext', target: -1, node: node.count, owner: node });\n const loop = this.loop(1, () => this.block(node.body));\n this.emit({ op: 'jump', target: start });\n this.patch(exit, this.here);\n this.connect(loop.continues, start);\n this.connect(loop.breaks, this.here);\n return;\n }\n case 'ForRange': {\n this.expression(node.from);\n this.expression(node.to);\n if (node.step) this.expression(node.step);\n else this.emit({ op: 'const', value: 1, node });\n this.emit({ op: 'rangeStart', explicitStep: Boolean(node.step), owner: node });\n const start = this.here;\n const exit = this.emit({ op: 'rangeNext', target: -1, node: node.to, owner: node });\n const loop = this.loop(4, () => {\n // Como en `para_cada`, la variable es nueva en cada vuelta y comparte alcance con el cuerpo.\n this.enterScope();\n this.emit({\n op: 'declare',\n name: node.variable.name,\n constant: false,\n loop: true,\n target: node.variable,\n node: node.variable,\n });\n this.statements(node.body.statements);\n this.exitScope();\n });\n this.emit({ op: 'jump', target: start });\n this.patch(exit, this.here);\n this.connect(loop.continues, start);\n this.connect(loop.breaks, this.here);\n return;\n }\n case 'ForEach': {\n this.expression(node.iterable);\n this.emit({ op: 'forEachStart', node: node.iterable, owner: node });\n const start = this.here;\n const exit = this.emit({ op: 'forEachNext', target: -1, node: node.iterable, owner: node });\n const loop = this.loop(3, () => {\n // La variable del bucle es nueva en cada vuelta y comparte alcance con el cuerpo.\n this.enterScope();\n for (const variable of [node.variable, ...(node.value ? [node.value] : [])]) {\n this.emit({ op: 'declare', name: variable.name, constant: false, target: variable, node: variable });\n }\n this.statements(node.body.statements);\n this.exitScope();\n });\n this.emit({ op: 'jump', target: start });\n this.patch(exit, this.here);\n this.connect(loop.continues, start);\n this.connect(loop.breaks, this.here);\n return;\n }\n }\n }\n\n private assignment(node: ast.Assignment | ast.Increment): void {\n const operator =\n node.kind === 'Increment'\n ? node.operator === '++'\n ? '+'\n : '-'\n : node.operator === '='\n ? undefined\n : COMPOUND_OPERATORS[node.operator];\n const value = () => {\n if (node.kind === 'Increment') this.emit({ op: 'const', value: 1, node: node.target });\n else this.expression(node.value);\n };\n const { target } = node;\n\n if (target.kind === 'Identifier') {\n if (operator) this.emit({ op: 'load', name: target.name, node: target, forUpdate: true });\n value();\n if (operator) this.emit({ op: 'binary', operator, node });\n this.emit({ op: 'store', name: target.name, target, node });\n return;\n }\n\n this.expression(target.object);\n this.expression(target.index);\n if (operator) {\n this.emit({ op: 'dup', count: 2 });\n this.emit({ op: 'index', node: target });\n }\n value();\n if (operator) this.emit({ op: 'binary', operator, node });\n this.emit({ op: 'setIndex', target, node });\n }\n\n private block(node: ast.Block): void {\n this.enterScope();\n this.statements(node.statements);\n this.exitScope();\n }\n\n private expression(node: ast.Expression): void {\n switch (node.kind) {\n case 'NumberLiteral':\n case 'StringLiteral':\n case 'BooleanLiteral':\n this.emit({ op: 'const', value: node.value, node });\n return;\n case 'NullLiteral':\n this.emit({ op: 'const', value: null, node });\n return;\n case 'ListLiteral':\n for (const element of node.elements) this.expression(element);\n this.emit({ op: 'list', count: node.elements.length, node });\n return;\n case 'DictLiteral':\n for (const entry of node.entries) {\n this.expression(entry.key);\n this.expression(entry.value);\n }\n this.emit({ op: 'dict', count: node.entries.length, node });\n return;\n case 'Identifier':\n this.emit({ op: 'load', name: node.name, node });\n return;\n case 'Unary':\n this.expression(node.operand);\n this.emit({ op: 'unary', operator: node.operator, node });\n return;\n case 'Binary':\n this.expression(node.left);\n this.expression(node.right);\n this.emit({ op: 'binary', operator: node.operator, node });\n return;\n case 'Logical': {\n this.expression(node.left);\n const skip = this.emit({ op: 'shortCircuit', target: -1, node });\n this.expression(node.right);\n this.emit({ op: 'checkLogical', node });\n this.patch(skip, this.here);\n return;\n }\n case 'Call':\n this.expression(node.callee);\n for (const arg of node.args) this.expression(arg);\n this.emit({ op: 'call', argc: node.args.length, node });\n return;\n case 'Index':\n this.expression(node.object);\n this.expression(node.index);\n this.emit({ op: 'index', node });\n return;\n case 'FunctionLiteral':\n this.emit({ op: 'closure', chunk: compileProcedure(node, this.hidden), node });\n return;\n }\n }\n}\n",
10
10
  "import type { CodexivoError } from '../errors';\nimport type { RobotEvent } from '../world';\nimport type { Chunk } from './compiler';\n\n/**\n * Valores en tiempo de ejecución. Números, textos, lógicos y `nulo` son primitivos de JavaScript;\n * listas y procedimientos son objetos con un `id` para poder dibujar cuándo dos variables\n * comparten el mismo valor.\n */\nexport type Value =\n number | string | boolean | null | ListValue | DictValue | DomainValue | ProcedureValue | NativeValue;\n\nexport interface ListValue {\n kind: 'lista';\n id: number;\n items: Value[];\n}\n\n/** Clave de un diccionario: un texto o un número. */\nexport type DictKey = string | number;\n\n/** Diccionario: conserva el orden en que se agregaron las claves. */\nexport interface DictValue {\n kind: 'diccionario';\n id: number;\n entries: Map<DictKey, Value>;\n}\n\n/**\n * Un `dominio`: un espacio de nombres. Sus miembros son las variables de `scope`; desde fuera se usan con `.` y\n * solo se pueden cambiar los que se declararon con `variable` (`writable`).\n */\nexport interface DomainValue {\n kind: 'dominio';\n id: number;\n name: string;\n scope: Scope;\n writable: ReadonlySet<string>;\n}\n\nexport interface ProcedureValue {\n kind: 'procedimiento';\n id: number;\n name?: string;\n chunk: Chunk;\n closure: Scope;\n}\n\n/** Contexto que la máquina le da a los procedimientos nativos. */\nexport interface NativeContext {\n write(text: string): void;\n /** Siguiente línea de entrada, `null` si ya no hay, o `WAIT_FOR_INPUT` si hay que pedirla. */\n readLine(): string | null | typeof WAIT_FOR_INPUT;\n newList(items: Value[]): ListValue;\n newDict(entries: Map<DictKey, Value>): DictValue;\n /** Número pseudoaleatorio en [0, 1) del generador con semilla de la máquina. */\n random(): number;\n /** Error de ejecución ubicado en la llamada actual. */\n fail(code: string, message: string, hint?: string): CodexivoError;\n /** Emite un evento propio del procedimiento (el modo mundo emite `robot`), ubicado en la llamada actual. */\n emit(event: RobotEvent): void;\n}\n\nexport const WAIT_FOR_INPUT: unique symbol = Symbol('esperar-entrada');\n\nexport type ProcedureLevel = 'principiante' | 'intermedio' | 'avanzado';\n\nexport type ProcedureCategory =\n | 'entrada y salida'\n | 'tipos'\n | 'verificación'\n | 'matemáticas'\n | 'texto'\n | 'listas'\n | 'diccionarios'\n | 'procedimientos'\n | 'estructuras'\n | 'mundo';\n\n/** Ejemplo ejecutable de un procedimiento: `result` es el valor final como se escribiría en código. */\nexport interface ProcedureExample {\n code: string;\n result?: string;\n output?: string;\n}\n\n/** Documentación de un procedimiento de la biblioteca; de aquí sale el catálogo (`catalog.ts`). */\nexport interface ProcedureDoc {\n level: ProcedureLevel;\n category: ProcedureCategory;\n /** Tipos con los nombres de `tipo(x)`, `cualquiera`, o varios separados por ` | `. */\n params: Array<{ name: string; type: string; optional?: boolean }>;\n /** `true` si el último parámetro se puede repetir (`imprimir(a, b, …)`). */\n variadic?: boolean;\n /** Lo que regresa; `nulo` si no regresa nada útil. */\n returns: string;\n /** `true` si cambia su primer argumento. */\n mutates?: boolean;\n description: string;\n examples: ProcedureExample[];\n}\n\nexport interface NativeValue {\n kind: 'nativo';\n name: string;\n /** Documentación para el catálogo. Los nativos internos de la biblioteca no la tienen. */\n doc?: ProcedureDoc;\n /** Cantidad de argumentos: exacta, o `[mínimo, máximo]` (`máximo` puede ser `Infinity`). */\n arity: number | [number, number];\n call(args: Value[], context: NativeContext): Value | typeof WAIT_FOR_INPUT;\n /**\n * Cuántas operaciones debería costar una llamada con estos argumentos (§10). Sin `cost`, cuesta 1.\n * Se registra aquí para que la tabla de costos viva junto a cada procedimiento.\n */\n cost?: (args: Value[]) => number;\n}\n\nexport type TypeName = 'número' | 'texto' | 'lógico' | 'nulo' | 'lista' | 'diccionario' | 'dominio' | 'procedimiento';\n\nexport const typeOf = (value: Value): TypeName => {\n if (value === null) return 'nulo';\n switch (typeof value) {\n case 'number':\n return 'número';\n case 'string':\n return 'texto';\n case 'boolean':\n return 'lógico';\n default:\n return value.kind === 'lista' || value.kind === 'diccionario' || value.kind === 'dominio'\n ? value.kind\n : 'procedimiento';\n }\n};\n\n/** \"un número\", \"una lista\"… para mensajes. */\nexport const describeType = (type: TypeName): string => {\n switch (type) {\n case 'lista':\n return 'una lista';\n case 'nulo':\n return '`nulo`';\n default:\n return `un ${type}`;\n }\n};\n\nexport const isList = (value: Value): value is ListValue =>\n typeof value === 'object' && value !== null && value.kind === 'lista';\n\nexport const isDomain = (value: Value): value is DomainValue =>\n typeof value === 'object' && value !== null && value.kind === 'dominio';\n\nexport const isDict = (value: Value): value is DictValue =>\n typeof value === 'object' && value !== null && value.kind === 'diccionario';\n\nexport const isCallable = (value: Value): value is ProcedureValue | NativeValue =>\n typeof value === 'object' && value !== null && (value.kind === 'procedimiento' || value.kind === 'nativo');\n\nconst formatNumber = (value: number): string => {\n if (Object.is(value, -0)) return '0';\n if (value === Infinity) return 'infinito';\n if (value === -Infinity) return '-infinito';\n return String(value);\n};\n\n/** Representación como se escribiría en código: los textos van entre comillas. */\nexport const repr = (value: Value, seen: Set<ListValue | DictValue> = new Set()): string => {\n if (value === null) return 'nulo';\n switch (typeof value) {\n case 'number':\n return formatNumber(value);\n case 'string':\n return JSON.stringify(value);\n case 'boolean':\n return value ? 'verdadero' : 'falso';\n }\n if (value.kind === 'dominio') return `dominio ${value.name}`;\n if (value.kind === 'lista' || value.kind === 'diccionario') {\n if (seen.has(value)) return value.kind === 'lista' ? '[…]' : '{…}';\n seen.add(value);\n const inner =\n value.kind === 'lista'\n ? value.items.map(item => repr(item, seen))\n : [...value.entries].map(([key, item]) => `${repr(key)}: ${repr(item, seen)}`);\n seen.delete(value);\n return value.kind === 'lista' ? `[${inner.join(', ')}]` : `{${inner.join(', ')}}`;\n }\n return value.name ? `procedimiento ${value.name}` : 'procedimiento';\n};\n\n/** Como lo muestra `imprimir`: los textos sin comillas. */\nexport const show = (value: Value): string => (typeof value === 'string' ? value : repr(value));\n\ntype Container = ListValue | DictValue;\n\n/**\n * Igualdad por valor: dos listas son iguales si tienen los mismos elementos en el mismo orden, y dos\n * diccionarios si tienen las mismas claves con los mismos valores, en cualquier orden.\n */\nexport const equals = (a: Value, b: Value, seen: Array<[Container, Container]> = []): boolean => {\n if (a === b) return true;\n const bothLists = isList(a) && isList(b);\n const bothDicts = isDict(a) && isDict(b);\n if (!bothLists && !bothDicts) return false;\n if (seen.some(([x, y]) => x === a && y === b)) return true;\n seen.push([a as Container, b as Container]);\n let result: boolean;\n if (bothLists) {\n const [x, y] = [a as ListValue, b as ListValue];\n result = x.items.length === y.items.length && x.items.every((item, index) => equals(item, y.items[index]!, seen));\n } else {\n const [x, y] = [a as DictValue, b as DictValue];\n result =\n x.entries.size === y.entries.size &&\n [...x.entries].every(([key, item]) => y.entries.has(key) && equals(item, y.entries.get(key)!, seen));\n }\n seen.pop();\n return result;\n};\n\n/**\n * Un alcance: las variables de un bloque. `parent` apunta al alcance que lo contiene.\n */\nexport class Scope {\n readonly variables = new Map<string, Value>();\n /** Nombres de este alcance declarados con `constante`. */\n readonly constants = new Set<string>();\n /** Variables de `para … desde … hasta` en este alcance: avanzan solas. */\n readonly loopVariables = new Set<string>();\n\n constructor(readonly parent?: Scope) {}\n\n lookup(name: string): Scope | undefined {\n let scope: Scope | undefined = this;\n while (scope) {\n if (scope.variables.has(name)) return scope;\n scope = scope.parent;\n }\n return undefined;\n }\n}\n",
11
11
  "import { isDict, isList } from './values';\nimport type { Value } from './values';\n\n/**\n * Cuántas operaciones cuesta cada procedimiento de la biblioteca (§10). Es la única tabla de costos: la\n * usan los nativos de `builtins.ts` y los procedimientos de `prelude.ts`, y los retos del sitio comparan\n * soluciones con estas cifras. Un procedimiento que no aparece aquí cuesta 1, como cualquier operación.\n *\n * `n` es el tamaño (caracteres, elementos o claves) del primer argumento.\n */\nexport type Cost = (args: Value[]) => number;\n\n/** Tamaño de un texto, lista o diccionario; 1 para lo demás. */\nexport const sizeOf = (value: Value | undefined): number => {\n if (typeof value === 'string') return value.length;\n if (value !== undefined && isList(value)) return value.items.length;\n if (value !== undefined && isDict(value)) return value.entries.size;\n return 1;\n};\n\n/** `n`: recorre su primer argumento una vez. */\nconst linear: Cost = args => Math.max(1, sizeOf(args[0]));\n\n/** `n · ⌈log₂ n⌉`: lo que cuesta ordenar `n` elementos. */\nconst nLogN: Cost = args => {\n const n = sizeOf(args[0]);\n return Math.max(1, n * Math.ceil(Math.log2(Math.max(n, 1))));\n};\n\n/** Cuesta tantas casillas como crea. */\nconst creates =\n (count: (args: Value[]) => number): Cost =>\n args =>\n Math.max(1, Math.ceil(count(args)));\n\n/** `n` de `máximo(…)` y `mínimo(…)`, que reciben varios números o una lista. */\nconst values: Cost = args => (args.length === 1 ? linear(args) : Math.max(1, args.length));\n\n/** Largo del texto o lista que se busca (segundo argumento). */\nconst searched: Cost = args => Math.max(1, sizeOf(args[1]));\n\nconst slice: Cost = args =>\n typeof args[1] === 'number' && typeof args[2] === 'number' ? Math.max(1, Math.abs(args[2] - args[1])) : 1;\n\nconst range: Cost = args => {\n const [start, end, step = 1] = args;\n if (typeof start !== 'number' || typeof end !== 'number' || typeof step !== 'number' || step === 0) return 1;\n return Math.max(1, Math.floor((end - start) / step) + 1);\n};\n\nexport const COSTS: Readonly<Partial<Record<string, Cost>>> = {\n // matemáticas\n máximo: values,\n mínimo: values,\n\n // texto\n mayúsculas: linear,\n minúsculas: linear,\n recortar: linear,\n dividir: linear,\n unir: linear,\n reemplazar: linear,\n contiene: linear,\n posición_de: linear,\n empieza_con: searched,\n termina_con: searched,\n subtexto: slice,\n caracteres: linear,\n invertir: linear,\n\n // listas\n insertar: linear,\n quitar: linear,\n quitar_primero: linear,\n desencolar: linear,\n rebanar: slice,\n copiar: linear,\n sumar: linear,\n ordenar: nLogN,\n rango: range,\n índices: linear,\n lista_de: creates(args => (typeof args[0] === 'number' ? args[0] * sizeOf(args[1]) : 1)),\n matriz: creates(args => (typeof args[0] === 'number' && typeof args[1] === 'number' ? args[0] * args[1] : 1)),\n\n // diccionarios\n claves: linear,\n valores: linear,\n\n // procedimientos como valores: además, cada llamada a `f` cuesta lo que cueste su cuerpo\n mapear: linear,\n filtrar: linear,\n reducir: linear,\n alguno: linear,\n todos: linear,\n buscar: linear,\n};\n",
@@ -22,9 +22,9 @@
22
22
  "import type * as ast from './syntax/ast';\nimport type { Span } from './syntax/token';\nimport { printExpression, printStatement } from './printer';\n\n/**\n * Diagrama de flujo generado desde el AST. Aquí se decide qué nodos y aristas existen; el sitio solo los\n * acomoda (con ELK o dagre) y los dibuja. Con los eventos `paso` y `decide` de la máquina (`nodeId`), el sitio\n * sabe qué nodo iluminar: cada `nodeId` que emite la ejecución aparece en `astIds` de algún nodo del grafo.\n */\n\nexport type FlowNodeKind = 'inicio' | 'fin' | 'proceso' | 'decisión' | 'llamada' | 'entrada' | 'salida' | 'retorno';\n\nexport interface FlowNode {\n id: string;\n kind: FlowNodeKind;\n /** Texto corto para mostrar, generado desde el AST. Si se agruparon sentencias, una por línea. */\n label: string;\n /** Nodos del AST que representa: la sentencia y, en una decisión, también su condición. */\n astIds: number[];\n spans: Span[];\n /** Orden sugerido para acomodar el grafo: distancia desde el inicio sin contar las vueltas de los bucles. */\n rank: number;\n /** En una llamada a un procedimiento del programa: su nombre, para enlazar con `procedures`. */\n procedure?: string;\n}\n\n/**\n * - `normal`: sigue a la siguiente sentencia (o entra o sale de un bucle);\n * - `vuelta`: regresa al inicio de un bucle;\n * - `romper`, `continuar`, `regresa`: saltos explícitos.\n */\nexport type FlowEdgeKind = 'normal' | 'vuelta' | 'romper' | 'continuar' | 'regresa';\n\n/** Etiqueta de una arista que sale de una decisión. */\nexport type FlowEdgeLabel = 'sí' | 'no' | 'repetir' | 'salir';\n\nexport interface FlowEdge {\n id: string;\n from: string;\n to: string;\n kind: FlowEdgeKind;\n label?: FlowEdgeLabel;\n}\n\nexport interface FlowGraph {\n nodes: FlowNode[];\n edges: FlowEdge[];\n /** Con `expandProcedures`, el grafo de cada procedimiento con nombre del programa. */\n procedures?: Array<{ name: string; astId: number; graph: FlowGraph }>;\n}\n\nexport interface FlowOptions {\n /** Junta sentencias simples consecutivas (asignaciones, declaraciones) en un solo nodo de proceso. */\n group?: boolean;\n /** Genera también el grafo de cada procedimiento con nombre y marca las llamadas a ellos. */\n expandProcedures?: boolean;\n /** Recorta las etiquetas largas a esta cantidad de caracteres, con `…`. Por defecto no se recortan. */\n maxLabelLength?: number;\n}\n\ninterface Pending {\n from: string;\n kind?: FlowEdgeKind;\n label?: FlowEdgeLabel;\n}\n\ninterface Loop {\n breaks: Pending[];\n continues: Pending[];\n}\n\nconst INPUT = new Set(['leer', 'leer_número', 'leer_numero']);\nconst OUTPUT = new Set(['imprimir']);\n\n/** `f` o `dominio.f`: la ruta de un nombre, si la expresión es solo eso. */\nconst path = (node: ast.Expression): string | undefined => {\n if (node.kind === 'Identifier') return node.name;\n if (node.kind === 'Index' && node.dot && node.index.kind === 'StringLiteral') {\n const object = path(node.object);\n return object && `${object}.${node.index.value}`;\n }\n return undefined;\n};\n\n/** Nombre (o ruta) del procedimiento al que llama una expresión, si es una llamada directa. */\nconst calledName = (node: ast.Expression | undefined): string | undefined =>\n node?.kind === 'Call' ? path(node.callee) : undefined;\n\nclass Builder {\n readonly nodes: FlowNode[] = [];\n readonly edges: FlowEdge[] = [];\n private readonly loops: Loop[] = [];\n private readonly returns: Pending[] = [];\n /** Último nodo de proceso, al que se le pueden juntar sentencias con `group`. */\n private groupable?: string;\n\n constructor(\n private readonly options: FlowOptions,\n private readonly procedures: Set<string>,\n ) {}\n\n private label(text: string): string {\n const max = this.options.maxLabelLength;\n return max && text.length > max ? `${text.slice(0, Math.max(1, max - 1))}…` : text;\n }\n\n node(kind: FlowNodeKind, label: string, astNodes: Array<{ id: number; span: Span }>): string {\n const id = `n${this.nodes.length}`;\n this.nodes.push({\n id,\n kind,\n label: this.label(label),\n astIds: astNodes.map(node => node.id),\n spans: astNodes.map(node => node.span),\n rank: 0,\n });\n this.groupable = undefined;\n return id;\n }\n\n connect(pending: Pending[], to: string): void {\n for (const { from, kind = 'normal', label } of pending) {\n this.edges.push({ id: `e${this.edges.length}`, from, to, kind, ...(label ? { label } : {}) });\n }\n }\n\n /** Un nodo simple con sus aristas de entrada; regresa la arista pendiente que sale de él. */\n private simple(kind: FlowNodeKind, statement: ast.Statement, incoming: Pending[], procedure?: string): Pending[] {\n const groupable = kind === 'proceso' && this.options.group;\n const last = this.groupable ? this.nodes.find(node => node.id === this.groupable) : undefined;\n if (groupable && last && incoming.length === 1 && incoming[0]!.from === last.id && !incoming[0]!.label) {\n last.label = `${last.label}\\n${this.label(printStatement(statement))}`;\n last.astIds.push(statement.id);\n last.spans.push(statement.span);\n return incoming;\n }\n const id = this.node(kind, printStatement(statement), [statement]);\n if (procedure) this.nodes[this.nodes.length - 1]!.procedure = procedure;\n this.connect(incoming, id);\n if (groupable) this.groupable = id;\n return [{ from: id }];\n }\n\n private kindOf(statement: ast.Statement): { kind: FlowNodeKind; procedure?: string } {\n const expression =\n statement.kind === 'ExpressionStatement'\n ? statement.expression\n : statement.kind === 'VariableDeclaration' || statement.kind === 'Assignment'\n ? statement.value\n : undefined;\n const name = calledName(expression);\n if (name && INPUT.has(name)) return { kind: 'entrada' };\n if (name && OUTPUT.has(name) && statement.kind === 'ExpressionStatement') return { kind: 'salida' };\n if (name && this.procedures.has(name)) {\n return this.options.expandProcedures ? { kind: 'llamada', procedure: name } : { kind: 'llamada' };\n }\n if (statement.kind === 'ExpressionStatement' && name) return { kind: 'llamada' };\n return { kind: 'proceso' };\n }\n\n statements(list: ast.Statement[], incoming: Pending[]): Pending[] {\n let current = incoming;\n for (const statement of list) current = this.statement(statement, current);\n return current;\n }\n\n private loop(body: () => Pending[]): { out: Pending[]; loop: Loop } {\n const loop: Loop = { breaks: [], continues: [] };\n this.loops.push(loop);\n const out = body();\n this.loops.pop();\n return { out, loop };\n }\n\n private back(pending: Pending[], kind: FlowEdgeKind = 'vuelta'): Pending[] {\n return pending.map(edge => (edge.kind && edge.kind !== 'normal' ? edge : { ...edge, kind }));\n }\n\n private statement(statement: ast.Statement, incoming: Pending[]): Pending[] {\n switch (statement.kind) {\n case 'FunctionDeclaration':\n // Se crea al entrar al bloque, no en este punto; su grafo va en `procedures`.\n return incoming;\n case 'Domain': {\n // Un dominio solo declara: es un paso de proceso que representa todas sus declaraciones.\n const members: ast.Statement[] = [];\n const collect = (domain: ast.Domain) => {\n members.push(domain);\n for (const member of domain.body.statements) {\n if (member.kind === 'VariableDeclaration') members.push(member);\n else if (member.kind === 'Domain') collect(member);\n }\n };\n collect(statement);\n const id = this.node('proceso', printStatement(statement), members);\n this.connect(incoming, id);\n return [{ from: id }];\n }\n case 'VariableDeclaration':\n case 'Assignment':\n case 'Increment':\n case 'ExpressionStatement': {\n const { kind, procedure } = this.kindOf(statement);\n return this.simple(kind, statement, incoming, procedure);\n }\n case 'Return': {\n const id = this.node('retorno', printStatement(statement), [statement]);\n this.connect(incoming, id);\n this.returns.push({ from: id, kind: 'regresa' });\n return [];\n }\n case 'Break':\n case 'Continue': {\n const id = this.node('proceso', printStatement(statement), [statement]);\n this.connect(incoming, id);\n const loop = this.loops[this.loops.length - 1];\n if (statement.kind === 'Break') loop?.breaks.push({ from: id, kind: 'romper' });\n else loop?.continues.push({ from: id, kind: 'continuar' });\n return [];\n }\n case 'Block':\n return this.statements(statement.statements, incoming);\n case 'If': {\n let pending = incoming;\n const out: Pending[] = [];\n statement.branches.forEach((branch, index) => {\n const astNodes = index === 0 ? [statement, branch.condition] : [branch.condition];\n const id = this.node('decisión', printExpression(branch.condition), astNodes);\n this.connect(pending, id);\n out.push(...this.statements(branch.body.statements, [{ from: id, label: 'sí' }]));\n pending = [{ from: id, label: 'no' }];\n });\n if (statement.alternative) out.push(...this.statements(statement.alternative.statements, pending));\n else out.push(...pending);\n return out;\n }\n case 'While': {\n const id = this.node('decisión', printExpression(statement.condition), [statement, statement.condition]);\n this.connect(incoming, id);\n const { out, loop } = this.loop(() => this.statements(statement.body.statements, [{ from: id, label: 'sí' }]));\n this.connect(this.back([...out, ...loop.continues]), id);\n return [{ from: id, label: 'no' }, ...loop.breaks];\n }\n case 'DoUntil': {\n // El cuerpo va primero; la entrada al bucle se conecta al primer nodo que cree.\n const first = this.nodes.length;\n const { out, loop } = this.loop(() => this.statements(statement.body.statements, incoming));\n const id = this.node('decisión', `hasta_que ${printExpression(statement.condition)}`, [\n statement,\n statement.condition,\n ]);\n this.connect([...out, ...loop.continues], id);\n const start = this.nodes[first]?.id ?? id;\n this.connect([{ from: id, label: 'no', kind: 'vuelta' }], start);\n if (start === id) this.edges.pop(); // cuerpo vacío: la vuelta sería un lazo sobre sí misma\n return [{ from: id, label: 'sí' }, ...loop.breaks];\n }\n case 'For': {\n let pending = incoming;\n const initOwner: ast.Statement[] = [];\n if (statement.init) {\n this.groupable = undefined;\n const before = this.nodes.length;\n pending = this.statement(statement.init, pending);\n // El paso del `para` se ilumina en su inicio.\n this.nodes[before]?.astIds.unshift(statement.id);\n this.nodes[before]?.spans.unshift(statement.span);\n } else {\n initOwner.push(statement);\n }\n const condition = statement.condition;\n const id = this.node('decisión', condition ? printExpression(condition) : 'verdadero', [\n ...initOwner,\n ...(condition ? [condition] : []),\n ]);\n this.connect(pending, id);\n const { out, loop } = this.loop(() => this.statements(statement.body.statements, [{ from: id, label: 'sí' }]));\n let tail = [...out, ...loop.continues];\n if (statement.update) tail = this.statement(statement.update, tail);\n this.connect(this.back(tail), id);\n return [...(condition ? [{ from: id, label: 'no' as const }] : []), ...loop.breaks];\n }\n case 'Repeat':\n case 'ForRange':\n case 'ForEach': {\n const head =\n statement.kind === 'Repeat'\n ? statement.count\n : statement.kind === 'ForRange'\n ? statement.to\n : statement.iterable;\n const id = this.node('decisión', printStatement(statement), [statement, head]);\n this.connect(incoming, id);\n const { out, loop } = this.loop(() =>\n this.statements(statement.body.statements, [{ from: id, label: 'repetir' }]),\n );\n this.connect(this.back([...out, ...loop.continues]), id);\n return [{ from: id, label: 'salir' }, ...loop.breaks];\n }\n }\n }\n\n finish(start: string, out: Pending[]): void {\n const end = this.node('fin', 'fin', []);\n this.connect([...out, ...this.returns], end);\n // Rango: distancia más larga desde el inicio sin contar vueltas (el grafo sin ellas no tiene ciclos).\n const forward = this.edges.filter(edge => edge.kind !== 'vuelta' && edge.kind !== 'continuar');\n const rank = new Map<string, number>([[start, 0]]);\n for (let changed = true, guard = 0; changed && guard <= this.nodes.length; guard++) {\n changed = false;\n for (const edge of forward) {\n const next = (rank.get(edge.from) ?? -1) + 1;\n if (rank.has(edge.from) && next > (rank.get(edge.to) ?? -1)) {\n rank.set(edge.to, next);\n changed = true;\n }\n }\n }\n for (const node of this.nodes) node.rank = rank.get(node.id) ?? 0;\n }\n}\n\n/** Procedimientos con nombre declarados en estas sentencias, con su ruta si están en un dominio. */\nconst procedureNames = (statements: ast.Statement[], known: Iterable<string> = []): Set<string> => {\n const names = new Set(known);\n const visit = (list: ast.Statement[], prefix: string) => {\n for (const statement of list) {\n if (statement.kind === 'FunctionDeclaration') names.add(`${prefix}${statement.name.name}`);\n if (statement.kind === 'Domain') visit(statement.body.statements, `${prefix}${statement.name.name}.`);\n }\n };\n visit(statements, '');\n return names;\n};\n\n/**\n * Grafo de flujo de un programa o de un procedimiento. El AST tiene que venir sin errores de sintaxis.\n */\nexport const flowGraph = (\n root: ast.Program | ast.FunctionLiteral | ast.FunctionDeclaration,\n options: FlowOptions = {},\n): FlowGraph => graphOf(root, options, []);\n\nconst graphOf = (\n root: ast.Program | ast.FunctionLiteral | ast.FunctionDeclaration,\n options: FlowOptions,\n known: Iterable<string>,\n): FlowGraph => {\n const statements =\n root.kind === 'Program'\n ? root.statements\n : root.kind === 'FunctionDeclaration'\n ? root.function.body.statements\n : root.body.statements;\n const names = procedureNames(statements, known);\n const builder = new Builder(options, names);\n const title =\n root.kind === 'Program'\n ? 'inicio'\n : root.kind === 'FunctionDeclaration'\n ? printStatement(root)\n : `procedimiento(${root.params.map(param => param.name).join(', ')})`;\n const start = builder.node('inicio', title, root.kind === 'Program' ? [] : [root]);\n const out = builder.statements(statements, [{ from: start }]);\n builder.finish(start, out);\n\n const graph: FlowGraph = { nodes: builder.nodes, edges: builder.edges };\n if (options.expandProcedures) {\n graph.procedures = [];\n // Los procedimientos de un dominio se nombran con su ruta: `calculadora.suma`.\n const visit = (list: ast.Statement[], prefix: string) => {\n for (const statement of list) {\n if (statement.kind === 'Domain') visit(statement.body.statements, `${prefix}${statement.name.name}.`);\n if (statement.kind !== 'FunctionDeclaration') continue;\n graph.procedures!.push({\n name: `${prefix}${statement.name.name}`,\n astId: statement.id,\n graph: graphOf(statement, options, names),\n });\n }\n };\n visit(statements, '');\n }\n return graph;\n};\n",
23
23
  "import { run } from './engine';\nimport type { ErrorInfo } from './errors';\nimport { equals, repr } from './runtime/values';\nimport type { DictKey, Value } from './runtime/values';\n\n/**\n * Retos: un conjunto de casos que se ejecutan con su propia entrada y su propio límite de operaciones. Corre\n * igual en el worker del sitio y en Bun, así los retos se prueban en CI.\n *\n * - Estilo `salida` (como HackerRank): el programa lee con `leer()` y se compara lo que imprime.\n * - Estilo `regresa` (como LeetCode): se llama a `resolver(…)` (u otro procedimiento) con argumentos y se compara\n * lo que regresa, por valor.\n */\n\n/** Un valor de JSON: los arreglos se vuelven listas y los objetos, diccionarios. */\nexport type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nexport interface ChallengeCase {\n name?: string;\n /** Entrada estándar: un texto (una línea por renglón) o una lista de líneas. */\n input?: string | string[];\n /** Estilo `salida`: lo que el programa tiene que imprimir. */\n expectedOutput?: string;\n /** Estilo `regresa`: los argumentos para el procedimiento. */\n args?: JsonValue[];\n /** Estilo `regresa`: lo que tiene que regresar. */\n expected?: JsonValue;\n /** Límite de operaciones de este caso; si no, el del reto. */\n maxOperations?: number;\n}\n\nexport interface Challenge {\n style: 'salida' | 'regresa';\n cases: ChallengeCase[];\n /** Estilo `regresa`: el procedimiento que se llama. Por defecto `resolver`. */\n procedure?: string;\n /** Límite de operaciones por caso. Por defecto 1 000 000. */\n maxOperations?: number;\n /**\n * Con `true`, la salida tiene que ser idéntica. Si no, se ignoran los espacios al final de cada línea y las\n * líneas vacías del final.\n */\n exactOutput?: boolean;\n}\n\nexport interface CaseResult {\n name: string;\n passed: boolean;\n output: string;\n expectedOutput?: string;\n /** Estilo `regresa`: lo que regresó y lo que se esperaba, como se escribirían en código. */\n result?: string;\n expected?: string;\n operations: number;\n error?: ErrorInfo;\n}\n\nexport interface ChallengeResult {\n passed: boolean;\n cases: CaseResult[];\n}\n\nconst DEFAULT_MAX_OPERATIONS = 1_000_000;\n\n/** Un valor de JSON escrito como literal de Codexivo. */\nconst literal = (value: JsonValue): string => {\n if (value === null) return 'nulo';\n if (typeof value === 'boolean') return value ? 'verdadero' : 'falso';\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) throw new Error(`El reto tiene un número que no es finito: ${value}.`);\n return value < 0 ? `(${value})` : String(value);\n }\n if (typeof value === 'string') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(literal).join(', ')}]`;\n return `{ ${Object.entries(value)\n .map(([key, item]) => `${JSON.stringify(key)}: ${literal(item)}`)\n .join(', ')} }`;\n};\n\n/** Un valor de JSON como valor de Codexivo, para comparar por valor con `equals`. */\nconst toValue = (value: JsonValue): Value => {\n if (value === null || typeof value !== 'object') return value;\n if (Array.isArray(value)) return { kind: 'lista', id: 0, items: value.map(toValue) };\n return {\n kind: 'diccionario',\n id: 0,\n entries: new Map<DictKey, Value>(Object.entries(value).map(([key, item]) => [key, toValue(item)])),\n };\n};\n\nconst normalize = (text: string): string =>\n text\n .replace(/\\r\\n/g, '\\n')\n .split('\\n')\n .map(line => line.replace(/[ \\t]+$/, ''))\n .join('\\n')\n .replace(/\\n+$/, '');\n\n/** Ejecuta cada caso del reto con el código de quien lo resuelve. */\nexport const evaluarReto = (source: string, challenge: Challenge): ChallengeResult => {\n const procedure = challenge.procedure ?? 'resolver';\n const cases = challenge.cases.map((testCase, index): CaseResult => {\n const name = testCase.name ?? `Caso ${index + 1}`;\n const maxOperations = testCase.maxOperations ?? challenge.maxOperations ?? DEFAULT_MAX_OPERATIONS;\n const input = testCase.input ?? [];\n\n if (challenge.style === 'salida') {\n const result = run(source, { input, maxOperations });\n const expectedOutput = testCase.expectedOutput ?? '';\n const same = challenge.exactOutput\n ? result.output === expectedOutput\n : normalize(result.output) === normalize(expectedOutput);\n return {\n name,\n passed: result.ok && same,\n output: result.output,\n expectedOutput,\n operations: result.operations,\n ...(result.errors[0] ? { error: result.errors[0] } : {}),\n };\n }\n\n // La llamada va al final, en su propia línea, para que los errores del programa conserven su lugar.\n const call = `\\n;\\nregresa ${procedure}(${(testCase.args ?? []).map(literal).join(', ')});\\n`;\n const result = run(source + call, { input, maxOperations });\n const expected = toValue(testCase.expected ?? null);\n return {\n name,\n passed: result.ok && equals(result.result, expected),\n output: result.output,\n result: result.resultText,\n expected: repr(expected),\n operations: result.operations,\n ...(result.errors[0] ? { error: result.errors[0] } : {}),\n };\n });\n return { passed: cases.every(testCase => testCase.passed), cases };\n};\n",
24
24
  "import type { Challenge, ChallengeResult } from './challenge';\nimport type { Loaded, Progress, SandboxOptions, SandboxRequest, SandboxResponse, Stopped } from './sandbox-host';\n\n/** Lo que `createSandbox` necesita de un worker (un `Worker` del navegador o de Bun). */\nexport interface WorkerLike {\n postMessage(message: SandboxRequest): void;\n addEventListener(type: 'message', listener: (event: MessageEvent<SandboxResponse>) => void): void;\n terminate?(): void;\n}\n\nexport interface Sandbox {\n /** Analiza el código; si no tiene errores, queda listo para ejecutarse. */\n load(source: string, options?: SandboxOptions): Promise<Loaded>;\n /** Ejecuta hasta terminar, sin detenerse en los puntos de interrupción. */\n run(): Promise<Stopped>;\n /** Ejecuta hasta el siguiente punto de interrupción, o hasta terminar. */\n resume(): Promise<Stopped>;\n step(): Promise<Stopped>;\n /** Pide pausar; la promesa de `run()` o `resume()` se resuelve con el estado en el que quedó. */\n pause(): Promise<void>;\n /** Retrocede (o avanza) hasta el paso `n` volviendo a ejecutar desde el inicio. */\n goToStep(step: number): Promise<Stopped>;\n provideInput(line: string): Promise<void>;\n closeInput(): Promise<void>;\n setBreakpoints(lines: number[]): Promise<void>;\n evaluarReto(source: string, challenge: Challenge): Promise<ChallengeResult>;\n /** Progreso de cada tanda (operaciones, salida nueva, eventos). Regresa cómo dejar de escuchar. */\n onProgress(listener: (progress: Progress) => void): () => void;\n /** Cada vez que la ejecución se detiene. Regresa cómo dejar de escuchar. */\n onStopped(listener: (stopped: Stopped) => void): () => void;\n terminate(): void;\n}\n\ntype Body<T extends SandboxRequest['type']> = Omit<Extract<SandboxRequest, { type: T }>, 'id'>;\n\n/** Envuelve el worker de `codexivo/worker` con promesas y suscripciones. */\nexport const createSandbox = (worker: WorkerLike): Sandbox => {\n let nextId = 1;\n const pending = new Map<number, { resolve: (value: never) => void; reject: (error: Error) => void }>();\n const progressListeners = new Set<(progress: Progress) => void>();\n const stoppedListeners = new Set<(stopped: Stopped) => void>();\n\n worker.addEventListener('message', ({ data }) => {\n if (data.type === 'progreso') {\n for (const listener of progressListeners) listener(data);\n return;\n }\n if (data.type === 'detenido') for (const listener of stoppedListeners) listener(data);\n const request = pending.get(data.id);\n if (!request) return;\n pending.delete(data.id);\n if (data.type === 'error') request.reject(new Error(data.message));\n else if (data.type === 'hecho') request.resolve(undefined as never);\n else if (data.type === 'reto') request.resolve(data.result as never);\n else request.resolve(data as never);\n });\n\n const send = <T extends SandboxRequest['type'], R>(type: T, body: Omit<Body<T>, 'type'> = {} as never) =>\n new Promise<R>((resolve, reject) => {\n const id = nextId++;\n pending.set(id, { resolve: resolve as (value: never) => void, reject });\n worker.postMessage({ type, id, ...body } as SandboxRequest);\n });\n\n const subscribe = <T>(listeners: Set<T>, listener: T) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n\n return {\n load: (source, options) => send<'cargar', Loaded>('cargar', { source, ...(options ? { options } : {}) }),\n run: () => send<'ejecutar', Stopped>('ejecutar'),\n resume: () => send<'continuar', Stopped>('continuar'),\n step: () => send<'paso', Stopped>('paso'),\n pause: () => send<'pausar', void>('pausar'),\n goToStep: step => send<'ir_a_paso', Stopped>('ir_a_paso', { step }),\n provideInput: line => send<'entrada', void>('entrada', { line }),\n closeInput: () => send<'cerrar_entrada', void>('cerrar_entrada'),\n setBreakpoints: lines => send<'puntos_de_interrupción', void>('puntos_de_interrupción', { lines }),\n evaluarReto: (source, challenge) => send<'evaluar_reto', ChallengeResult>('evaluar_reto', { source, challenge }),\n onProgress: listener => {\n const unsubscribe = subscribe(progressListeners, listener);\n return () => void unsubscribe();\n },\n onStopped: listener => {\n const unsubscribe = subscribe(stoppedListeners, listener);\n return () => void unsubscribe();\n },\n terminate: () => {\n worker.terminate?.();\n for (const request of pending.values()) request.reject(new Error('El sandbox se cerró.'));\n pending.clear();\n },\n };\n};\n",
25
- "import { evaluarReto } from './challenge';\nimport type { Challenge, ChallengeResult } from './challenge';\nimport type { ErrorInfo } from './errors';\nimport { Machine, serialize } from './runtime/machine';\nimport type { MachineEvent, MachineOptions, MachineStatus, SerializedValue, Snapshot } from './runtime/machine';\nimport { compile } from './runtime/compiler';\nimport { parse } from './syntax/parser';\nimport type * as ast from './syntax/ast';\nimport type { Token } from './syntax/token';\nimport { createWorld } from './world';\nimport type { WorldDefinition } from './world';\n\n/**\n * Protocolo del sandbox: los mensajes entre la página y el worker que ejecuta el código. La lógica vive aquí,\n * sin depender de `postMessage`, para poder probarla; `worker.ts` la conecta con el worker y `sandbox.ts` es\n * el cliente tipado para la página.\n */\n\n/** Qué eventos llegan en cada tanda. */\nexport type EventDetail = 'nada' | 'pasos' | 'decisiones' | 'todo';\n\nexport interface SandboxOptions {\n /** Entrada inicial, además de la que se dé con `entrada`. */\n input?: string[];\n /** Si `leer()` sin entrada pausa la ejecución para pedirla. Por defecto `true`. */\n interactiveInput?: boolean;\n /** Semilla de `aleatorio`. Si no se da, se elige una al cargar y se conserva en los retrocesos. */\n seed?: number;\n maxOperations?: number;\n maxCallDepth?: number;\n maxOutput?: number;\n breakpoints?: number[];\n /** Mundo del modo mundo, en el formato de `WorldDefinition`. */\n world?: WorldDefinition;\n /**\n * `pasos`: solo `paso` y `robot`; `decisiones`: además `decide`; `todo`: todos los eventos; `nada`: ninguno.\n * Por defecto `decisiones`.\n */\n detail?: EventDetail;\n /** Operaciones por tanda antes de ceder el control. Por defecto 50 000. */\n batchSize?: number;\n}\n\nexport type SandboxRequest =\n | { type: 'cargar'; id: number; source: string; options?: SandboxOptions }\n /** Ejecuta hasta terminar, sin detenerse en los puntos de interrupción. */\n | { type: 'ejecutar'; id: number }\n /** Ejecuta hasta el siguiente punto de interrupción, o hasta terminar. */\n | { type: 'continuar'; id: number }\n | { type: 'paso'; id: number }\n | { type: 'pausar'; id: number }\n /** Vuelve a ejecutar desde el inicio, con la misma entrada y semilla, hasta el paso `step`. */\n | { type: 'ir_a_paso'; id: number; step: number }\n | { type: 'entrada'; id: number; line: string }\n | { type: 'cerrar_entrada'; id: number }\n | { type: 'puntos_de_interrupción'; id: number; lines: number[] }\n | { type: 'evaluar_reto'; id: number; source: string; challenge: Challenge };\n\nexport type StopReason = 'paso' | 'punto_de_interrupción' | 'pausa' | 'entrada' | 'fin' | 'error' | 'retroceso';\n\nexport interface Loaded {\n type: 'cargado';\n id: number;\n tokens: Token[];\n program: ast.Program;\n /** Errores léxicos y sintácticos. Si hay alguno, no se puede ejecutar. */\n errors: ErrorInfo[];\n /** Semilla de `aleatorio` de esta carga. */\n seed: number;\n}\n\nexport interface Progress {\n type: 'progreso';\n id: number;\n operations: number;\n steps: number;\n /** Salida nueva desde el mensaje anterior. */\n output: string;\n events: MachineEvent[];\n}\n\nexport interface Stopped {\n type: 'detenido';\n id: number;\n status: MachineStatus;\n reason: StopReason;\n operations: number;\n steps: number;\n /** Salida nueva desde el mensaje anterior; con `replaceOutput`, toda la salida. */\n output: string;\n /** En un retroceso, la salida reemplaza a la anterior en lugar de agregarse. */\n replaceOutput?: boolean;\n events: MachineEvent[];\n snapshot: Snapshot;\n result?: SerializedValue;\n error?: ErrorInfo;\n}\n\nexport type SandboxResponse =\n | Loaded\n | Progress\n | Stopped\n | { type: 'hecho'; id: number }\n | { type: 'reto'; id: number; result: ChallengeResult }\n /** El mensaje no se pudo atender (no hay programa cargado, la ejecución sigue en curso…). */\n | { type: 'error'; id: number; message: string };\n\nconst DETAIL: Record<EventDetail, ReadonlySet<MachineEvent['type']> | 'todo'> = {\n nada: new Set(),\n pasos: new Set(['paso', 'robot']),\n decisiones: new Set(['paso', 'robot', 'decide']),\n todo: 'todo',\n};\n\nconst tick = () => new Promise<void>(resolve => setTimeout(resolve, 0));\n\nexport class SandboxHost {\n private program?: ast.Program;\n private options: SandboxOptions = {};\n private seed = 0;\n private machine?: Machine;\n /** Líneas que se le dieron a `leer()` en esta carga, para repetirlas al retroceder. */\n private inputLog: string[] = [];\n private inputClosed = false;\n private events: MachineEvent[] = [];\n private muted = false;\n private sentOutput = 0;\n private running = false;\n private pauseRequested = false;\n\n constructor(private readonly post: (message: SandboxResponse) => void) {}\n\n async handle(request: SandboxRequest): Promise<void> {\n switch (request.type) {\n case 'cargar':\n if (this.running) return this.busy(request.id);\n return this.load(request.id, request.source, request.options ?? {});\n case 'evaluar_reto':\n this.post({ type: 'reto', id: request.id, result: evaluarReto(request.source, request.challenge) });\n return;\n case 'pausar':\n this.pauseRequested = this.running;\n this.post({ type: 'hecho', id: request.id });\n return;\n }\n\n const machine = this.machine;\n if (!machine) {\n this.post({ type: 'error', id: request.id, message: 'No hay un programa cargado sin errores.' });\n return;\n }\n switch (request.type) {\n case 'entrada':\n this.inputLog.push(request.line);\n machine.provideInput(request.line);\n this.post({ type: 'hecho', id: request.id });\n return;\n case 'cerrar_entrada':\n this.inputClosed = true;\n machine.closeInput();\n this.post({ type: 'hecho', id: request.id });\n return;\n case 'puntos_de_interrupción':\n this.options = { ...this.options, breakpoints: request.lines };\n machine.setBreakpoints(request.lines);\n this.post({ type: 'hecho', id: request.id });\n return;\n }\n\n if (this.running) return this.busy(request.id);\n switch (request.type) {\n case 'paso':\n machine.step();\n this.stopped(request.id, machine);\n return;\n case 'ejecutar':\n case 'continuar':\n return this.runInBatches(request.id, machine, request.type === 'ejecutar');\n case 'ir_a_paso':\n this.goToStep(request.id, request.step);\n return;\n }\n }\n\n private busy(id: number): void {\n this.post({ type: 'error', id, message: 'La ejecución sigue en curso; pausa antes de mandar otra orden.' });\n }\n\n private load(id: number, source: string, options: SandboxOptions): void {\n this.options = options;\n this.seed = (options.seed ?? Math.floor(Math.random() * 2 ** 32)) >>> 0;\n this.inputLog = [];\n this.inputClosed = false;\n this.events = [];\n this.sentOutput = 0;\n const { program, tokens, errors } = parse(source);\n this.program = errors.length === 0 ? program : undefined;\n this.machine = this.program ? this.createMachine() : undefined;\n this.post({ type: 'cargado', id, tokens, program, errors: errors.map(error => error.toJSON()), seed: this.seed });\n }\n\n private createMachine(): Machine {\n const { options } = this;\n const levels = DETAIL[options.detail ?? 'decisiones'];\n const machineOptions: MachineOptions = {\n input: options.input ?? [],\n interactiveInput: options.interactiveInput ?? true,\n seed: this.seed,\n breakpoints: options.breakpoints ?? [],\n onEvent: event => {\n if (this.muted) return;\n if (levels === 'todo' || levels.has(event.type)) this.events.push(event);\n },\n ...(options.maxOperations !== undefined ? { maxOperations: options.maxOperations } : {}),\n ...(options.maxCallDepth !== undefined ? { maxCallDepth: options.maxCallDepth } : {}),\n ...(options.maxOutput !== undefined ? { maxOutput: options.maxOutput } : {}),\n ...(options.world ? { world: createWorld(options.world) } : {}),\n };\n return new Machine(compile(this.program!), machineOptions);\n }\n\n private async runInBatches(id: number, machine: Machine, ignoreBreakpoints: boolean): Promise<void> {\n this.running = true;\n this.pauseRequested = false;\n const breakpoints = this.options.breakpoints ?? [];\n if (ignoreBreakpoints) machine.setBreakpoints([]);\n try {\n while (true) {\n const status = machine.run(this.options.batchSize ?? 50_000);\n if (status !== 'pausada' || machine.pauseReason !== 'presupuesto') break;\n if (this.pauseRequested) break;\n this.post({\n type: 'progreso',\n id,\n operations: machine.operations,\n steps: machine.steps,\n output: this.newOutput(machine),\n events: this.takeEvents(),\n });\n // Ceder el control deja que llegue un `pausar`.\n await tick();\n if (this.pauseRequested) break;\n }\n } finally {\n if (ignoreBreakpoints) machine.setBreakpoints(breakpoints);\n this.running = false;\n }\n this.stopped(id, machine, this.pauseRequested && machine.status === 'pausada' ? 'pausa' : undefined);\n this.pauseRequested = false;\n }\n\n private goToStep(id: number, step: number): void {\n // Como la ejecución es determinista, otra máquina con la misma entrada y semilla llega al mismo estado.\n const machine = this.createMachine();\n for (const line of this.inputLog) machine.provideInput(line);\n if (this.inputClosed) machine.closeInput();\n this.muted = true;\n try {\n while (machine.steps < step && !machine.done && machine.status !== 'esperando_entrada') machine.step();\n } finally {\n this.muted = false;\n }\n this.machine = machine;\n this.events = [];\n this.sentOutput = 0;\n this.stopped(id, machine, 'retroceso', true);\n }\n\n private newOutput(machine: Machine): string {\n const output = machine.output;\n const fresh = output.slice(this.sentOutput);\n this.sentOutput = output.length;\n return fresh;\n }\n\n private takeEvents(): MachineEvent[] {\n const events = this.events;\n this.events = [];\n return events;\n }\n\n private stopped(id: number, machine: Machine, reason?: StopReason, replaceOutput = false): void {\n const status = machine.status;\n const finalReason: StopReason =\n reason ??\n (status === 'terminada'\n ? 'fin'\n : status === 'error'\n ? 'error'\n : status === 'esperando_entrada'\n ? 'entrada'\n : machine.pauseReason === 'punto_de_interrupción'\n ? 'punto_de_interrupción'\n : 'paso');\n this.post({\n type: 'detenido',\n id,\n status,\n reason: finalReason,\n operations: machine.operations,\n steps: machine.steps,\n output: this.newOutput(machine),\n ...(replaceOutput ? { replaceOutput: true } : {}),\n events: this.takeEvents(),\n snapshot: machine.snapshot(),\n ...(status === 'terminada' ? { result: serialize(machine.result) } : {}),\n ...(machine.error ? { error: machine.error.toJSON() } : {}),\n });\n }\n}\n"
25
+ "import { evaluarReto } from './challenge';\nimport type { Challenge, ChallengeResult } from './challenge';\nimport type { ErrorInfo } from './errors';\nimport { Machine, serialize } from './runtime/machine';\nimport type { MachineEvent, MachineOptions, MachineStatus, SerializedValue, Snapshot } from './runtime/machine';\nimport { compile } from './runtime/compiler';\nimport { parse } from './syntax/parser';\nimport type { ParseEvent } from './syntax/parser';\nimport type * as ast from './syntax/ast';\nimport type { Token } from './syntax/token';\nimport { createWorld } from './world';\nimport type { WorldDefinition } from './world';\n\n/**\n * Protocolo del sandbox: los mensajes entre la página y el worker que ejecuta el código. La lógica vive aquí,\n * sin depender de `postMessage`, para poder probarla; `worker.ts` la conecta con el worker y `sandbox.ts` es\n * el cliente tipado para la página.\n */\n\n/** Qué eventos llegan en cada tanda. */\nexport type EventDetail = 'nada' | 'pasos' | 'decisiones' | 'todo';\n\nexport interface SandboxOptions {\n /** Entrada inicial, además de la que se dé con `entrada`. */\n input?: string[];\n /** Si `leer()` sin entrada pausa la ejecución para pedirla. Por defecto `true`. */\n interactiveInput?: boolean;\n /** Semilla de `aleatorio`. Si no se da, se elige una al cargar y se conserva en los retrocesos. */\n seed?: number;\n maxOperations?: number;\n maxCallDepth?: number;\n maxOutput?: number;\n breakpoints?: number[];\n /** Mundo del modo mundo, en el formato de `WorldDefinition`. */\n world?: WorldDefinition;\n /**\n * `pasos`: solo `paso` y `robot`; `decisiones`: además `decide`; `todo`: todos los eventos; `nada`: ninguno.\n * Por defecto `decisiones`.\n */\n detail?: EventDetail;\n /** Operaciones por tanda antes de ceder el control. Por defecto 50 000. */\n batchSize?: number;\n /** Si `cargado` trae `parseTrace`: cómo construyó el parser el árbol, paso a paso. Por defecto `false`. */\n parseTrace?: boolean;\n}\n\nexport type SandboxRequest =\n | { type: 'cargar'; id: number; source: string; options?: SandboxOptions }\n /** Ejecuta hasta terminar, sin detenerse en los puntos de interrupción. */\n | { type: 'ejecutar'; id: number }\n /** Ejecuta hasta el siguiente punto de interrupción, o hasta terminar. */\n | { type: 'continuar'; id: number }\n | { type: 'paso'; id: number }\n | { type: 'pausar'; id: number }\n /** Vuelve a ejecutar desde el inicio, con la misma entrada y semilla, hasta el paso `step`. */\n | { type: 'ir_a_paso'; id: number; step: number }\n | { type: 'entrada'; id: number; line: string }\n | { type: 'cerrar_entrada'; id: number }\n | { type: 'puntos_de_interrupción'; id: number; lines: number[] }\n | { type: 'evaluar_reto'; id: number; source: string; challenge: Challenge };\n\nexport type StopReason = 'paso' | 'punto_de_interrupción' | 'pausa' | 'entrada' | 'fin' | 'error' | 'retroceso';\n\nexport interface Loaded {\n type: 'cargado';\n id: number;\n tokens: Token[];\n program: ast.Program;\n /** Errores léxicos y sintácticos. Si hay alguno, no se puede ejecutar. */\n errors: ErrorInfo[];\n /** Semilla de `aleatorio` de esta carga. */\n seed: number;\n /** La traza del parser (ver `parse(código, { trace: true })`), solo con la opción `parseTrace`. */\n parseTrace?: ParseEvent[];\n}\n\nexport interface Progress {\n type: 'progreso';\n id: number;\n operations: number;\n steps: number;\n /** Salida nueva desde el mensaje anterior. */\n output: string;\n events: MachineEvent[];\n}\n\nexport interface Stopped {\n type: 'detenido';\n id: number;\n status: MachineStatus;\n reason: StopReason;\n operations: number;\n steps: number;\n /** Salida nueva desde el mensaje anterior; con `replaceOutput`, toda la salida. */\n output: string;\n /** En un retroceso, la salida reemplaza a la anterior en lugar de agregarse. */\n replaceOutput?: boolean;\n events: MachineEvent[];\n snapshot: Snapshot;\n result?: SerializedValue;\n error?: ErrorInfo;\n}\n\nexport type SandboxResponse =\n | Loaded\n | Progress\n | Stopped\n | { type: 'hecho'; id: number }\n | { type: 'reto'; id: number; result: ChallengeResult }\n /** El mensaje no se pudo atender (no hay programa cargado, la ejecución sigue en curso…). */\n | { type: 'error'; id: number; message: string };\n\nconst DETAIL: Record<EventDetail, ReadonlySet<MachineEvent['type']> | 'todo'> = {\n nada: new Set(),\n pasos: new Set(['paso', 'robot']),\n decisiones: new Set(['paso', 'robot', 'decide']),\n todo: 'todo',\n};\n\nconst tick = () => new Promise<void>(resolve => setTimeout(resolve, 0));\n\nexport class SandboxHost {\n private program?: ast.Program;\n private options: SandboxOptions = {};\n private seed = 0;\n private machine?: Machine;\n /** Líneas que se le dieron a `leer()` en esta carga, para repetirlas al retroceder. */\n private inputLog: string[] = [];\n private inputClosed = false;\n private events: MachineEvent[] = [];\n private muted = false;\n private sentOutput = 0;\n private running = false;\n private pauseRequested = false;\n\n constructor(private readonly post: (message: SandboxResponse) => void) {}\n\n async handle(request: SandboxRequest): Promise<void> {\n switch (request.type) {\n case 'cargar':\n if (this.running) return this.busy(request.id);\n return this.load(request.id, request.source, request.options ?? {});\n case 'evaluar_reto':\n this.post({ type: 'reto', id: request.id, result: evaluarReto(request.source, request.challenge) });\n return;\n case 'pausar':\n this.pauseRequested = this.running;\n this.post({ type: 'hecho', id: request.id });\n return;\n }\n\n const machine = this.machine;\n if (!machine) {\n this.post({ type: 'error', id: request.id, message: 'No hay un programa cargado sin errores.' });\n return;\n }\n switch (request.type) {\n case 'entrada':\n this.inputLog.push(request.line);\n machine.provideInput(request.line);\n this.post({ type: 'hecho', id: request.id });\n return;\n case 'cerrar_entrada':\n this.inputClosed = true;\n machine.closeInput();\n this.post({ type: 'hecho', id: request.id });\n return;\n case 'puntos_de_interrupción':\n this.options = { ...this.options, breakpoints: request.lines };\n machine.setBreakpoints(request.lines);\n this.post({ type: 'hecho', id: request.id });\n return;\n }\n\n if (this.running) return this.busy(request.id);\n switch (request.type) {\n case 'paso':\n machine.step();\n this.stopped(request.id, machine);\n return;\n case 'ejecutar':\n case 'continuar':\n return this.runInBatches(request.id, machine, request.type === 'ejecutar');\n case 'ir_a_paso':\n this.goToStep(request.id, request.step);\n return;\n }\n }\n\n private busy(id: number): void {\n this.post({ type: 'error', id, message: 'La ejecución sigue en curso; pausa antes de mandar otra orden.' });\n }\n\n private load(id: number, source: string, options: SandboxOptions): void {\n this.options = options;\n this.seed = (options.seed ?? Math.floor(Math.random() * 2 ** 32)) >>> 0;\n this.inputLog = [];\n this.inputClosed = false;\n this.events = [];\n this.sentOutput = 0;\n const { program, tokens, errors, trace } = parse(source, { trace: options.parseTrace ?? false });\n this.program = errors.length === 0 ? program : undefined;\n this.machine = this.program ? this.createMachine() : undefined;\n this.post({\n type: 'cargado',\n id,\n tokens,\n program,\n errors: errors.map(error => error.toJSON()),\n seed: this.seed,\n ...(trace ? { parseTrace: trace } : {}),\n });\n }\n\n private createMachine(): Machine {\n const { options } = this;\n const levels = DETAIL[options.detail ?? 'decisiones'];\n const machineOptions: MachineOptions = {\n input: options.input ?? [],\n interactiveInput: options.interactiveInput ?? true,\n seed: this.seed,\n breakpoints: options.breakpoints ?? [],\n onEvent: event => {\n if (this.muted) return;\n if (levels === 'todo' || levels.has(event.type)) this.events.push(event);\n },\n ...(options.maxOperations !== undefined ? { maxOperations: options.maxOperations } : {}),\n ...(options.maxCallDepth !== undefined ? { maxCallDepth: options.maxCallDepth } : {}),\n ...(options.maxOutput !== undefined ? { maxOutput: options.maxOutput } : {}),\n ...(options.world ? { world: createWorld(options.world) } : {}),\n };\n return new Machine(compile(this.program!), machineOptions);\n }\n\n private async runInBatches(id: number, machine: Machine, ignoreBreakpoints: boolean): Promise<void> {\n this.running = true;\n this.pauseRequested = false;\n const breakpoints = this.options.breakpoints ?? [];\n if (ignoreBreakpoints) machine.setBreakpoints([]);\n try {\n while (true) {\n const status = machine.run(this.options.batchSize ?? 50_000);\n if (status !== 'pausada' || machine.pauseReason !== 'presupuesto') break;\n if (this.pauseRequested) break;\n this.post({\n type: 'progreso',\n id,\n operations: machine.operations,\n steps: machine.steps,\n output: this.newOutput(machine),\n events: this.takeEvents(),\n });\n // Ceder el control deja que llegue un `pausar`.\n await tick();\n if (this.pauseRequested) break;\n }\n } finally {\n if (ignoreBreakpoints) machine.setBreakpoints(breakpoints);\n this.running = false;\n }\n this.stopped(id, machine, this.pauseRequested && machine.status === 'pausada' ? 'pausa' : undefined);\n this.pauseRequested = false;\n }\n\n private goToStep(id: number, step: number): void {\n // Como la ejecución es determinista, otra máquina con la misma entrada y semilla llega al mismo estado.\n const machine = this.createMachine();\n for (const line of this.inputLog) machine.provideInput(line);\n if (this.inputClosed) machine.closeInput();\n this.muted = true;\n try {\n while (machine.steps < step && !machine.done && machine.status !== 'esperando_entrada') machine.step();\n } finally {\n this.muted = false;\n }\n this.machine = machine;\n this.events = [];\n this.sentOutput = 0;\n this.stopped(id, machine, 'retroceso', true);\n }\n\n private newOutput(machine: Machine): string {\n const output = machine.output;\n const fresh = output.slice(this.sentOutput);\n this.sentOutput = output.length;\n return fresh;\n }\n\n private takeEvents(): MachineEvent[] {\n const events = this.events;\n this.events = [];\n return events;\n }\n\n private stopped(id: number, machine: Machine, reason?: StopReason, replaceOutput = false): void {\n const status = machine.status;\n const finalReason: StopReason =\n reason ??\n (status === 'terminada'\n ? 'fin'\n : status === 'error'\n ? 'error'\n : status === 'esperando_entrada'\n ? 'entrada'\n : machine.pauseReason === 'punto_de_interrupción'\n ? 'punto_de_interrupción'\n : 'paso');\n this.post({\n type: 'detenido',\n id,\n status,\n reason: finalReason,\n operations: machine.operations,\n steps: machine.steps,\n output: this.newOutput(machine),\n ...(replaceOutput ? { replaceOutput: true } : {}),\n events: this.takeEvents(),\n snapshot: machine.snapshot(),\n ...(status === 'terminada' ? { result: serialize(machine.result) } : {}),\n ...(machine.error ? { error: machine.error.toJSON() } : {}),\n });\n }\n}\n"
26
26
  ],
27
- "mappings": "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V,OAAQ,EACR,QAAS,eAAe,MAAM,yCAAyC,eACzE,CAAC,EAGL,MAAO,CAAE,GAAI,EAAY,SAAW,EAAG,aAAY,GC9f9C,IAAM,GAAkF,CAE7F,qBAAsB,CACpB,KAAM,SACN,YACE,sPACJ,EACA,sBAAuB,CACrB,KAAM,SACN,YACE,2IACJ,EACA,mBAAoB,CAClB,KAAM,SACN,YACE,yMACJ,EACA,0BAA2B,CACzB,KAAM,SACN,YACE,6IACJ,EACA,mBAAoB,CAClB,KAAM,SACN,YACE,+JACJ,EACA,iBAAkB,CAChB,KAAM,SACN,YACE,mLACJ,EAGA,qBAAsB,CACpB,KAAM,WACN,YACE,6KACJ,EACA,oBAAqB,CACnB,KAAM,WACN,YACE,+NACJ,EACA,kBAAmB,CACjB,KAAM,WACN,YACE,8KACJ,EACA,eAAgB,CACd,KAAM,WACN,YACE,uMACJ,EACA,eAAgB,CACd,KAAM,WACN,YACE,2JACJ,EACA,mBAAoB,CAClB,KAAM,WACN,YACE,+MACJ,EACA,uBAAwB,CACtB,KAAM,WACN,YACE,iIACJ,EACA,yBAA0B,CACxB,KAAM,WACN,YACE,8KACJ,EACA,2BAA4B,CAC1B,KAAM,WACN,YACE,oLACJ,EACA,2BAA4B,CAC1B,KAAM,WACN,YACE,gPACJ,EACA,iBAAkB,CAChB,KAAM,WACN,YAAa,8FACf,EACA,mBAAoB,CAClB,KAAM,WACN,YACE,wMACJ,EACA,qBAAsB,CACpB,KAAM,WACN,YACE,uGACJ,EACA,iBAAkB,CAChB,KAAM,WACN,YACE,0KACJ,EACA,oBAAqB,CACnB,KAAM,WACN,YACE,yJACJ,EACA,wBAAyB,CACvB,KAAM,WACN,YACE,sMACJ,EACA,eAAgB,CACd,KAAM,WACN,YAAa,kGACf,EACA,gBAAiB,CACf,KAAM,WACN,YACE,gIACJ,EACA,gBAAiB,CACf,KAAM,WACN,YACE,mOACJ,EACA,oBAAqB,CACnB,KAAM,WACN,YACE,iIACJ,EACA,kBAAmB,CACjB,KAAM,WACN,YACE,sMACJ,EACA,mBAAoB,CAClB,KAAM,WACN,YACE,8IACJ,EACA,yBAA0B,CACxB,KAAM,WACN,YACE,oMACJ,EACA,YAAa,CACX,KAAM,WACN,YACE,2HACJ,EACA,qBAAsB,CACpB,KAAM,WACN,YAAa,wFACf,EACA,sBAAuB,CACrB,KAAM,WACN,YACE,iIACJ,EACA,uBAAwB,CACtB,KAAM,WACN,YACE,2JACJ,EACA,SAAU,CACR,KAAM,WACN,YACE,8GACJ,EACA,eAAgB,CACd,KAAM,WACN,YACE,sKACJ,EACA,aAAc,CACZ,KAAM,WACN,YAAa,2EACf,EAGA,mBAAoB,CAClB,KAAM,YACN,YACE,8SACJ,EACA,uBAAwB,CACtB,KAAM,YACN,YACE,sJACJ,EACA,iBAAkB,CAChB,KAAM,YACN,YACE,kHACJ,EACA,kBAAmB,CACjB,KAAM,YACN,YACE,yLACJ,EACA,eAAgB,CACd,KAAM,YACN,YACE,uGACJ,EACA,WAAY,CACV,KAAM,YACN,YACE,8GACJ,EACA,qBAAsB,CACpB,KAAM,YACN,YACE,0KACJ,EACA,oBAAqB,CACnB,KAAM,YACN,YACE,8NACJ,EACA,qBAAsB,CACpB,KAAM,YACN,YACE,+GACJ,EACA,mCAAoC,CAClC,KAAM,YACN,YACE,8KACJ,EACA,oBAAqB,CACnB,KAAM,YACN,YACE,0GACJ,EACA,6BAA8B,CAC5B,KAAM,YACN,YACE,iNACJ,EACA,YAAa,CACX,KAAM,YACN,YACE,+GACJ,EACA,wBAAyB,CACvB,KAAM,YACN,YACE,uOACJ,EACA,oBAAqB,CACnB,KAAM,YACN,YACE,uKACJ,EACA,cAAe,CACb,KAAM,YACN,YAAa,gGACf,EACA,mBAAoB,CAClB,KAAM,YACN,YACE,4KACJ,EACA,gCAAiC,CAC/B,KAAM,YACN,YACE,qMACJ,EACA,aAAc,CACZ,KAAM,YACN,YACE,mHACJ,EACA,oBAAqB,CACnB,KAAM,YACN,YACE,8KACJ,EACA,mBAAoB,CAClB,KAAM,YACN,YACE,gJACJ,EACA,qBAAsB,CACpB,KAAM,YACN,YACE,0KACJ,EACA,eAAgB,CACd,KAAM,YACN,YACE,uKACJ,EACA,uBAAwB,CACtB,KAAM,YACN,YACE,sQACJ,EACA,mBAAoB,CAClB,KAAM,YACN,YACE,6MACJ,EACA,WAAY,CACV,KAAM,YACN,YACE,4GACJ,EACA,kBAAmB,CACjB,KAAM,YACN,YACE,6IACJ,EACA,uBAAwB,CACtB,KAAM,YACN,YACE,sHACJ,EACA,eAAgB,CACd,KAAM,YACN,YACE,gIACJ,EACA,gBAAiB,CACf,KAAM,YACN,YACE,oIACJ,EACA,iBAAkB,CAChB,KAAM,YACN,YAAa,6DACf,EACA,uBAAwB,CACtB,KAAM,YACN,YACE,yIACJ,EACA,cAAe,CACb,KAAM,YACN,YAAa,gGACf,EACA,gBAAiB,CACf,KAAM,YACN,YACE,8HACJ,EACA,YAAa,CACX,KAAM,YACN,YACE,mHACJ,EACA,eAAgB,CACd,KAAM,YACN,YAAa,yFACf,EACA,gBAAiB,CACf,KAAM,YACN,YACE,yJACJ,EACA,gBAAiB,CACf,KAAM,YACN,YACE,kLACJ,EACA,kBAAmB,CACjB,KAAM,YACN,YACE,kKACJ,EACA,cAAe,CACb,KAAM,YACN,YACE,2HACJ,EACA,iBAAkB,CAChB,KAAM,YACN,YACE,qOACJ,EACA,sBAAuB,CACrB,KAAM,YACN,YACE,oIACJ,EACA,kBAAmB,CACjB,KAAM,YACN,YACE,+JACJ,EACA,sBAAuB,CACrB,KAAM,YACN,YACE,8KACJ,EACA,gBAAiB,CACf,KAAM,YACN,YACE,6GACJ,EACA,oBAAqB,CACnB,KAAM,YACN,YACE,yHACJ,EAGA,oBAAqB,CACnB,KAAM,SACN,YACE,wJACJ,EACA,uBAAwB,CACtB,KAAM,SACN,YACE,iKACJ,EACA,iBAAkB,CAChB,KAAM,SACN,YACE,yGACJ,CACF,ECpXA,IAAM,GAAyD,CAC5D,IAAgB,cAChB,MAAkB,cAClB,OAAmB,cACnB,SAAqB,cACrB,OAAmB,cACnB,GAAe,UACf,OAAmB,UACnB,KAAiB,UACjB,MAAkB,UAClB,GAAe,UACf,MAAkB,UAClB,IAAgB,UAChB,SAAqB,UACrB,KAAiB,UACjB,GAAe,UACf,KAAiB,UACjB,GAAe,UACf,OAAmB,UACnB,MAAkB,UAClB,MAAkB,UAClB,SAAqB,UACrB,IAAgB,UAChB,GAAe,UACf,IAAgB,UAChB,KAAiB,YACjB,MAAkB,YAClB,KAAiB,YACjB,IAAgB,aAChB,IAAgB,aAChB,GAAe,aACf,IAAgB,aAChB,GAAe,aACf,GAAe,aACf,IAAgB,aAChB,IAAgB,YACnB,EAEM,GAA8B,CAAC,cAAe,UAAW,UAAW,YAAa,YAAY,EAGtF,GAAe,CAAC,IAA2C,GAAe,EAAS,IAAS,IAEnG,GAAW,GAAY,IAAI,MAAU,CACzC,QACA,MAAO,OAAO,KAAK,CAAQ,EAAE,OAAO,KAAQ,GAAa,CAAI,IAAM,CAAK,CAC1E,EAAE,EAEI,GAA6B,CACjC,CACE,KAAM,IACN,WAAY,EACZ,cAAe,YACf,YAAa,2FACf,EACA,CACE,KAAM,IACN,WAAY,EACZ,cAAe,YACf,YAAa,8EACf,EACA,CACE,OAAQ,IACR,KAAM,KACN,WAAY,EACZ,cAAe,UACf,YAAa,wCACf,EACA,CACE,OAAQ,KACR,KAAM,aACN,WAAY,EACZ,cAAe,gBACf,YAAa,uDACf,EACA,CACE,OAAQ,KACR,KAAM,iBACN,WAAY,EACZ,cAAe,gBACf,YAAa,uBACf,EACA,CACE,OAAQ,IACR,KAAM,eACN,WAAY,EACZ,cAAe,gBACf,YAAa,mCACf,EACA,CACE,OAAQ,IACR,KAAM,eACN,WAAY,EACZ,cAAe,gBACf,YAAa,mCACf,EACA,CACE,OAAQ,KACR,KAAM,qBACN,WAAY,EACZ,cAAe,gBACf,YAAa,mCACf,EACA,CACE,OAAQ,KACR,KAAM,qBACN,WAAY,EACZ,cAAe,gBACf,YAAa,mCACf,EACA,CACE,OAAQ,IACR,WAAY,EACZ,cAAe,YACf,YAAa,mDACf,EACA,CAAE,OAAQ,IAAK,WAAY,EAAG,cAAe,YAAa,YAAa,QAAS,EAChF,CAAE,OAAQ,IAAK,WAAY,EAAG,cAAe,YAAa,YAAa,aAAc,EACrF,CAAE,OAAQ,IAAK,WAAY,EAAG,cAAe,YAAa,YAAa,kCAAmC,EAC1G,CACE,KAAM,MACN,WAAY,EACZ,cAAe,YACf,YAAa,kDACf,EACA,CACE,OAAQ,IACR,KAAM,MACN,WAAY,EACZ,cAAe,YACf,YAAa,mDACf,EACA,CAAE,OAAQ,IAAK,WAAY,EAAG,cAAe,UAAW,YAAa,kBAAmB,EACxF,CACE,OAAQ,IACR,WAAY,EACZ,cAAe,UACf,YAAa,uDACf,EACA,CAAE,OAAQ,MAAO,WAAY,EAAG,cAAe,YAAa,YAAa,mCAAoC,EAC7G,CACE,OAAQ,MACR,WAAY,EACZ,cAAe,YACf,YAAa,6EACf,EACA,CACE,OAAQ,IACR,WAAY,EACZ,cAAe,YACf,YAAa,+DACf,CACF,EAEM,GAAQ,CAAC,EAAc,IAAsC,CACjE,IAAM,EAAQ,GAAe,CAAI,EACjC,MAAO,CAAE,OAAM,QAAS,IAAU,EAAO,CAAC,EAAI,CAAC,CAAK,KAAM,CAAI,GAG1D,GAA4B,CAChC,GAAG,OAAO,OAAO,EAAO,EACrB,OAAO,CAAC,EAAQ,EAAO,IAAQ,EAAI,QAAQ,CAAM,IAAM,CAAK,EAC5D,IAAI,KAAU,GAAM,EAAO,KAAM,EAAO,GAAI,CAAC,EAChD,GAAG,OAAO,QAAQ,EAAW,EAAE,IAAI,EAAE,EAAM,KAAS,GAAM,EAAM,CAAG,CAAC,EACpE,GAAG,OAAO,QAAQ,EAAS,EAAE,IAAI,EAAE,EAAM,KAAS,GAAM,EAAM,CAAG,CAAC,CACpE,EAEM,GAAkC,CACtC,mBACA,QACA,eACA,cACA,QACA,SACA,eACA,iBACA,cACA,OACF,EAEa,GAAmB,CAC9B,QAAS,EACT,YACA,aACA,QAAS,GAAQ,KACf,CAAC,EAAG,IAAM,GAAW,QAAQ,EAAE,QAAQ,EAAI,GAAW,QAAQ,EAAE,QAAQ,GAAK,EAAE,KAAK,cAAc,EAAE,KAAM,IAAI,CAChH,EACA,UAAW,OAAO,QAAQ,EAAY,EAAE,IAAI,EAAE,EAAM,MAAU,CAC5D,OACA,MAAO,EAAU,MACd,CACL,EAAE,EACF,OAAQ,OAAO,QAAQ,EAAW,EAC/B,IAAI,EAAE,EAAM,MAAW,CAAE,UAAS,CAAK,EAAE,EACzC,KAAK,CAAC,EAAG,IAAM,EAAE,KAAK,cAAc,EAAE,KAAM,IAAI,CAAC,EACpD,WAAY,GACZ,aAAc,EAChB,ECvPA,IAAM,GAAa,CAAC,IAAiC,CACnD,OAAQ,EAAK,MACX,IAAK,UACH,OAAO,EAAK,WAAa,IAAM,EAAI,EACrC,IAAK,QACH,OAAO,EAAK,WAAa,KAAO,EAAI,EACtC,IAAK,SACH,OAAQ,EAAK,UACX,IAAK,KACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACH,MAAO,GACT,IAAK,IACL,IAAK,IACH,MAAO,GACT,IAAK,IACH,MAAO,GACT,QACE,MAAO,GAEb,QACE,MAAO,MAIP,EAAU,CAAC,EAAsB,EAAgB,IAA+B,CACpF,IAAM,EAAO,EAAgB,CAAI,EAC3B,EAAM,GAAW,CAAI,EAC3B,OAAO,EAAM,GAAW,GAAa,IAAQ,EAAU,IAAI,KAAU,GAG1D,EAAkB,CAAC,IAAiC,CAC/D,OAAQ,EAAK,MACX,IAAK,gBACL,IAAK,gBACL,IAAK,iBACH,OAAO,EAAK,EAAK,KAAK,EACxB,IAAK,cACH,MAAO,OACT,IAAK,aACH,OAAO,EAAK,KACd,IAAK,cACH,MAAO,IAAI,EAAK,SAAS,IAAI,CAAe,EAAE,KAAK,IAAI,KACzD,IAAK,cACH,OAAO,EAAK,QAAQ,SAAW,EAC3B,KACA,KAAK,EAAK,QACP,IAAI,KAAS,CACZ,IAAM,EAAM,EAAgB,EAAM,GAAG,EAErC,MAAO,GADS,EAAM,IAAI,OAAS,iBAAmB,EAAM,IAAI,OAAS,gBACrD,EAAM,IAAI,SAAW,EAAgB,EAAM,KAAK,IACrE,EACA,KAAK,IAAI,MAClB,IAAK,QAAS,CACZ,IAAM,EAAM,GAAW,CAAI,EACrB,EAAQ,EAAQ,EAAK,QAAS,EAAK,EAAK,EAC9C,OAAO,EAAK,WAAa,KAAO,MAAM,IAAU,IAAI,GACtD,CACA,IAAK,SACL,IAAK,UAAW,CACd,IAAM,EAAM,GAAW,CAAI,EAErB,EAAQ,EAAK,OAAS,UAAY,EAAK,WAAa,IACpD,EAAU,IAAQ,EAClB,EAAO,EAAQ,EAAK,KAAM,EAAK,GAAS,CAAO,EAC/C,EAAY,EAAQ,EAAK,MAAO,EAAK,CAAC,GAAS,CAAO,EAC5D,MAAO,GAAG,KAAQ,EAAK,YAAY,GACrC,CACA,IAAK,OACH,MAAO,GAAG,EAAQ,EAAK,OAAQ,GAAI,EAAK,KAAK,EAAK,KAAK,IAAI,CAAe,EAAE,KAAK,IAAI,KACvF,IAAK,QACH,GAAI,EAAK,KAAO,EAAK,MAAM,OAAS,gBAClC,MAAO,GAAG,EAAQ,EAAK,OAAQ,GAAI,EAAK,KAAK,EAAK,MAAM,QAC1D,MAAO,GAAG,EAAQ,EAAK,OAAQ,GAAI,EAAK,KAAK,EAAgB,EAAK,KAAK,KACzE,IAAK,kBACH,MAAO,iBAAiB,EAAK,OAAO,IAAI,KAAS,EAAM,IAAI,EAAE,KAAK,IAAI,aAQ/D,EAAiB,CAAC,IAAgC,CAC7D,OAAQ,EAAK,MACX,IAAK,sBACH,MAAO,GAAG,EAAK,SAAW,YAAc,cAAc,EAAK,KAAK,UAAU,EAAgB,EAAK,KAAK,IACtG,IAAK,sBACH,MAAO,iBAAiB,EAAK,KAAK,QAAQ,EAAK,SAAS,OAAO,IAAI,KAAS,EAAM,IAAI,EAAE,KAAK,IAAI,KACnG,IAAK,aACH,MAAO,GAAG,EAAgB,EAAK,MAAM,KAAK,EAAK,YAAY,EAAgB,EAAK,KAAK,IACvF,IAAK,YACH,MAAO,GAAG,EAAgB,EAAK,MAAM,IAAI,EAAK,WAChD,IAAK,sBACH,OAAO,EAAgB,EAAK,UAAU,EACxC,IAAK,SACH,OAAO,EAAK,MAAQ,WAAW,EAAgB,EAAK,KAAK,IAAM,UACjE,IAAK,SACH,MAAO,WAAW,EAAK,KAAK,OAC9B,IAAK,QACH,MAAO,SACT,IAAK,WACH,MAAO,YACT,IAAK,QACH,MAAO,QACT,IAAK,KACH,MAAO,OAAO,EAAgB,EAAK,SAAS,GAAI,SAAS,KAC3D,IAAK,QACH,MAAO,aAAa,EAAgB,EAAK,SAAS,KACpD,IAAK,UACH,MAAO,cAAc,EAAgB,EAAK,SAAS,KACrD,IAAK,MACH,MAAO,SAAS,EAAK,UAAY,EAAgB,EAAK,SAAS,EAAI,MACrE,IAAK,SACH,MAAO,WAAW,EAAgB,EAAK,KAAK,UAC9C,IAAK,WACH,MAAO,QAAQ,EAAK,SAAS,cAAc,EAAgB,EAAK,IAAI,WAAW,EAAgB,EAAK,EAAE,IAAI,EAAK,KAAO,aAAa,EAAgB,EAAK,IAAI,IAAM,KACpK,IAAK,UACH,MAAO,aAAa,EAAK,SAAS,OAAO,EAAK,MAAQ,KAAK,EAAK,MAAM,OAAS,SAAS,EAAgB,EAAK,QAAQ,MC3D3H,IAAM,GAAQ,IAAI,IAAI,CAAC,OAAQ,cAAe,aAAa,CAAC,EACtD,GAAS,IAAI,IAAI,CAAC,UAAU,CAAC,EAG7B,GAAO,CAAC,IAA6C,CACzD,GAAI,EAAK,OAAS,aAAc,OAAO,EAAK,KAC5C,GAAI,EAAK,OAAS,SAAW,EAAK,KAAO,EAAK,MAAM,OAAS,gBAAiB,CAC5E,IAAM,EAAS,GAAK,EAAK,MAAM,EAC/B,OAAO,GAAU,GAAG,KAAU,EAAK,MAAM,QAE3C,QAII,GAAa,CAAC,IAClB,GAAM,OAAS,OAAS,GAAK,EAAK,MAAM,EAAI,OAE9C,MAAM,EAAQ,CASO,QACA,WATV,MAAoB,CAAC,EACrB,MAAoB,CAAC,EACb,MAAgB,CAAC,EACjB,QAAqB,CAAC,EAE/B,UAER,WAAW,CACQ,EACA,EACjB,CAFiB,eACA,kBAGX,KAAK,CAAC,EAAsB,CAClC,IAAM,EAAM,KAAK,QAAQ,eACzB,OAAO,GAAO,EAAK,OAAS,EAAM,GAAG,EAAK,MAAM,EAAG,KAAK,IAAI,EAAG,EAAM,CAAC,CAAC,KAAO,EAGhF,IAAI,CAAC,EAAoB,EAAe,EAAqD,CAC3F,IAAM,EAAK,IAAI,KAAK,MAAM,SAU1B,OATA,KAAK,MAAM,KAAK,CACd,KACA,OACA,MAAO,KAAK,MAAM,CAAK,EACvB,OAAQ,EAAS,IAAI,KAAQ,EAAK,EAAE,EACpC,MAAO,EAAS,IAAI,KAAQ,EAAK,IAAI,EACrC,KAAM,CACR,CAAC,EACD,KAAK,UAAY,OACV,EAGT,OAAO,CAAC,EAAoB,EAAkB,CAC5C,QAAa,OAAM,OAAO,SAAU,WAAW,EAC7C,KAAK,MAAM,KAAK,CAAE,GAAI,IAAI,KAAK,MAAM,SAAU,OAAM,KAAI,UAAU,EAAQ,CAAE,OAAM,EAAI,CAAC,CAAG,CAAC,EAKxF,MAAM,CAAC,EAAoB,EAA0B,EAAqB,EAA+B,CAC/G,IAAM,EAAY,IAAS,WAAa,KAAK,QAAQ,MAC/C,EAAO,KAAK,UAAY,KAAK,MAAM,KAAK,KAAQ,EAAK,KAAO,KAAK,SAAS,EAAI,OACpF,GAAI,GAAa,GAAQ,EAAS,SAAW,GAAK,EAAS,GAAI,OAAS,EAAK,IAAM,CAAC,EAAS,GAAI,MAI/F,OAHA,EAAK,MAAQ,GAAG,EAAK;AAAA,EAAU,KAAK,MAAM,EAAe,CAAS,CAAC,IACnE,EAAK,OAAO,KAAK,EAAU,EAAE,EAC7B,EAAK,MAAM,KAAK,EAAU,IAAI,EACvB,EAET,IAAM,EAAK,KAAK,KAAK,EAAM,EAAe,CAAS,EAAG,CAAC,CAAS,CAAC,EACjE,GAAI,EAAW,KAAK,MAAM,KAAK,MAAM,OAAS,GAAI,UAAY,EAE9D,GADA,KAAK,QAAQ,EAAU,CAAE,EACrB,EAAW,KAAK,UAAY,EAChC,MAAO,CAAC,CAAE,KAAM,CAAG,CAAC,EAGd,MAAM,CAAC,EAAsE,CACnF,IAAM,EACJ,EAAU,OAAS,sBACf,EAAU,WACV,EAAU,OAAS,uBAAyB,EAAU,OAAS,aAC7D,EAAU,MACV,OACF,EAAO,GAAW,CAAU,EAClC,GAAI,GAAQ,GAAM,IAAI,CAAI,EAAG,MAAO,CAAE,KAAM,SAAU,EACtD,GAAI,GAAQ,GAAO,IAAI,CAAI,GAAK,EAAU,OAAS,sBAAuB,MAAO,CAAE,KAAM,QAAS,EAClG,GAAI,GAAQ,KAAK,WAAW,IAAI,CAAI,EAClC,OAAO,KAAK,QAAQ,iBAAmB,CAAE,KAAM,UAAW,UAAW,CAAK,EAAI,CAAE,KAAM,SAAU,EAElG,GAAI,EAAU,OAAS,uBAAyB,EAAM,MAAO,CAAE,KAAM,SAAU,EAC/E,MAAO,CAAE,KAAM,SAAU,EAG3B,UAAU,CAAC,EAAuB,EAAgC,CAChE,IAAI,EAAU,EACd,QAAW,KAAa,EAAM,EAAU,KAAK,UAAU,EAAW,CAAO,EACzE,OAAO,EAGD,IAAI,CAAC,EAAuD,CAClE,IAAM,EAAa,CAAE,OAAQ,CAAC,EAAG,UAAW,CAAC,CAAE,EAC/C,KAAK,MAAM,KAAK,CAAI,EACpB,IAAM,EAAM,EAAK,EAEjB,OADA,KAAK,MAAM,IAAI,EACR,CAAE,MAAK,MAAK,EAGb,IAAI,CAAC,EAAoB,EAAqB,SAAqB,CACzE,OAAO,EAAQ,IAAI,KAAS,EAAK,MAAQ,EAAK,OAAS,SAAW,EAAO,IAAK,EAAM,MAAK,CAAE,EAGrF,SAAS,CAAC,EAA0B,EAAgC,CAC1E,OAAQ,EAAU,MAChB,IAAK,sBAEH,OAAO,EACT,IAAK,SAAU,CAEb,IAAM,EAA2B,CAAC,EAC5B,EAAU,CAAC,IAAuB,CACtC,EAAQ,KAAK,CAAM,EACnB,QAAW,KAAU,EAAO,KAAK,WAC/B,GAAI,EAAO,OAAS,sBAAuB,EAAQ,KAAK,CAAM,EAC9D,KAAK,GAAI,EAAO,OAAS,SAAU,EAAQ,CAAM,GAGrD,EAAQ,CAAS,EACjB,IAAM,EAAK,KAAK,KAAK,UAAW,EAAe,CAAS,EAAG,CAAO,EAElE,OADA,KAAK,QAAQ,EAAU,CAAE,EAClB,CAAC,CAAE,KAAM,CAAG,CAAC,CACtB,CACA,IAAK,sBACL,IAAK,aACL,IAAK,YACL,IAAK,sBAAuB,CAC1B,IAAQ,OAAM,aAAc,KAAK,OAAO,CAAS,EACjD,OAAO,KAAK,OAAO,EAAM,EAAW,EAAU,CAAS,CACzD,CACA,IAAK,SAAU,CACb,IAAM,EAAK,KAAK,KAAK,UAAW,EAAe,CAAS,EAAG,CAAC,CAAS,CAAC,EAGtE,OAFA,KAAK,QAAQ,EAAU,CAAE,EACzB,KAAK,QAAQ,KAAK,CAAE,KAAM,EAAI,KAAM,SAAU,CAAC,EACxC,CAAC,CACV,CACA,IAAK,QACL,IAAK,WAAY,CACf,IAAM,EAAK,KAAK,KAAK,UAAW,EAAe,CAAS,EAAG,CAAC,CAAS,CAAC,EACtE,KAAK,QAAQ,EAAU,CAAE,EACzB,IAAM,EAAO,KAAK,MAAM,KAAK,MAAM,OAAS,GAC5C,GAAI,EAAU,OAAS,QAAS,GAAM,OAAO,KAAK,CAAE,KAAM,EAAI,KAAM,QAAS,CAAC,EAC9E,KAAK,GAAM,UAAU,KAAK,CAAE,KAAM,EAAI,KAAM,WAAY,CAAC,EACzD,MAAO,CAAC,CACV,CACA,IAAK,QACH,OAAO,KAAK,WAAW,EAAU,WAAY,CAAQ,EACvD,IAAK,KAAM,CACT,IAAI,EAAU,EACR,EAAiB,CAAC,EAQxB,GAPA,EAAU,SAAS,QAAQ,CAAC,EAAQ,IAAU,CAC5C,IAAM,EAAW,IAAU,EAAI,CAAC,EAAW,EAAO,SAAS,EAAI,CAAC,EAAO,SAAS,EAC1E,EAAK,KAAK,KAAK,WAAY,EAAgB,EAAO,SAAS,EAAG,CAAQ,EAC5E,KAAK,QAAQ,EAAS,CAAE,EACxB,EAAI,KAAK,GAAG,KAAK,WAAW,EAAO,KAAK,WAAY,CAAC,CAAE,KAAM,EAAI,MAAO,IAAK,CAAC,CAAC,CAAC,EAChF,EAAU,CAAC,CAAE,KAAM,EAAI,MAAO,IAAK,CAAC,EACrC,EACG,EAAU,YAAa,EAAI,KAAK,GAAG,KAAK,WAAW,EAAU,YAAY,WAAY,CAAO,CAAC,EACjG,KAAK,EAAI,KAAK,GAAG,CAAO,EACxB,OAAO,CACT,CACA,IAAK,QAAS,CACZ,IAAM,EAAK,KAAK,KAAK,WAAY,EAAgB,EAAU,SAAS,EAAG,CAAC,EAAW,EAAU,SAAS,CAAC,EACvG,KAAK,QAAQ,EAAU,CAAE,EACzB,IAAQ,MAAK,QAAS,KAAK,KAAK,IAAM,KAAK,WAAW,EAAU,KAAK,WAAY,CAAC,CAAE,KAAM,EAAI,MAAO,IAAK,CAAC,CAAC,CAAC,EAE7G,OADA,KAAK,QAAQ,KAAK,KAAK,CAAC,GAAG,EAAK,GAAG,EAAK,SAAS,CAAC,EAAG,CAAE,EAChD,CAAC,CAAE,KAAM,EAAI,MAAO,IAAK,EAAG,GAAG,EAAK,MAAM,CACnD,CACA,IAAK,UAAW,CAEd,IAAM,EAAQ,KAAK,MAAM,QACjB,MAAK,QAAS,KAAK,KAAK,IAAM,KAAK,WAAW,EAAU,KAAK,WAAY,CAAQ,CAAC,EACpF,EAAK,KAAK,KAAK,WAAY,aAAa,EAAgB,EAAU,SAAS,IAAK,CACpF,EACA,EAAU,SACZ,CAAC,EACD,KAAK,QAAQ,CAAC,GAAG,EAAK,GAAG,EAAK,SAAS,EAAG,CAAE,EAC5C,IAAM,EAAQ,KAAK,MAAM,IAAQ,IAAM,EAEvC,GADA,KAAK,QAAQ,CAAC,CAAE,KAAM,EAAI,MAAO,KAAM,KAAM,QAAS,CAAC,EAAG,CAAK,EAC3D,IAAU,EAAI,KAAK,MAAM,IAAI,EACjC,MAAO,CAAC,CAAE,KAAM,EAAI,MAAO,IAAK,EAAG,GAAG,EAAK,MAAM,CACnD,CACA,IAAK,MAAO,CACV,IAAI,EAAU,EACR,EAA6B,CAAC,EACpC,GAAI,EAAU,KAAM,CAClB,KAAK,UAAY,OACjB,IAAM,EAAS,KAAK,MAAM,OAC1B,EAAU,KAAK,UAAU,EAAU,KAAM,CAAO,EAEhD,KAAK,MAAM,IAAS,OAAO,QAAQ,EAAU,EAAE,EAC/C,KAAK,MAAM,IAAS,MAAM,QAAQ,EAAU,IAAI,EAChD,KACA,EAAU,KAAK,CAAS,EAE1B,IAAM,EAAY,EAAU,UACtB,EAAK,KAAK,KAAK,WAAY,EAAY,EAAgB,CAAS,EAAI,YAAa,CACrF,GAAG,EACH,GAAI,EAAY,CAAC,CAAS,EAAI,CAAC,CACjC,CAAC,EACD,KAAK,QAAQ,EAAS,CAAE,EACxB,IAAQ,MAAK,QAAS,KAAK,KAAK,IAAM,KAAK,WAAW,EAAU,KAAK,WAAY,CAAC,CAAE,KAAM,EAAI,MAAO,IAAK,CAAC,CAAC,CAAC,EACzG,EAAO,CAAC,GAAG,EAAK,GAAG,EAAK,SAAS,EACrC,GAAI,EAAU,OAAQ,EAAO,KAAK,UAAU,EAAU,OAAQ,CAAI,EAElE,OADA,KAAK,QAAQ,KAAK,KAAK,CAAI,EAAG,CAAE,EACzB,CAAC,GAAI,EAAY,CAAC,CAAE,KAAM,EAAI,MAAO,IAAc,CAAC,EAAI,CAAC,EAAI,GAAG,EAAK,MAAM,CACpF,CACA,IAAK,SACL,IAAK,WACL,IAAK,UAAW,CACd,IAAM,EACJ,EAAU,OAAS,SACf,EAAU,MACV,EAAU,OAAS,WACjB,EAAU,GACV,EAAU,SACZ,EAAK,KAAK,KAAK,WAAY,EAAe,CAAS,EAAG,CAAC,EAAW,CAAI,CAAC,EAC7E,KAAK,QAAQ,EAAU,CAAE,EACzB,IAAQ,MAAK,QAAS,KAAK,KAAK,IAC9B,KAAK,WAAW,EAAU,KAAK,WAAY,CAAC,CAAE,KAAM,EAAI,MAAO,SAAU,CAAC,CAAC,CAC7E,EAEA,OADA,KAAK,QAAQ,KAAK,KAAK,CAAC,GAAG,EAAK,GAAG,EAAK,SAAS,CAAC,EAAG,CAAE,EAChD,CAAC,CAAE,KAAM,EAAI,MAAO,OAAQ,EAAG,GAAG,EAAK,MAAM,CACtD,GAIJ,MAAM,CAAC,EAAe,EAAsB,CAC1C,IAAM,EAAM,KAAK,KAAK,MAAO,MAAO,CAAC,CAAC,EACtC,KAAK,QAAQ,CAAC,GAAG,EAAK,GAAG,KAAK,OAAO,EAAG,CAAG,EAE3C,IAAM,EAAU,KAAK,MAAM,OAAO,KAAQ,EAAK,OAAS,UAAY,EAAK,OAAS,WAAW,EACvF,EAAO,IAAI,IAAoB,CAAC,CAAC,EAAO,CAAC,CAAC,CAAC,EACjD,QAAS,EAAU,GAAM,EAAQ,EAAG,GAAW,GAAS,KAAK,MAAM,OAAQ,IAAS,CAClF,EAAU,GACV,QAAW,KAAQ,EAAS,CAC1B,IAAM,GAAQ,EAAK,IAAI,EAAK,IAAI,GAAK,IAAM,EAC3C,GAAI,EAAK,IAAI,EAAK,IAAI,GAAK,GAAQ,EAAK,IAAI,EAAK,EAAE,GAAK,IACtD,EAAK,IAAI,EAAK,GAAI,CAAI,EACtB,EAAU,IAIhB,QAAW,KAAQ,KAAK,MAAO,EAAK,KAAO,EAAK,IAAI,EAAK,EAAE,GAAK,EAEpE,CAGA,IAAM,GAAiB,CAAC,EAA6B,EAA0B,CAAC,IAAmB,CACjG,IAAM,EAAQ,IAAI,IAAI,CAAK,EACrB,EAAQ,CAAC,EAAuB,IAAmB,CACvD,QAAW,KAAa,EAAM,CAC5B,GAAI,EAAU,OAAS,sBAAuB,EAAM,IAAI,GAAG,IAAS,EAAU,KAAK,MAAM,EACzF,GAAI,EAAU,OAAS,SAAU,EAAM,EAAU,KAAK,WAAY,GAAG,IAAS,EAAU,KAAK,OAAO,IAIxG,OADA,EAAM,EAAY,EAAE,EACb,GAMI,GAAY,CACvB,EACA,EAAuB,CAAC,IACV,GAAQ,EAAM,EAAS,CAAC,CAAC,EAEnC,GAAU,CACd,EACA,EACA,IACc,CACd,IAAM,EACJ,EAAK,OAAS,UACV,EAAK,WACL,EAAK,OAAS,sBACZ,EAAK,SAAS,KAAK,WACnB,EAAK,KAAK,WACZ,EAAQ,GAAe,EAAY,CAAK,EACxC,EAAU,IAAI,GAAQ,EAAS,CAAK,EACpC,EACJ,EAAK,OAAS,UACV,SACA,EAAK,OAAS,sBACZ,EAAe,CAAI,EACnB,iBAAiB,EAAK,OAAO,IAAI,KAAS,EAAM,IAAI,EAAE,KAAK,IAAI,KACjE,EAAQ,EAAQ,KAAK,SAAU,EAAO,EAAK,OAAS,UAAY,CAAC,EAAI,CAAC,CAAI,CAAC,EAC3E,EAAM,EAAQ,WAAW,EAAY,CAAC,CAAE,KAAM,CAAM,CAAC,CAAC,EAC5D,EAAQ,OAAO,EAAO,CAAG,EAEzB,IAAM,EAAmB,CAAE,MAAO,EAAQ,MAAO,MAAO,EAAQ,KAAM,EACtE,GAAI,EAAQ,iBAAkB,CAC5B,EAAM,WAAa,CAAC,EAEpB,IAAM,EAAQ,CAAC,EAAuB,IAAmB,CACvD,QAAW,KAAa,EAAM,CAC5B,GAAI,EAAU,OAAS,SAAU,EAAM,EAAU,KAAK,WAAY,GAAG,IAAS,EAAU,KAAK,OAAO,EACpG,GAAI,EAAU,OAAS,sBAAuB,SAC9C,EAAM,WAAY,KAAK,CACrB,KAAM,GAAG,IAAS,EAAU,KAAK,OACjC,MAAO,EAAU,GACjB,MAAO,GAAQ,EAAW,EAAS,CAAK,CAC1C,CAAC,IAGL,EAAM,EAAY,EAAE,EAEtB,OAAO,GCjUT,IAAM,GAAyB,IAGzB,GAAU,CAAC,IAA6B,CAC5C,GAAI,IAAU,KAAM,MAAO,OAC3B,GAAI,OAAO,IAAU,UAAW,OAAO,EAAQ,YAAc,QAC7D,GAAI,OAAO,IAAU,SAAU,CAC7B,GAAI,CAAC,OAAO,SAAS,CAAK,EAAG,MAAU,MAAM,6CAA6C,IAAQ,EAClG,OAAO,EAAQ,EAAI,IAAI,KAAW,OAAO,CAAK,EAEhD,GAAI,OAAO,IAAU,SAAU,OAAO,KAAK,UAAU,CAAK,EAC1D,GAAI,MAAM,QAAQ,CAAK,EAAG,MAAO,IAAI,EAAM,IAAI,EAAO,EAAE,KAAK,IAAI,KACjE,MAAO,KAAK,OAAO,QAAQ,CAAK,EAC7B,IAAI,EAAE,EAAK,KAAU,GAAG,KAAK,UAAU,CAAG,MAAM,GAAQ,CAAI,GAAG,EAC/D,KAAK,IAAI,OAIR,GAAU,CAAC,IAA4B,CAC3C,GAAI,IAAU,MAAQ,OAAO,IAAU,SAAU,OAAO,EACxD,GAAI,MAAM,QAAQ,CAAK,EAAG,MAAO,CAAE,KAAM,QAAS,GAAI,EAAG,MAAO,EAAM,IAAI,EAAO,CAAE,EACnF,MAAO,CACL,KAAM,cACN,GAAI,EACJ,QAAS,IAAI,IAAoB,OAAO,QAAQ,CAAK,EAAE,IAAI,EAAE,EAAK,KAAU,CAAC,EAAK,GAAQ,CAAI,CAAC,CAAC,CAAC,CACnG,GAGI,GAAY,CAAC,IACjB,EACG,QAAQ,QAAS;AAAA,CAAI,EACrB,MAAM;AAAA,CAAI,EACV,IAAI,KAAQ,EAAK,QAAQ,UAAW,EAAE,CAAC,EACvC,KAAK;AAAA,CAAI,EACT,QAAQ,OAAQ,EAAE,EAGV,GAAc,CAAC,EAAgB,IAA0C,CACpF,IAAM,EAAY,EAAU,WAAa,WACnC,EAAQ,EAAU,MAAM,IAAI,CAAC,EAAU,IAAsB,CACjE,IAAM,EAAO,EAAS,MAAQ,QAAQ,EAAQ,IACxC,EAAgB,EAAS,eAAiB,EAAU,eAAiB,GACrE,EAAQ,EAAS,OAAS,CAAC,EAEjC,GAAI,EAAU,QAAU,SAAU,CAChC,IAAM,EAAS,GAAI,EAAQ,CAAE,QAAO,eAAc,CAAC,EAC7C,EAAiB,EAAS,gBAAkB,GAC5C,EAAO,EAAU,YACnB,EAAO,SAAW,EAClB,GAAU,EAAO,MAAM,IAAM,GAAU,CAAc,EACzD,MAAO,CACL,OACA,OAAQ,EAAO,IAAM,EACrB,OAAQ,EAAO,OACf,iBACA,WAAY,EAAO,cACf,EAAO,OAAO,GAAK,CAAE,MAAO,EAAO,OAAO,EAAG,EAAI,CAAC,CACxD,EAIF,IAAM,EAAO;AAAA;AAAA,UAAgB,MAAc,EAAS,MAAQ,CAAC,GAAG,IAAI,EAAO,EAAE,KAAK,IAAI;AAAA,EAChF,EAAS,GAAI,EAAS,EAAM,CAAE,QAAO,eAAc,CAAC,EACpD,EAAW,GAAQ,EAAS,UAAY,IAAI,EAClD,MAAO,CACL,OACA,OAAQ,EAAO,IAAM,EAAO,EAAO,OAAQ,CAAQ,EACnD,OAAQ,EAAO,OACf,OAAQ,EAAO,WACf,SAAU,EAAK,CAAQ,EACvB,WAAY,EAAO,cACf,EAAO,OAAO,GAAK,CAAE,MAAO,EAAO,OAAO,EAAG,EAAI,CAAC,CACxD,EACD,EACD,MAAO,CAAE,OAAQ,EAAM,MAAM,KAAY,EAAS,MAAM,EAAG,OAAM,GCpG5D,IAAM,GAAgB,CAAC,IAAgC,CAC5D,IAAI,EAAS,EACP,EAAU,IAAI,IACd,EAAoB,IAAI,IACxB,EAAmB,IAAI,IAE7B,EAAO,iBAAiB,UAAW,EAAG,UAAW,CAC/C,GAAI,EAAK,OAAS,WAAY,CAC5B,QAAW,KAAY,EAAmB,EAAS,CAAI,EACvD,OAEF,GAAI,EAAK,OAAS,WAAY,QAAW,KAAY,EAAkB,EAAS,CAAI,EACpF,IAAM,EAAU,EAAQ,IAAI,EAAK,EAAE,EACnC,GAAI,CAAC,EAAS,OAEd,GADA,EAAQ,OAAO,EAAK,EAAE,EAClB,EAAK,OAAS,QAAS,EAAQ,OAAW,MAAM,EAAK,OAAO,CAAC,EACjE,KAAK,GAAI,EAAK,OAAS,QAAS,EAAQ,QAAQ,MAAkB,EAClE,KAAK,GAAI,EAAK,OAAS,OAAQ,EAAQ,QAAQ,EAAK,MAAe,EACnE,KAAK,EAAQ,QAAQ,CAAa,EACnC,EAED,IAAM,EAAO,CAAsC,EAAS,EAA8B,CAAC,IACzF,IAAI,QAAW,CAAC,EAAS,IAAW,CAClC,IAAM,EAAK,IACX,EAAQ,IAAI,EAAI,CAAE,QAAS,EAAmC,QAAO,CAAC,EACtE,EAAO,YAAY,CAAE,OAAM,QAAO,CAAK,CAAmB,EAC3D,EAEG,EAAY,CAAI,EAAmB,KACvC,EAAU,IAAI,CAAQ,EACf,IAAM,EAAU,OAAO,CAAQ,GAGxC,MAAO,CACL,KAAM,CAAC,EAAQ,IAAY,EAAuB,SAAU,CAAE,YAAY,EAAU,CAAE,SAAQ,EAAI,CAAC,CAAG,CAAC,EACvG,IAAK,IAAM,EAA0B,UAAU,EAC/C,OAAQ,IAAM,EAA2B,WAAW,EACpD,KAAM,IAAM,EAAsB,MAAM,EACxC,MAAO,IAAM,EAAqB,QAAQ,EAC1C,SAAU,KAAQ,EAA2B,YAAa,CAAE,MAAK,CAAC,EAClE,aAAc,KAAQ,EAAsB,UAAW,CAAE,MAAK,CAAC,EAC/D,WAAY,IAAM,EAA6B,gBAAgB,EAC/D,eAAgB,KAAS,EAAqC,yBAA0B,CAAE,OAAM,CAAC,EACjG,YAAa,CAAC,EAAQ,IAAc,EAAsC,eAAgB,CAAE,SAAQ,WAAU,CAAC,EAC/G,WAAY,KAAY,CACtB,IAAM,EAAc,EAAU,EAAmB,CAAQ,EACzD,MAAO,IAAM,KAAK,EAAY,GAEhC,UAAW,KAAY,CACrB,IAAM,EAAc,EAAU,EAAkB,CAAQ,EACxD,MAAO,IAAM,KAAK,EAAY,GAEhC,UAAW,IAAM,CACf,EAAO,YAAY,EACnB,QAAW,KAAW,EAAQ,OAAO,EAAG,EAAQ,OAAW,MAAM,sBAAsB,CAAC,EACxF,EAAQ,MAAM,EAElB,GCcF,IAAM,GAA0E,CAC9E,KAAM,IAAI,IACV,MAAO,IAAI,IAAI,CAAC,OAAQ,OAAO,CAAC,EAChC,WAAY,IAAI,IAAI,CAAC,OAAQ,QAAS,QAAQ,CAAC,EAC/C,KAAM,MACR,EAEM,GAAO,IAAM,IAAI,QAAc,KAAW,WAAW,EAAS,CAAC,CAAC,EAE/D,MAAM,EAAY,CAcM,KAbrB,QACA,QAA0B,CAAC,EAC3B,KAAO,EACP,QAEA,SAAqB,CAAC,EACtB,YAAc,GACd,OAAyB,CAAC,EAC1B,MAAQ,GACR,WAAa,EACb,QAAU,GACV,eAAiB,GAEzB,WAAW,CAAkB,EAA0C,CAA1C,kBAEvB,MAAM,CAAC,EAAwC,CACnD,OAAQ,EAAQ,MACd,IAAK,SACH,GAAI,KAAK,QAAS,OAAO,KAAK,KAAK,EAAQ,EAAE,EAC7C,OAAO,KAAK,KAAK,EAAQ,GAAI,EAAQ,OAAQ,EAAQ,SAAW,CAAC,CAAC,EACpE,IAAK,eACH,KAAK,KAAK,CAAE,KAAM,OAAQ,GAAI,EAAQ,GAAI,OAAQ,GAAY,EAAQ,OAAQ,EAAQ,SAAS,CAAE,CAAC,EAClG,OACF,IAAK,SACH,KAAK,eAAiB,KAAK,QAC3B,KAAK,KAAK,CAAE,KAAM,QAAS,GAAI,EAAQ,EAAG,CAAC,EAC3C,OAGJ,IAAM,EAAU,KAAK,QACrB,GAAI,CAAC,EAAS,CACZ,KAAK,KAAK,CAAE,KAAM,QAAS,GAAI,EAAQ,GAAI,QAAS,yCAA0C,CAAC,EAC/F,OAEF,OAAQ,EAAQ,MACd,IAAK,UACH,KAAK,SAAS,KAAK,EAAQ,IAAI,EAC/B,EAAQ,aAAa,EAAQ,IAAI,EACjC,KAAK,KAAK,CAAE,KAAM,QAAS,GAAI,EAAQ,EAAG,CAAC,EAC3C,OACF,IAAK,iBACH,KAAK,YAAc,GACnB,EAAQ,WAAW,EACnB,KAAK,KAAK,CAAE,KAAM,QAAS,GAAI,EAAQ,EAAG,CAAC,EAC3C,OACF,IAAK,yBACH,KAAK,QAAU,IAAK,KAAK,QAAS,YAAa,EAAQ,KAAM,EAC7D,EAAQ,eAAe,EAAQ,KAAK,EACpC,KAAK,KAAK,CAAE,KAAM,QAAS,GAAI,EAAQ,EAAG,CAAC,EAC3C,OAGJ,GAAI,KAAK,QAAS,OAAO,KAAK,KAAK,EAAQ,EAAE,EAC7C,OAAQ,EAAQ,MACd,IAAK,OACH,EAAQ,KAAK,EACb,KAAK,QAAQ,EAAQ,GAAI,CAAO,EAChC,OACF,IAAK,WACL,IAAK,YACH,OAAO,KAAK,aAAa,EAAQ,GAAI,EAAS,EAAQ,OAAS,UAAU,EAC3E,IAAK,YACH,KAAK,SAAS,EAAQ,GAAI,EAAQ,IAAI,EACtC,QAIE,IAAI,CAAC,EAAkB,CAC7B,KAAK,KAAK,CAAE,KAAM,QAAS,KAAI,QAAS,gEAAiE,CAAC,EAGpG,IAAI,CAAC,EAAY,EAAgB,EAA+B,CACtE,KAAK,QAAU,EACf,KAAK,MAAQ,EAAQ,MAAQ,KAAK,MAAM,KAAK,OAAO,EAAI,UAAO,KAAO,EACtE,KAAK,SAAW,CAAC,EACjB,KAAK,YAAc,GACnB,KAAK,OAAS,CAAC,EACf,KAAK,WAAa,EAClB,IAAQ,UAAS,SAAQ,UAAW,EAAM,CAAM,EAChD,KAAK,QAAU,EAAO,SAAW,EAAI,EAAU,OAC/C,KAAK,QAAU,KAAK,QAAU,KAAK,cAAc,EAAI,OACrD,KAAK,KAAK,CAAE,KAAM,UAAW,KAAI,SAAQ,UAAS,OAAQ,EAAO,IAAI,KAAS,EAAM,OAAO,CAAC,EAAG,KAAM,KAAK,IAAK,CAAC,EAG1G,aAAa,EAAY,CAC/B,IAAQ,WAAY,KACd,EAAS,GAAO,EAAQ,QAAU,cAClC,EAAiC,CACrC,MAAO,EAAQ,OAAS,CAAC,EACzB,iBAAkB,EAAQ,kBAAoB,GAC9C,KAAM,KAAK,KACX,YAAa,EAAQ,aAAe,CAAC,EACrC,QAAS,KAAS,CAChB,GAAI,KAAK,MAAO,OAChB,GAAI,IAAW,QAAU,EAAO,IAAI,EAAM,IAAI,EAAG,KAAK,OAAO,KAAK,CAAK,MAErE,EAAQ,gBAAkB,OAAY,CAAE,cAAe,EAAQ,aAAc,EAAI,CAAC,KAClF,EAAQ,eAAiB,OAAY,CAAE,aAAc,EAAQ,YAAa,EAAI,CAAC,KAC/E,EAAQ,YAAc,OAAY,CAAE,UAAW,EAAQ,SAAU,EAAI,CAAC,KACtE,EAAQ,MAAQ,CAAE,MAAO,GAAY,EAAQ,KAAK,CAAE,EAAI,CAAC,CAC/D,EACA,OAAO,IAAI,EAAQ,GAAQ,KAAK,OAAQ,EAAG,CAAc,QAG7C,YAAY,CAAC,EAAY,EAAkB,EAA2C,CAClG,KAAK,QAAU,GACf,KAAK,eAAiB,GACtB,IAAM,EAAc,KAAK,QAAQ,aAAe,CAAC,EACjD,GAAI,EAAmB,EAAQ,eAAe,CAAC,CAAC,EAChD,GAAI,CACF,MAAO,GAAM,CAEX,GADe,EAAQ,IAAI,KAAK,QAAQ,WAAa,KAAM,IAC5C,WAAa,EAAQ,cAAgB,cAAe,MACnE,GAAI,KAAK,eAAgB,MAWzB,GAVA,KAAK,KAAK,CACR,KAAM,WACN,KACA,WAAY,EAAQ,WACpB,MAAO,EAAQ,MACf,OAAQ,KAAK,UAAU,CAAO,EAC9B,OAAQ,KAAK,WAAW,CAC1B,CAAC,EAED,MAAM,GAAK,EACP,KAAK,eAAgB,OAE3B,OAAQ,CACR,GAAI,EAAmB,EAAQ,eAAe,CAAW,EACzD,KAAK,QAAU,GAEjB,KAAK,QAAQ,EAAI,EAAS,KAAK,gBAAkB,EAAQ,SAAW,UAAY,QAAU,MAAS,EACnG,KAAK,eAAiB,GAGhB,QAAQ,CAAC,EAAY,EAAoB,CAE/C,IAAM,EAAU,KAAK,cAAc,EACnC,QAAW,KAAQ,KAAK,SAAU,EAAQ,aAAa,CAAI,EAC3D,GAAI,KAAK,YAAa,EAAQ,WAAW,EACzC,KAAK,MAAQ,GACb,GAAI,CACF,MAAO,EAAQ,MAAQ,GAAQ,CAAC,EAAQ,MAAQ,EAAQ,SAAW,oBAAqB,EAAQ,KAAK,EACrG,OAAQ,CACR,KAAK,MAAQ,GAEf,KAAK,QAAU,EACf,KAAK,OAAS,CAAC,EACf,KAAK,WAAa,EAClB,KAAK,QAAQ,EAAI,EAAS,YAAa,EAAI,EAGrC,SAAS,CAAC,EAA0B,CAC1C,IAAM,EAAS,EAAQ,OACjB,EAAQ,EAAO,MAAM,KAAK,UAAU,EAE1C,OADA,KAAK,WAAa,EAAO,OAClB,EAGD,UAAU,EAAmB,CACnC,IAAM,EAAS,KAAK,OAEpB,OADA,KAAK,OAAS,CAAC,EACR,EAGD,OAAO,CAAC,EAAY,EAAkB,EAAqB,EAAgB,GAAa,CAC9F,IAAM,EAAS,EAAQ,OACjB,EACJ,IACC,IAAW,YACR,MACA,IAAW,QACT,QACA,IAAW,oBACT,UACA,EAAQ,cAAgB,wBACtB,wBACA,QACZ,KAAK,KAAK,CACR,KAAM,WACN,KACA,SACA,OAAQ,EACR,WAAY,EAAQ,WACpB,MAAO,EAAQ,MACf,OAAQ,KAAK,UAAU,CAAO,KAC1B,EAAgB,CAAE,cAAe,EAAK,EAAI,CAAC,EAC/C,OAAQ,KAAK,WAAW,EACxB,SAAU,EAAQ,SAAS,KACvB,IAAW,YAAc,CAAE,OAAQ,EAAU,EAAQ,MAAM,CAAE,EAAI,CAAC,KAClE,EAAQ,MAAQ,CAAE,MAAO,EAAQ,MAAM,OAAO,CAAE,EAAI,CAAC,CAC3D,CAAC,EAEL",
28
- "debugId": "743C8838CD39F9B564756E2164756E21",
27
+ "mappings": "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CA,iBAAkB,CAChB,KAAM,WACN,YAAa,8FACf,EACA,mBAAoB,CAClB,KAAM,WACN,YACE,wMACJ,EACA,qBAAsB,CACpB,KAAM,WACN,YACE,uGACJ,EACA,iBAAkB,CAChB,KAAM,WACN,YACE,0KACJ,EACA,oBAAqB,CACnB,KAAM,WACN,YACE,yJACJ,EACA,wBAAyB,CACvB,KAAM,WACN,YACE,sMACJ,EACA,eAAgB,CACd,KAAM,WACN,YAAa,kGACf,EACA,gBAAiB,CACf,KAAM,WACN,YACE,gIACJ,EACA,gBAAiB,CACf,KAAM,WACN,YACE,mOACJ,EACA,oBAAqB,CACnB,KAAM,WACN,YACE,iIACJ,EACA,kBAAmB,CACjB,KAAM,WACN,YACE,sMACJ,EACA,mBAAoB,CAClB,KAAM,WACN,YACE,8IACJ,EACA,yBAA0B,CACxB,KAAM,WACN,YACE,oMACJ,EACA,YAAa,CACX,KAAM,WACN,YACE,2HACJ,EACA,qBAAsB,CACpB,KAAM,WACN,YAAa,wFACf,EACA,sBAAuB,CACrB,KAAM,WACN,YACE,iIACJ,EACA,uBAAwB,CACtB,KAAM,WACN,YACE,2JACJ,EACA,SAAU,CACR,KAAM,WACN,YACE,8GACJ,EACA,eAAgB,CACd,KAAM,WACN,YACE,sKACJ,EACA,aAAc,CACZ,KAAM,WACN,YAAa,2EACf,EAGA,mBAAoB,CAClB,KAAM,YACN,YACE,8SACJ,EACA,uBAAwB,CACtB,KAAM,YACN,YACE,sJACJ,EACA,iBAAkB,CAChB,KAAM,YACN,YACE,kHACJ,EACA,kBAAmB,CACjB,KAAM,YACN,YACE,yLACJ,EACA,eAAgB,CACd,KAAM,YACN,YACE,uGACJ,EACA,WAAY,CACV,KAAM,YACN,YACE,8GACJ,EACA,qBAAsB,CACpB,KAAM,YACN,YACE,0KACJ,EACA,oBAAqB,CACnB,KAAM,YACN,YACE,8NACJ,EACA,qBAAsB,CACpB,KAAM,YACN,YACE,+GACJ,EACA,mCAAoC,CAClC,KAAM,YACN,YACE,8KACJ,EACA,oBAAqB,CACnB,KAAM,YACN,YACE,0GACJ,EACA,6BAA8B,CAC5B,KAAM,YACN,YACE,iNACJ,EACA,YAAa,CACX,KAAM,YACN,YACE,+GACJ,EACA,wBAAyB,CACvB,KAAM,YACN,YACE,uOACJ,EACA,oBAAqB,CACnB,KAAM,YACN,YACE,uKACJ,EACA,cAAe,CACb,KAAM,YACN,YAAa,gGACf,EACA,mBAAoB,CAClB,KAAM,YACN,YACE,4KACJ,EACA,gCAAiC,CAC/B,KAAM,YACN,YACE,qMACJ,EACA,aAAc,CACZ,KAAM,YACN,YACE,mHACJ,EACA,oBAAqB,CACnB,KAAM,YACN,YACE,8KACJ,EACA,mBAAoB,CAClB,KAAM,YACN,YACE,gJACJ,EACA,qBAAsB,CACpB,KAAM,YACN,YACE,0KACJ,EACA,eAAgB,CACd,KAAM,YACN,YACE,uKACJ,EACA,uBAAwB,CACtB,KAAM,YACN,YACE,sQACJ,EACA,mBAAoB,CAClB,KAAM,YACN,YACE,6MACJ,EACA,WAAY,CACV,KAAM,YACN,YACE,4GACJ,EACA,kBAAmB,CACjB,KAAM,YACN,YACE,6IACJ,EACA,uBAAwB,CACtB,KAAM,YACN,YACE,sHACJ,EACA,eAAgB,CACd,KAAM,YACN,YACE,gIACJ,EACA,gBAAiB,CACf,KAAM,YACN,YACE,oIACJ,EACA,iBAAkB,CAChB,KAAM,YACN,YAAa,6DACf,EACA,uBAAwB,CACtB,KAAM,YACN,YACE,yIACJ,EACA,cAAe,CACb,KAAM,YACN,YAAa,gGACf,EACA,gBAAiB,CACf,KAAM,YACN,YACE,8HACJ,EACA,YAAa,CACX,KAAM,YACN,YACE,mHACJ,EACA,eAAgB,CACd,KAAM,YACN,YAAa,yFACf,EACA,gBAAiB,CACf,KAAM,YACN,YACE,yJACJ,EACA,gBAAiB,CACf,KAAM,YACN,YACE,kLACJ,EACA,kBAAmB,CACjB,KAAM,YACN,YACE,kKACJ,EACA,cAAe,CACb,KAAM,YACN,YACE,2HACJ,EACA,iBAAkB,CAChB,KAAM,YACN,YACE,qOACJ,EACA,sBAAuB,CACrB,KAAM,YACN,YACE,oIACJ,EACA,kBAAmB,CACjB,KAAM,YACN,YACE,+J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",
28
+ "debugId": "0A9E489F41211E6264756E2164756E21",
29
29
  "names": []
30
30
  }