@designliquido/delegua 0.39.2 → 0.39.4

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.
Files changed (52) hide show
  1. package/README.md +21 -9
  2. package/avaliador-sintatico/avaliador-sintatico.d.ts +10 -1
  3. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  4. package/avaliador-sintatico/avaliador-sintatico.js +93 -57
  5. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  6. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts +1 -0
  7. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
  8. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +7 -4
  9. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  10. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +1 -1
  11. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
  12. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +1 -0
  13. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  14. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +6 -5
  15. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  16. package/bin/package.json +1 -1
  17. package/construtos/super.d.ts +2 -2
  18. package/construtos/super.d.ts.map +1 -1
  19. package/construtos/super.js +2 -2
  20. package/construtos/super.js.map +1 -1
  21. package/estruturas/delegua-funcao.d.ts +2 -0
  22. package/estruturas/delegua-funcao.d.ts.map +1 -1
  23. package/estruturas/delegua-funcao.js +5 -1
  24. package/estruturas/delegua-funcao.js.map +1 -1
  25. package/estruturas/descritor-tipo-classe.js +1 -1
  26. package/estruturas/descritor-tipo-classe.js.map +1 -1
  27. package/formatadores/formatador-delegua.d.ts.map +1 -1
  28. package/formatadores/formatador-delegua.js +1 -3
  29. package/formatadores/formatador-delegua.js.map +1 -1
  30. package/formatadores/formatador-pitugues.d.ts +62 -0
  31. package/formatadores/formatador-pitugues.d.ts.map +1 -0
  32. package/formatadores/formatador-pitugues.js +172 -0
  33. package/formatadores/formatador-pitugues.js.map +1 -0
  34. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
  35. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +2 -8
  36. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  37. package/interpretador/interpretador-base.d.ts +2 -8
  38. package/interpretador/interpretador-base.d.ts.map +1 -1
  39. package/interpretador/interpretador-base.js +10 -41
  40. package/interpretador/interpretador-base.js.map +1 -1
  41. package/package.json +1 -1
  42. package/tradutores/tradutor-assembly-x64.js +13 -13
  43. package/tradutores/tradutor-assemblyscript.js +1 -1
  44. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  45. package/tradutores/tradutor-javascript.d.ts +8 -6
  46. package/tradutores/tradutor-javascript.d.ts.map +1 -1
  47. package/tradutores/tradutor-javascript.js +121 -64
  48. package/tradutores/tradutor-javascript.js.map +1 -1
  49. package/tradutores/tradutor-python.d.ts.map +1 -1
  50. package/tradutores/tradutor-python.js +1 -1
  51. package/tradutores/tradutor-python.js.map +1 -1
  52. package/umd/delegua.js +249 -181
package/umd/delegua.js CHANGED
@@ -243,7 +243,6 @@ const construtos_1 = require("../construtos");
243
243
  const erro_avaliador_sintatico_1 = require("./erro-avaliador-sintatico");
244
244
  const tuplas_1 = require("../construtos/tuplas");
245
245
  const declaracoes_1 = require("../declaracoes");
246
- const lexador_1 = require("../lexador");
247
246
  const avaliador_sintatico_base_1 = require("./avaliador-sintatico-base");
248
247
  const inferenciador_1 = require("../inferenciador");
249
248
  const pilha_escopos_1 = require("./pilha-escopos");
@@ -430,18 +429,36 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
430
429
  return new construtos_1.Agrupamento(this.hashArquivo, Number(simboloAtual.linha), expressao);
431
430
  case delegua_2.default.SUPER:
432
431
  const simboloSuper = this.avancarEDevolverAnterior();
433
- // Se o próximo símbolo for uma abertura de parênteses, significa que
434
- // é uma chamada ao construtor da classe ancestral (superclasse).
435
- // Se o próximo símbolo for um ponto, significa que é uma chamada
436
- // a um método da superclasse.
437
- switch (this.simbolos[this.atual].tipo) {
438
- case delegua_2.default.PARENTESE_ESQUERDO:
439
- return new construtos_1.Super(this.hashArquivo, simboloSuper, new lexador_1.Simbolo(delegua_2.default.IDENTIFICADOR, 'construtor', null, simboloSuper.linha, this.hashArquivo));
440
- default:
441
- this.consumir(delegua_2.default.PONTO, "Esperado '.' após 'super'.");
442
- const metodoSuperclasse = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome do método da Superclasse.');
443
- return new construtos_1.Super(this.hashArquivo, simboloSuper, metodoSuperclasse);
432
+ if (!this.superclasseAtual) {
433
+ throw this.erro(this.simbolos[this.atual], "'Super' usado fora de declaração de classe com herança.");
444
434
  }
435
+ return new construtos_1.Super(this.hashArquivo, simboloSuper, this.superclasseAtual);
436
+ /* Se o próximo símbolo for uma abertura de parênteses, significa que
437
+ // é uma chamada ao construtor da classe ancestral (superclasse).
438
+ // Se o próximo símbolo for um ponto, significa que é uma chamada
439
+ // a um método da superclasse.
440
+ switch (this.simbolos[this.atual].tipo) {
441
+ case tiposDeSimbolos.PARENTESE_ESQUERDO:
442
+ return new Super(
443
+ this.hashArquivo,
444
+ simboloSuper,
445
+ new Simbolo(
446
+ tiposDeSimbolos.IDENTIFICADOR,
447
+ 'construtor',
448
+ null,
449
+ simboloSuper.linha,
450
+ this.hashArquivo
451
+ )
452
+ );
453
+ default:
454
+ this.consumir(tiposDeSimbolos.PONTO, "Esperado '.' após 'super'.");
455
+ const metodoSuperclasse = this.consumir(
456
+ tiposDeSimbolos.IDENTIFICADOR,
457
+ 'Esperado nome do método da Superclasse.'
458
+ );
459
+ // TODO: Validar se o método existe no ancestral.
460
+ return new Super(this.hashArquivo, simboloSuper, metodoSuperclasse);
461
+ } */
445
462
  case delegua_2.default.VERDADEIRO:
446
463
  this.avancarEDevolverAnterior();
447
464
  return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), true, 'lógico');
@@ -549,6 +566,49 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
549
566
  }
550
567
  return expressao;
551
568
  }
569
+ /**
570
+ * `AcessoMetodoOuPropriedade` é um construto intermediário em Delégua, e deve ser resolvido como outro
571
+ * construto antes de qualquer outra próxima etapa. Algumas validações adicionais também ocorrem aqui.
572
+ * @param {AcessoMetodoOuPropriedade} entidadeChamadaResolvida O construto original.
573
+ * @returns {Construto} O construto resolvido como um tipo mais específico.
574
+ * @see finalizarChamada
575
+ */
576
+ resolverEntidadeChamadaAcessoMetodoOuPropriedade(entidadeChamadaResolvida) {
577
+ const construtoTipado = entidadeChamadaResolvida;
578
+ switch (entidadeChamadaResolvida.tipo) {
579
+ case delegua_1.default.DICIONARIO:
580
+ case delegua_1.default.DICIONÁRIO:
581
+ if (!(construtoTipado.simbolo.lexema in primitivas_dicionario_1.default)) {
582
+ throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de dicionário.`);
583
+ }
584
+ const primitivaDicionarioSelecionada = primitivas_dicionario_1.default[construtoTipado.simbolo.lexema];
585
+ return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaDicionarioSelecionada.tipoRetorno);
586
+ case delegua_1.default.INTEIRO:
587
+ case delegua_1.default.NUMERO:
588
+ case delegua_1.default.NÚMERO:
589
+ if (!(construtoTipado.simbolo.lexema in primitivas_numero_1.default)) {
590
+ throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de número.`);
591
+ }
592
+ const primitivaNumeroSelecionada = primitivas_numero_1.default[construtoTipado.simbolo.lexema];
593
+ return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaNumeroSelecionada.tipoRetorno);
594
+ case delegua_1.default.TEXTO:
595
+ if (!(construtoTipado.simbolo.lexema in primitivas_texto_1.default)) {
596
+ throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de texto.`);
597
+ }
598
+ const primitivaTextoSelecionada = primitivas_texto_1.default[construtoTipado.simbolo.lexema];
599
+ return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaTextoSelecionada.tipoRetorno);
600
+ case delegua_1.default.VETOR:
601
+ case delegua_1.default.VETOR_NUMERO:
602
+ case delegua_1.default.VETOR_NÚMERO:
603
+ case delegua_1.default.VETOR_TEXTO:
604
+ if (!(construtoTipado.simbolo.lexema in primitivas_vetor_1.default)) {
605
+ throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de vetor.`);
606
+ }
607
+ const primitivaVetorSelecionada = primitivas_vetor_1.default[construtoTipado.simbolo.lexema];
608
+ return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaVetorSelecionada.tipoRetorno);
609
+ }
610
+ return entidadeChamadaResolvida;
611
+ }
552
612
  finalizarChamada(entidadeChamada) {
553
613
  const argumentos = [];
554
614
  if (!this.verificarTipoSimboloAtual(delegua_2.default.PARENTESE_DIREITO)) {
@@ -564,44 +624,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
564
624
  // Toda chamada precisa saber de antemão qual o tipo resolvido.
565
625
  let entidadeChamadaResolvida = entidadeChamada;
566
626
  if (entidadeChamadaResolvida.constructor.name === 'AcessoMetodoOuPropriedade') {
567
- const construtoTipado = entidadeChamadaResolvida;
568
- switch (entidadeChamadaResolvida.tipo) {
569
- case delegua_1.default.DICIONARIO:
570
- case delegua_1.default.DICIONÁRIO:
571
- if (!(construtoTipado.simbolo.lexema in primitivas_dicionario_1.default)) {
572
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de dicionário.`);
573
- }
574
- const primitivaDicionarioSelecionada = primitivas_dicionario_1.default[construtoTipado.simbolo.lexema];
575
- entidadeChamadaResolvida = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaDicionarioSelecionada.tipoRetorno);
576
- break;
577
- case delegua_1.default.INTEIRO:
578
- case delegua_1.default.NUMERO:
579
- case delegua_1.default.NÚMERO:
580
- if (!(construtoTipado.simbolo.lexema in primitivas_numero_1.default)) {
581
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de número.`);
582
- }
583
- const primitivaNumeroSelecionada = primitivas_numero_1.default[construtoTipado.simbolo.lexema];
584
- entidadeChamadaResolvida = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaNumeroSelecionada.tipoRetorno);
585
- break;
586
- case delegua_1.default.TEXTO:
587
- if (!(construtoTipado.simbolo.lexema in primitivas_texto_1.default)) {
588
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de texto.`);
589
- }
590
- const primitivaTextoSelecionada = primitivas_texto_1.default[construtoTipado.simbolo.lexema];
591
- entidadeChamadaResolvida = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaTextoSelecionada.tipoRetorno);
592
- break;
593
- case delegua_1.default.VETOR:
594
- case delegua_1.default.VETOR_NUMERO:
595
- case delegua_1.default.VETOR_NÚMERO:
596
- case delegua_1.default.VETOR_TEXTO:
597
- if (!(construtoTipado.simbolo.lexema in primitivas_vetor_1.default)) {
598
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de vetor.`);
599
- }
600
- const primitivaVetorSelecionada = primitivas_vetor_1.default[construtoTipado.simbolo.lexema];
601
- entidadeChamadaResolvida = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaVetorSelecionada.tipoRetorno);
602
- break;
603
- }
627
+ entidadeChamadaResolvida = this.resolverEntidadeChamadaAcessoMetodoOuPropriedade(entidadeChamadaResolvida);
604
628
  }
629
+ // TODO: Criar forma de validar tipos dos argumentos da entidade chamada.
605
630
  return new construtos_1.Chamada(this.hashArquivo, entidadeChamadaResolvida, argumentos);
606
631
  }
607
632
  unario() {
@@ -727,14 +752,22 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
727
752
  else if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.IGUAL)) {
728
753
  const igual = this.simbolos[this.atual - 1];
729
754
  const valor = this.expressao();
730
- if (expressao instanceof construtos_1.Variavel) {
731
- return new construtos_1.Atribuir(this.hashArquivo, expressao, valor);
732
- }
733
- if (expressao instanceof construtos_1.AcessoMetodoOuPropriedade) {
734
- return new construtos_1.DefinirValor(this.hashArquivo, igual.linha, expressao.objeto, expressao.simbolo, valor);
735
- }
736
- if (expressao instanceof construtos_1.AcessoIndiceVariavel) {
737
- return new construtos_1.AtribuicaoPorIndice(this.hashArquivo, expressao.linha, expressao.entidadeChamada, expressao.indice, valor);
755
+ switch (expressao.constructor.name) {
756
+ case 'Variavel':
757
+ return new construtos_1.Atribuir(this.hashArquivo, expressao, valor);
758
+ case 'AcessoMetodoOuPropriedade':
759
+ const expressaoAcessoMetodoOuPropriedade = expressao;
760
+ return new construtos_1.DefinirValor(this.hashArquivo, igual.linha, expressaoAcessoMetodoOuPropriedade.objeto, expressaoAcessoMetodoOuPropriedade.simbolo, valor);
761
+ /* case 'Super':
762
+ const expressaoSuper = expressao as Super;
763
+ return new DefinirValor(
764
+ this.hashArquivo,
765
+ igual.linha,
766
+ expressaoSuper.
767
+ ); */
768
+ case 'AcessoIndiceVariavel':
769
+ const expressaoAcessoIndiceVariavel = expressao;
770
+ return new construtos_1.AtribuicaoPorIndice(this.hashArquivo, expressaoAcessoIndiceVariavel.linha, expressaoAcessoIndiceVariavel.entidadeChamada, expressaoAcessoIndiceVariavel.indice, valor);
738
771
  }
739
772
  throw this.erro(igual, 'Tarefa de atribuição inválida');
740
773
  }
@@ -1480,6 +1513,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1480
1513
  let superClasse = null;
1481
1514
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.HERDA)) {
1482
1515
  const simboloSuperclasse = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
1516
+ // TODO: Validar classes existentes?
1517
+ this.superclasseAtual = simboloSuperclasse.lexema;
1483
1518
  // TODO: Colocar tipo aqui?
1484
1519
  superClasse = new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1], simboloSuperclasse.lexema);
1485
1520
  }
@@ -1516,6 +1551,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1516
1551
  this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
1517
1552
  const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse, metodos, propriedades, pilhaDecoradoresClasse);
1518
1553
  this.tiposDefinidosEmCodigo[definicaoClasse.simbolo.lexema] = definicaoClasse;
1554
+ this.superclasseAtual = undefined;
1519
1555
  return definicaoClasse;
1520
1556
  }
1521
1557
  /**
@@ -1630,7 +1666,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1630
1666
  }
1631
1667
  exports.AvaliadorSintatico = AvaliadorSintatico;
1632
1668
 
1633
- },{"../bibliotecas/primitivas-dicionario":18,"../bibliotecas/primitivas-numero":19,"../bibliotecas/primitivas-texto":20,"../bibliotecas/primitivas-vetor":21,"../construtos":44,"../construtos/tuplas":53,"../declaracoes":82,"../inferenciador":116,"../lexador":153,"../tipos-de-dados/delegua":161,"../tipos-de-simbolos/delegua":164,"./avaliador-sintatico-base":1,"./erro-avaliador-sintatico":7,"./informacao-escopo":9,"./pilha-escopos":12,"browser-process-hrtime":340}],3:[function(require,module,exports){
1669
+ },{"../bibliotecas/primitivas-dicionario":18,"../bibliotecas/primitivas-numero":19,"../bibliotecas/primitivas-texto":20,"../bibliotecas/primitivas-vetor":21,"../construtos":44,"../construtos/tuplas":53,"../declaracoes":82,"../inferenciador":116,"../tipos-de-dados/delegua":161,"../tipos-de-simbolos/delegua":164,"./avaliador-sintatico-base":1,"./erro-avaliador-sintatico":7,"./informacao-escopo":9,"./pilha-escopos":12,"browser-process-hrtime":340}],3:[function(require,module,exports){
1634
1670
  "use strict";
1635
1671
  var __importDefault = (this && this.__importDefault) || function (mod) {
1636
1672
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -1732,9 +1768,10 @@ class AvaliadorSintaticoEguaClassico {
1732
1768
  primario() {
1733
1769
  if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SUPER)) {
1734
1770
  const simboloChave = this.simboloAnterior();
1735
- this.consumir(egua_classico_1.default.PONTO, "Esperado '.' após 'super'.");
1736
- const metodo = this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome do método da Superclasse.');
1737
- return new construtos_1.Super(this.hashArquivo, simboloChave, metodo);
1771
+ return new construtos_1.Super(this.hashArquivo, simboloChave, this.superclasseAtual);
1772
+ /* this.consumir(tiposDeSimbolos.PONTO, "Esperado '.' após 'super'.");
1773
+ const metodo = this.consumir(tiposDeSimbolos.IDENTIFICADOR, 'Esperado nome do método da Superclasse.');
1774
+ return new Super(this.hashArquivo, simboloChave, metodo); */
1738
1775
  }
1739
1776
  if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.COLCHETE_ESQUERDO)) {
1740
1777
  const valores = [];
@@ -2232,7 +2269,8 @@ class AvaliadorSintaticoEguaClassico {
2232
2269
  const nome = this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome da classe.');
2233
2270
  let superClasse = null;
2234
2271
  if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.HERDA)) {
2235
- this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
2272
+ const simboloSuperclasse = this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
2273
+ this.superclasseAtual = simboloSuperclasse.lexema;
2236
2274
  superClasse = new construtos_1.Variavel(this.hashArquivo, this.simboloAnterior());
2237
2275
  }
2238
2276
  this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo da classe.");
@@ -2241,6 +2279,7 @@ class AvaliadorSintaticoEguaClassico {
2241
2279
  metodos.push(this.funcao('método'));
2242
2280
  }
2243
2281
  this.consumir(egua_classico_1.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
2282
+ this.superclasseAtual = undefined;
2244
2283
  return new declaracoes_1.Classe(nome, superClasse, metodos);
2245
2284
  }
2246
2285
  resolverDeclaracaoForaDeBloco() {
@@ -2326,7 +2365,6 @@ class AvaliadorSintaticoPitugues {
2326
2365
  this.verificarSeSimboloAtualEIgualA(pitugues_1.default.PONTO_E_VIRGULA);
2327
2366
  return retorno;
2328
2367
  }
2329
- //this.consumir(tiposDeSimbolos.IGUAL, "Esperado '=' após identificador em instrução 'var'.");
2330
2368
  const inicializadores = [];
2331
2369
  do {
2332
2370
  inicializadores.push(this.expressao());
@@ -2408,9 +2446,9 @@ class AvaliadorSintaticoPitugues {
2408
2446
  primario() {
2409
2447
  if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.SUPER)) {
2410
2448
  const simboloChave = this.simboloAnterior();
2411
- this.consumir(pitugues_1.default.PONTO, "Esperado '.' após 'super'.");
2412
- const metodo = this.consumir(pitugues_1.default.IDENTIFICADOR, 'Esperado nome do método da Superclasse.');
2413
- return new construtos_1.Super(this.hashArquivo, simboloChave, metodo);
2449
+ /* this.consumir(tiposDeSimbolos.PONTO, "Esperado '.' após 'super'.");
2450
+ const metodo = this.consumir(tiposDeSimbolos.IDENTIFICADOR, 'Esperado nome do método da Superclasse.'); */
2451
+ return new construtos_1.Super(this.hashArquivo, simboloChave, this.superclassseAtual);
2414
2452
  }
2415
2453
  if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.COLCHETE_ESQUERDO)) {
2416
2454
  const valores = [];
@@ -2981,7 +3019,8 @@ class AvaliadorSintaticoPitugues {
2981
3019
  const simbolo = this.consumir(pitugues_1.default.IDENTIFICADOR, 'Esperado nome da classe.');
2982
3020
  let superClasse = null;
2983
3021
  if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.HERDA)) {
2984
- this.consumir(pitugues_1.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
3022
+ const simboloSuperclasse = this.consumir(pitugues_1.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
3023
+ this.superclassseAtual = simboloSuperclasse.lexema;
2985
3024
  superClasse = new construtos_1.Variavel(this.hashArquivo, this.simboloAnterior());
2986
3025
  }
2987
3026
  this.consumir(pitugues_1.default.DOIS_PONTOS, "Esperado ':' antes do escopo da classe.");
@@ -2990,6 +3029,7 @@ class AvaliadorSintaticoPitugues {
2990
3029
  this.verificarSeSimboloAtualEIgualA(pitugues_1.default.CONSTRUTOR, pitugues_1.default.FUNCAO, pitugues_1.default.FUNÇÃO)) {
2991
3030
  metodos.push(this.funcao('método', this.simbolos[this.atual - 1].tipo === pitugues_1.default.CONSTRUTOR));
2992
3031
  }
3032
+ this.superclassseAtual = undefined;
2993
3033
  return new declaracoes_1.Classe(simbolo, superClasse, metodos);
2994
3034
  }
2995
3035
  declaracaoFalhar() {
@@ -5013,11 +5053,11 @@ exports.QualTipo = QualTipo;
5013
5053
  Object.defineProperty(exports, "__esModule", { value: true });
5014
5054
  exports.Super = void 0;
5015
5055
  class Super {
5016
- constructor(hashArquivo, simboloChave, metodo) {
5056
+ constructor(hashArquivo, simboloChave, superclasse) {
5017
5057
  this.linha = Number(simboloChave.linha);
5018
5058
  this.hashArquivo = hashArquivo;
5019
5059
  this.simboloChave = simboloChave;
5020
- this.metodo = metodo;
5060
+ this.superclasse = superclasse;
5021
5061
  }
5022
5062
  async aceitar(visitante) {
5023
5063
  return Promise.resolve(visitante.visitarExpressaoSuper(this));
@@ -6210,7 +6250,7 @@ class DeleguaFuncao extends chamavel_1.Chamavel {
6210
6250
  }
6211
6251
  return argumentosResolvidos;
6212
6252
  }
6213
- async chamar(visitante, argumentos) {
6253
+ resolverAmbiente(argumentos) {
6214
6254
  const ambiente = new espaco_variaveis_1.EspacoVariaveis();
6215
6255
  const parametros = this.declaracao.parametros || [];
6216
6256
  for (let i = 0; i < parametros.length; i++) {
@@ -6229,6 +6269,10 @@ class DeleguaFuncao extends chamavel_1.Chamavel {
6229
6269
  ambiente.valores[nome] = argumento && argumento.hasOwnProperty('valor') ? argumento.valor : argumento;
6230
6270
  }
6231
6271
  }
6272
+ return ambiente;
6273
+ }
6274
+ async chamar(visitante, argumentos) {
6275
+ const ambiente = this.resolverAmbiente(argumentos);
6232
6276
  if (this.instancia !== undefined) {
6233
6277
  ambiente.valores['isto'] = {
6234
6278
  valor: this.instancia,
@@ -6329,7 +6373,7 @@ class DescritorTipoClasse extends chamavel_1.Chamavel {
6329
6373
  * @returns {string} A representação da classe como texto.
6330
6374
  */
6331
6375
  paraTexto() {
6332
- let texto = `<classe ${this.simboloOriginal.lexema}`;
6376
+ let texto = `<DescritorTipoClasse ${this.simboloOriginal.lexema}`;
6333
6377
  for (let propriedade of this.propriedades) {
6334
6378
  texto += ` ${propriedade.nome.lexema}`;
6335
6379
  if (propriedade.tipo) {
@@ -7128,9 +7172,7 @@ class FormatadorDelegua {
7128
7172
  this.codigoFormatado += `${this.quebraLinha}`;
7129
7173
  }
7130
7174
  visitarExpressaoSuper(expressao) {
7131
- // TODO: `expressao.metodo` deveria ser um `Construto`, não um `Simbolo` aqui.
7132
- this.codigoFormatado += `super.${expressao.metodo.lexema}()`;
7133
- console.log(expressao);
7175
+ this.codigoFormatado += `super`;
7134
7176
  }
7135
7177
  visitarExpressaoSustar(declaracao) {
7136
7178
  this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}sustar${this.quebraLinha}`;
@@ -8239,20 +8281,6 @@ class InterpretadorBase {
8239
8281
  }
8240
8282
  return argumentos;
8241
8283
  }
8242
- /**
8243
- * Resolve paraâmetros da chamada de acordo com o tipo da entidade chamada.
8244
- * @param {Chamavel} entidadeChamada A entidade chamada.
8245
- * @returns Os parâmetros resolvidos.
8246
- */
8247
- resolverParametrosChamada(entidadeChamada) {
8248
- if (entidadeChamada instanceof estruturas_1.DeleguaFuncao) {
8249
- return entidadeChamada.declaracao.parametros;
8250
- }
8251
- if (entidadeChamada instanceof estruturas_1.DescritorTipoClasse) {
8252
- return entidadeChamada.metodos.construtor ? entidadeChamada.metodos.construtor.declaracao.parametros : [];
8253
- }
8254
- return [];
8255
- }
8256
8284
  /**
8257
8285
  * Executa uma chamada de função, método ou classe.
8258
8286
  * @param expressao A expressão chamada.
@@ -8274,10 +8302,6 @@ class InterpretadorBase {
8274
8302
  return await this.chamarMetodoPrimitiva(expressao, entidadeChamada);
8275
8303
  }
8276
8304
  const argumentos = await this.resolverArgumentosChamada(expressao);
8277
- // TODO: Aparentemente isso nunca é usado se o bloco de resolução de parâmetros,
8278
- // mais abaixo, também não é.
8279
- // Estudar remoção mais adiante.
8280
- const parametros = this.resolverParametrosChamada(entidadeChamada);
8281
8305
  const aridade = entidadeChamada.aridade ? entidadeChamada.aridade() : entidadeChamada.length;
8282
8306
  // Completar os parâmetros não preenchidos com nulos.
8283
8307
  if (argumentos.length < aridade) {
@@ -8285,22 +8309,7 @@ class InterpretadorBase {
8285
8309
  for (let i = 0; i < diferenca; i++) {
8286
8310
  argumentos.push(null);
8287
8311
  }
8288
- } /* else {
8289
- // TODO: Aparentemente isso aqui nunca funcionou.
8290
- // Avaliar de simplesmente apagar este código, e usar o que foi
8291
- // implementado em `DeleguaFuncao.chamar`.
8292
- if (
8293
- parametros &&
8294
- parametros.length > 0 &&
8295
- parametros[parametros.length - 1].abrangencia === 'multiplo'
8296
- ) {
8297
- let novosArgumentos = argumentos.slice(0, parametros.length - 1);
8298
- novosArgumentos = novosArgumentos.concat(
8299
- argumentos.slice(parametros.length - 1, argumentos.length)
8300
- );
8301
- argumentos = novosArgumentos;
8302
- }
8303
- } */
8312
+ }
8304
8313
  if (entidadeChamada instanceof estruturas_1.FuncaoPadrao) {
8305
8314
  try {
8306
8315
  return entidadeChamada.chamar(this, argumentos.map((a) => a && a.valor && a.valor.hasOwnProperty('valor') ? a.valor.valor : a === null || a === void 0 ? void 0 : a.valor), expressao.entidadeChamada.simbolo);
@@ -8320,6 +8329,14 @@ class InterpretadorBase {
8320
8329
  const retornoEntidadeChamada = await entidadeChamada.chamar(this, argumentos);
8321
8330
  return retornoEntidadeChamada;
8322
8331
  }
8332
+ // Chamadas a `super()`.
8333
+ // Basicamente, chamar o construtor da superclasse.
8334
+ if (expressao.entidadeChamada instanceof construtos_1.Super) {
8335
+ const descritorSuperclasse = variavelEntidadeChamada.classe.superClasse;
8336
+ const metodoConstrutor = descritorSuperclasse.encontrarMetodo('construtor');
8337
+ await metodoConstrutor.chamar(this, argumentos);
8338
+ return null;
8339
+ }
8323
8340
  // A função chamada pode ser de uma biblioteca JavaScript.
8324
8341
  // Neste caso apenas testamos se o tipo é uma função.
8325
8342
  // TODO: Descobrir qual caso exatamente passa aqui.
@@ -8999,14 +9016,8 @@ class InterpretadorBase {
8999
9016
  return valores;
9000
9017
  }
9001
9018
  visitarExpressaoSuper(expressao) {
9002
- const superClasse = this.pilhaEscoposExecucao.obterVariavelPorNome('super');
9003
9019
  const objeto = this.pilhaEscoposExecucao.obterVariavelPorNome('isto');
9004
- const metodo = superClasse.valor.encontrarMetodo(expressao.metodo.lexema);
9005
- if (metodo === undefined) {
9006
- throw new excecoes_1.ErroEmTempoDeExecucao(expressao.metodo, 'Método chamado indefinido.', expressao.linha);
9007
- }
9008
- metodo.instancia = objeto.valor;
9009
- return metodo;
9020
+ return objeto.valor;
9010
9021
  }
9011
9022
  /**
9012
9023
  * Executa expressão de definição de variável.
@@ -25718,7 +25729,7 @@ class TradutorAssemblyScript {
25718
25729
  else if (tipoDe.valor instanceof construtos_1.Vetor)
25719
25730
  resultado += this.traduzirConstrutoVetor(tipoDe.valor);
25720
25731
  else
25721
- resultado += tipoDe.valor;
25732
+ resultado += this.dicionarioConstrutos[tipoDe.valor.constructor.name](tipoDe.valor);
25722
25733
  return resultado;
25723
25734
  }
25724
25735
  traduzirConstrutoLogico(logico) {
@@ -25952,40 +25963,46 @@ class TradutorJavaScript {
25952
25963
  return '-';
25953
25964
  }
25954
25965
  }
25955
- traduzirFuncoesNativas(metodo) {
25956
- switch (metodo.toLowerCase()) {
25966
+ traduzirFuncaoOuMetodo(nomeMetodo, objetoResolvido, argumentos) {
25967
+ const argumentosResolvidos = [];
25968
+ for (const argumento of argumentos) {
25969
+ const argumentoResolvido = this.dicionarioConstrutos[argumento.constructor.name](argumento);
25970
+ argumentosResolvidos.push(argumentoResolvido);
25971
+ }
25972
+ let textoArgumentos = argumentosResolvidos.reduce((atual, proximo) => atual += proximo + ', ', "");
25973
+ textoArgumentos = textoArgumentos.slice(0, -2);
25974
+ switch (nomeMetodo) {
25957
25975
  case 'adicionar':
25958
25976
  case 'empilhar':
25959
- return 'push';
25960
- case 'concatenar':
25961
- return 'concat';
25977
+ return `${objetoResolvido}.push(${textoArgumentos})`;
25962
25978
  case 'fatiar':
25963
- return 'slice';
25979
+ return `${objetoResolvido}.slice(${argumentos[0]}, ${argumentos[1]})`;
25964
25980
  case 'inclui':
25965
- return 'includes';
25981
+ return `${objetoResolvido}.includes(${argumentosResolvidos[0]})`;
25966
25982
  case 'inverter':
25967
- return 'reverse';
25983
+ return `${objetoResolvido}.toReversed()`;
25968
25984
  case 'juntar':
25969
- return 'join';
25970
- case 'ordenar':
25971
- return 'sort';
25972
- case 'removerprimeiro':
25973
- return 'shift';
25974
- case 'removerultimo':
25975
- return 'pop';
25976
- case 'tamanho':
25977
- return 'length';
25985
+ return `${argumentosResolvidos[0]}.join(${objetoResolvido})`;
25978
25986
  case 'maiusculo':
25979
- return 'toUpperCase';
25987
+ return `${objetoResolvido}.toUpperCase()`;
25988
+ case 'mapear':
25989
+ return `${objetoResolvido}.map(${this.traduzirFuncaoAnonimaParaLambda(argumentos[0])})`;
25980
25990
  case 'minusculo':
25981
- return 'toLowerCase';
25982
- case 'substituir':
25983
- return 'replace';
25984
- case 'texto':
25985
- return 'String';
25986
- default:
25987
- return metodo;
25991
+ return `${objetoResolvido}.toLowerCase()`;
25992
+ case 'ordenar':
25993
+ return `${objetoResolvido}.sort()`;
25994
+ case 'remover':
25995
+ return `delete ${objetoResolvido}[${argumentosResolvidos[0]}]`;
25996
+ case 'removerPrimeiro':
25997
+ return `${objetoResolvido}.shift()`;
25998
+ case 'removerUltimo':
25999
+ return `${objetoResolvido}.pop()`;
26000
+ case 'somar':
26001
+ return `${objetoResolvido}.reduce((acumulador, valorAtual) => acumulador + valorAtual, 0)`;
26002
+ case 'tamanho':
26003
+ return `${objetoResolvido}.length`;
25988
26004
  }
26005
+ return `${objetoResolvido}.${nomeMetodo}(${textoArgumentos}))`;
25989
26006
  }
25990
26007
  traduzirConstrutoAgrupamento(agrupamento) {
25991
26008
  return this.dicionarioConstrutos[agrupamento.constructor.name](agrupamento.expressao || agrupamento);
@@ -26022,28 +26039,8 @@ class TradutorJavaScript {
26022
26039
  }
26023
26040
  traduzirConstrutoChamada(chamada) {
26024
26041
  let resultado = '';
26025
- const retorno = `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada)}`;
26026
- const instanciaClasse = this.declaracoesDeClasses.some((declaracao) => { var _a; return ((_a = declaracao === null || declaracao === void 0 ? void 0 : declaracao.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) === retorno; });
26027
- if (instanciaClasse) {
26028
- const classe = this.declaracoesDeClasses.find((declaracao) => { var _a; return ((_a = declaracao === null || declaracao === void 0 ? void 0 : declaracao.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) === retorno; });
26029
- if (classe.simbolo.lexema === retorno)
26030
- resultado += `new ${retorno}`;
26031
- }
26032
- else {
26033
- resultado += retorno;
26034
- }
26035
- if (!retorno.endsWith('length')) {
26036
- resultado += '(';
26037
- }
26038
- for (let parametro of chamada.argumentos) {
26039
- resultado += this.dicionarioConstrutos[parametro.constructor.name](parametro) + ', ';
26040
- }
26041
- if (chamada.argumentos.length > 0) {
26042
- resultado = resultado.slice(0, -2);
26043
- }
26044
- if (!retorno.endsWith('length')) {
26045
- resultado += ')';
26046
- }
26042
+ const retorno = `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada, chamada.argumentos)}`;
26043
+ resultado += retorno;
26047
26044
  return resultado;
26048
26045
  }
26049
26046
  traduzirConstrutoComentario(comentario) {
@@ -26093,8 +26090,28 @@ class TradutorJavaScript {
26093
26090
  }
26094
26091
  return literal.valor;
26095
26092
  }
26096
- traduzirConstrutoVariavel(variavel) {
26097
- return this.traduzirFuncoesNativas(variavel.simbolo.lexema);
26093
+ traduzirConstrutoVariavel(variavel, argumentos) {
26094
+ const argumentosResolvidos = [];
26095
+ const argumentosValidados = argumentos || [];
26096
+ for (const argumento of argumentosValidados) {
26097
+ const argumentoResolvido = this.dicionarioConstrutos[argumento.constructor.name](argumento);
26098
+ argumentosResolvidos.push(argumentoResolvido);
26099
+ }
26100
+ let textoArgumentos = argumentosResolvidos.reduce((atual, proximo) => atual += proximo + ', ', "");
26101
+ textoArgumentos = textoArgumentos.slice(0, -2);
26102
+ switch (variavel.simbolo.lexema) {
26103
+ case 'texto':
26104
+ return `String(${textoArgumentos})`;
26105
+ default:
26106
+ const buscaClasseCorrespondente = this.declaracoesDeClasses.filter(d => d.simbolo.lexema === variavel.simbolo.lexema);
26107
+ if (buscaClasseCorrespondente.length === 0 && argumentosValidados.length === 0) {
26108
+ return `${variavel.simbolo.lexema}`;
26109
+ }
26110
+ if (buscaClasseCorrespondente.length > 0) {
26111
+ return `new ${variavel.simbolo.lexema}(${textoArgumentos})`;
26112
+ }
26113
+ return `${variavel.simbolo.lexema}(${textoArgumentos})`;
26114
+ }
26098
26115
  }
26099
26116
  logicaComumBlocoEscopo(declaracoes) {
26100
26117
  let resultado = '{\n';
@@ -26361,28 +26378,72 @@ class TradutorJavaScript {
26361
26378
  }
26362
26379
  return resultado;
26363
26380
  }
26364
- traduzirConstrutoAcessoMetodo(acessoMetodo) {
26365
- if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
26366
- let objetoVariavel = acessoMetodo.objeto;
26367
- return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(acessoMetodo.nomeMetodo)}`;
26381
+ // TODO: Talvez terminar (ou remover, sei lá).
26382
+ traduzirFuncaoAnonimaParaLambda(argumento) {
26383
+ return "";
26384
+ }
26385
+ traduzirAcessoMetodoVetor(objeto, nomeMetodo, argumentos) {
26386
+ const objetoResolvido = this.dicionarioConstrutos[objeto.constructor.name](objeto);
26387
+ const argumentosResolvidos = [];
26388
+ for (const argumento of argumentos) {
26389
+ const argumentoResolvido = this.dicionarioConstrutos[argumento.constructor.name](argumento);
26390
+ argumentosResolvidos.push(argumentoResolvido);
26391
+ }
26392
+ switch (nomeMetodo) {
26393
+ case 'adicionar':
26394
+ case 'empilhar':
26395
+ let textoArgumentos = argumentosResolvidos.reduce((atual, proximo) => atual += proximo + ', ', "");
26396
+ textoArgumentos = textoArgumentos.slice(0, -2);
26397
+ return `${objetoResolvido}.push(${textoArgumentos})`;
26398
+ case 'fatiar':
26399
+ return `${objetoResolvido}[${argumentos[0]}:${argumentos[1]}]`;
26400
+ case 'inclui':
26401
+ return `${argumentos[0]} in ${objetoResolvido}`;
26402
+ case 'inverter':
26403
+ return `reversed(${objetoResolvido})`;
26404
+ case 'juntar':
26405
+ return `${argumentos[0]}.join(${objetoResolvido})`;
26406
+ case 'mapear':
26407
+ return `list(map(${this.traduzirFuncaoAnonimaParaLambda(argumentos[0])}), ${objetoResolvido})`;
26408
+ case 'ordenar':
26409
+ return `${objetoResolvido}.sort()`;
26410
+ case 'remover':
26411
+ return `del ${objetoResolvido}[${argumentos[0]}]`;
26412
+ case 'removerPrimeiro':
26413
+ return `del ${objetoResolvido}[0]`;
26414
+ case 'removerUltimo':
26415
+ return `del ${objetoResolvido}[-1]`;
26416
+ case 'somar':
26417
+ return `sum(${objetoResolvido})`;
26418
+ case 'tamanho':
26419
+ return `len(${objetoResolvido})`;
26368
26420
  }
26369
- if (acessoMetodo.objeto instanceof construtos_1.Isto) {
26370
- return `this.${acessoMetodo.nomeMetodo}`;
26421
+ }
26422
+ traduzirConstrutoAcessoMetodo(acessoMetodo, argumentos) {
26423
+ switch (acessoMetodo.objeto.constructor.name) {
26424
+ case 'Isto':
26425
+ return `this.${acessoMetodo.nomeMetodo}`;
26426
+ case 'Variavel':
26427
+ let objetoVariavel = acessoMetodo.objeto;
26428
+ return this.traduzirFuncaoOuMetodo(acessoMetodo.nomeMetodo, objetoVariavel.simbolo.lexema, argumentos);
26429
+ case 'Vetor':
26430
+ return this.traduzirAcessoMetodoVetor(acessoMetodo.objeto, acessoMetodo.nomeMetodo, argumentos);
26431
+ default:
26432
+ const objetoResolvido = this.dicionarioConstrutos[acessoMetodo.objeto.constructor.name](acessoMetodo.objeto);
26433
+ return `${objetoResolvido}.${acessoMetodo.nomeMetodo}`;
26371
26434
  }
26372
- const objetoResolvido = this.dicionarioConstrutos[acessoMetodo.objeto.constructor.name](acessoMetodo.objeto);
26373
- return `${objetoResolvido}.${acessoMetodo.nomeMetodo}`;
26374
26435
  }
26375
- traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodo) {
26436
+ traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodo, argumentos) {
26376
26437
  if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
26377
26438
  let objetoVariavel = acessoMetodo.objeto;
26378
- return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(acessoMetodo.simbolo.lexema)}`;
26439
+ return `${this.traduzirFuncaoOuMetodo(acessoMetodo.simbolo.lexema, objetoVariavel.simbolo.lexema, argumentos)}`;
26379
26440
  }
26380
26441
  return `this.${acessoMetodo.simbolo.lexema}`;
26381
26442
  }
26382
- traduzirConstrutoAcessoPropriedade(acessoMetodo) {
26443
+ traduzirConstrutoAcessoPropriedade(acessoMetodo, argumentos) {
26383
26444
  if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
26384
26445
  let objetoVariavel = acessoMetodo.objeto;
26385
- return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(acessoMetodo.nomePropriedade)}`;
26446
+ return `${this.traduzirFuncaoOuMetodo(objetoVariavel.simbolo.lexema, acessoMetodo.nomePropriedade, argumentos)}`;
26386
26447
  }
26387
26448
  return `this.${acessoMetodo.nomePropriedade}`;
26388
26449
  }
@@ -26443,13 +26504,20 @@ class TradutorJavaScript {
26443
26504
  traduzirConstrutoTipoDe(tipoDe) {
26444
26505
  let resultado = 'typeof ';
26445
26506
  if (!tipoDe.valor)
26446
- resultado += tipoDe.valor;
26507
+ resultado += tipoDe.valor; // Qual o sentido disso?
26447
26508
  else if (typeof tipoDe.valor === 'string')
26448
26509
  resultado += `'${tipoDe.valor}'`;
26449
26510
  else if (typeof tipoDe.valor === 'number')
26450
26511
  resultado += tipoDe.valor;
26451
- else
26452
- resultado += `${this.dicionarioConstrutos[tipoDe.valor.constructor.name](tipoDe.valor)}`;
26512
+ else {
26513
+ // Talvez isso seja uma péssima ideia.
26514
+ // Pensar em algo melhor.
26515
+ let alvoTipoDe = String(this.dicionarioConstrutos[tipoDe.valor.constructor.name](tipoDe.valor));
26516
+ if (alvoTipoDe.startsWith('new')) {
26517
+ alvoTipoDe = alvoTipoDe.slice(4, -2);
26518
+ }
26519
+ resultado += `${alvoTipoDe}`;
26520
+ }
26453
26521
  return resultado;
26454
26522
  }
26455
26523
  traduzirDeclaracaoFalhar(falhar) {
@@ -26703,6 +26771,7 @@ class TradutorPython {
26703
26771
  const indice = this.dicionarioConstrutos[acessoIndiceVariavel.indice.constructor.name](acessoIndiceVariavel.indice);
26704
26772
  return `${entidade}[${indice}]`;
26705
26773
  }
26774
+ // TODO: Talvez terminar (ou remover, sei lá).
26706
26775
  traduzirFuncaoAnonimaParaLambda(argumento) {
26707
26776
  return "";
26708
26777
  }
@@ -26895,7 +26964,6 @@ class TradutorPython {
26895
26964
  return `${variavel.simbolo.lexema}`;
26896
26965
  }
26897
26966
  return `${variavel.simbolo.lexema}(${textoArgumentos})`;
26898
- // return this.traduzirFuncoesNativas(variavel.simbolo.lexema);
26899
26967
  }
26900
26968
  }
26901
26969
  traduzirConstrutoVetor(vetor) {