@designliquido/delegua 1.25.1 → 1.26.0

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 (38) hide show
  1. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  2. package/avaliador-sintatico/avaliador-sintatico.js +34 -4
  3. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  4. package/bin/package.json +1 -1
  5. package/interpretador/comum.d.ts +3 -0
  6. package/interpretador/comum.d.ts.map +1 -1
  7. package/interpretador/comum.js +64 -0
  8. package/interpretador/comum.js.map +1 -1
  9. package/interpretador/dialetos/pitugues/comum.d.ts +2 -2
  10. package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
  11. package/interpretador/dialetos/pitugues/comum.js +8 -66
  12. package/interpretador/dialetos/pitugues/comum.js.map +1 -1
  13. package/interpretador/interpretador-base.d.ts.map +1 -1
  14. package/interpretador/interpretador-base.js +4 -6
  15. package/interpretador/interpretador-base.js.map +1 -1
  16. package/interpretador/interpretador.d.ts +2 -1
  17. package/interpretador/interpretador.d.ts.map +1 -1
  18. package/interpretador/interpretador.js +9 -8
  19. package/interpretador/interpretador.js.map +1 -1
  20. package/package.json +1 -1
  21. package/tradutores/tradutor-assemblyscript.js +4 -4
  22. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  23. package/tradutores/tradutor-elixir.js +19 -17
  24. package/tradutores/tradutor-elixir.js.map +1 -1
  25. package/tradutores/tradutor-javascript.d.ts.map +1 -1
  26. package/tradutores/tradutor-javascript.js +5 -3
  27. package/tradutores/tradutor-javascript.js.map +1 -1
  28. package/tradutores/tradutor-python.js +3 -3
  29. package/tradutores/tradutor-python.js.map +1 -1
  30. package/tradutores/tradutor-reverso-javascript.d.ts +3 -1
  31. package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
  32. package/tradutores/tradutor-reverso-javascript.js +29 -1
  33. package/tradutores/tradutor-reverso-javascript.js.map +1 -1
  34. package/tradutores/tradutor-reverso-tenda.js +1 -1
  35. package/tradutores/tradutor-reverso-tenda.js.map +1 -1
  36. package/tradutores/tradutor-ruby.js +3 -3
  37. package/tradutores/tradutor-ruby.js.map +1 -1
  38. package/umd/delegua.js +177 -52
package/umd/delegua.js CHANGED
@@ -3147,10 +3147,40 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3147
3147
  case delegua_2.default.COLCHETE_ESQUERDO:
3148
3148
  const tipoAcesso = this.resolverTipoAcessoIndiceVariavel(expressaoAnterior);
3149
3149
  this.avancarEDevolverAnterior();
3150
- const indice = await this.expressao();
3151
- const simboloFechamento = this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
3152
- const acessoVariavel = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressaoAnterior, indice, simboloFechamento, tipoAcesso);
3153
- return await this.resolverCadeiaChamadas(acessoVariavel);
3150
+ // Determina se é intervalo ([:]), índice único ([indice]) ou
3151
+ // intervalo com passo ([inicio:fim:passo]).
3152
+ let indiceInicio = null;
3153
+ let indiceFim = null;
3154
+ let indicePasso = null;
3155
+ // Se começar com ':', não há início explícito (ex.: `[:fim]`).
3156
+ if (this.simbolos[this.atual].tipo !== delegua_2.default.DOIS_PONTOS) {
3157
+ indiceInicio = await this.expressao();
3158
+ }
3159
+ if (this.simbolos[this.atual].tipo === delegua_2.default.DOIS_PONTOS) {
3160
+ // É um intervalo: [inicio:fim] ou [inicio:fim:passo].
3161
+ this.avancarEDevolverAnterior(); // Pula ':'.
3162
+ if (this.simbolos[this.atual].tipo !== delegua_2.default.COLCHETE_DIREITO &&
3163
+ this.simbolos[this.atual].tipo !== delegua_2.default.DOIS_PONTOS) {
3164
+ indiceFim = await this.expressao();
3165
+ }
3166
+ if (this.simbolos[this.atual].tipo === delegua_2.default.DOIS_PONTOS) {
3167
+ this.avancarEDevolverAnterior(); // Pula segundo ':'.
3168
+ if (this.simbolos[this.atual].tipo !== delegua_2.default.COLCHETE_DIREITO) {
3169
+ indicePasso = await this.expressao();
3170
+ }
3171
+ }
3172
+ const simboloFechamento = this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após intervalo.");
3173
+ // Fatiamento sempre retorna uma coleção do mesmo tipo de elemento.
3174
+ const tipoIntervalo = tipoAcesso + '[]';
3175
+ const acessoIntervalo = new construtos_1.AcessoIntervaloVariavel(this.hashArquivo, expressaoAnterior, indiceInicio, indiceFim, indicePasso, simboloFechamento, tipoIntervalo);
3176
+ return await this.resolverCadeiaChamadas(acessoIntervalo);
3177
+ }
3178
+ else {
3179
+ // É um índice único
3180
+ const simboloFechamento = this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
3181
+ const acessoVariavel = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressaoAnterior, indiceInicio, simboloFechamento, tipoAcesso);
3182
+ return await this.resolverCadeiaChamadas(acessoVariavel);
3183
+ }
3154
3184
  default:
3155
3185
  return expressaoAnterior;
3156
3186
  }
@@ -19977,6 +20007,7 @@ var __importStar = (this && this.__importStar) || (function () {
19977
20007
  };
19978
20008
  })();
19979
20009
  Object.defineProperty(exports, "__esModule", { value: true });
20010
+ exports.visitarExpressaoAcessoIntervaloVariavel = visitarExpressaoAcessoIntervaloVariavel;
19980
20011
  exports.carregarBibliotecasGlobais = carregarBibliotecasGlobais;
19981
20012
  exports.pontoEntradaAjuda = pontoEntradaAjuda;
19982
20013
  exports.obterTopicoAjuda = obterTopicoAjuda;
@@ -19985,7 +20016,70 @@ const delegua_funcao_1 = require("./estruturas/delegua-funcao");
19985
20016
  const descritor_tipo_classe_1 = require("./estruturas/descritor-tipo-classe");
19986
20017
  const objeto_delegua_classe_1 = require("./estruturas/objeto-delegua-classe");
19987
20018
  const construtos_1 = require("../construtos");
20019
+ const excecoes_1 = require("../excecoes");
19988
20020
  const bibliotecaGlobal = __importStar(require("../bibliotecas/biblioteca-global"));
20021
+ async function visitarExpressaoAcessoIntervaloVariavel(interpretador, expressao) {
20022
+ const resultadoEntidade = await interpretador.avaliar(expressao.entidadeChamada);
20023
+ const objeto = interpretador.resolverValor(resultadoEntidade);
20024
+ let tamanho = 0;
20025
+ let itens;
20026
+ const ehTexto = typeof objeto === 'string';
20027
+ if (objeto instanceof construtos_1.TuplaN) {
20028
+ itens = objeto.elementos;
20029
+ tamanho = objeto.elementos.length;
20030
+ }
20031
+ else if (Array.isArray(objeto) || ehTexto) {
20032
+ itens = objeto;
20033
+ tamanho = objeto.length;
20034
+ }
20035
+ else {
20036
+ throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Acesso por intervalo só é suportado em vetores, textos e tuplas.', expressao.linha);
20037
+ }
20038
+ let passo = 1;
20039
+ if (expressao.indicePasso) {
20040
+ const resPasso = await interpretador.avaliar(expressao.indicePasso);
20041
+ passo = interpretador.resolverValor(resPasso);
20042
+ }
20043
+ if (passo === 0) {
20044
+ throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'O passo do fatiamento não pode ser zero.', expressao.linha);
20045
+ }
20046
+ let inicio = passo > 0 ? 0 : tamanho - 1;
20047
+ if (expressao.indiceInicio) {
20048
+ const resInicio = await interpretador.avaliar(expressao.indiceInicio);
20049
+ inicio = interpretador.resolverValor(resInicio);
20050
+ if (inicio < 0)
20051
+ inicio = tamanho + inicio;
20052
+ }
20053
+ let fim = passo > 0 ? tamanho : -1;
20054
+ if (expressao.indiceFim) {
20055
+ const resFim = await interpretador.avaliar(expressao.indiceFim);
20056
+ fim = interpretador.resolverValor(resFim);
20057
+ if (fim < 0)
20058
+ fim = tamanho + fim;
20059
+ }
20060
+ // Lógica de fatiamento para suportar "passo", pois o TypeScript não suporta nativamente
20061
+ const resultadoFatiado = [];
20062
+ if (passo > 0) {
20063
+ for (let i = inicio; i < fim; i += passo) {
20064
+ if (i >= 0 && i < tamanho) {
20065
+ resultadoFatiado.push(itens[i]);
20066
+ }
20067
+ }
20068
+ }
20069
+ else {
20070
+ for (let i = inicio; i > fim; i += passo) {
20071
+ if (i >= 0 && i < tamanho) {
20072
+ resultadoFatiado.push(itens[i]);
20073
+ }
20074
+ }
20075
+ }
20076
+ if (objeto instanceof construtos_1.TuplaN) {
20077
+ return new construtos_1.TuplaN(objeto.hashArquivo, objeto.linha, resultadoFatiado);
20078
+ }
20079
+ if (ehTexto)
20080
+ return resultadoFatiado.join('');
20081
+ return resultadoFatiado;
20082
+ }
19989
20083
  function carregarBibliotecasGlobais(pilhaEscoposExecucao) {
19990
20084
  pilhaEscoposExecucao.definirVariavel('aleatorio', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
19991
20085
  pilhaEscoposExecucao.definirVariavel('aleatório', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
@@ -20556,7 +20650,7 @@ function obterAjudaFuncaoPadrao(funcaoPadrao) {
20556
20650
  }
20557
20651
  }
20558
20652
 
20559
- },{"../bibliotecas/biblioteca-global":29,"../construtos":67,"./estruturas/delegua-funcao":210,"./estruturas/descritor-tipo-classe":211,"./estruturas/funcao-padrao":213,"./estruturas/objeto-delegua-classe":219}],205:[function(require,module,exports){
20653
+ },{"../bibliotecas/biblioteca-global":29,"../construtos":67,"../excecoes":141,"./estruturas/delegua-funcao":210,"./estruturas/descritor-tipo-classe":211,"./estruturas/funcao-padrao":213,"./estruturas/objeto-delegua-classe":219}],205:[function(require,module,exports){
20560
20654
  "use strict";
20561
20655
  Object.defineProperty(exports, "__esModule", { value: true });
20562
20656
  exports.EspacoMemoria = void 0;
@@ -23596,7 +23690,7 @@ class InterpretadorBase {
23596
23690
  }
23597
23691
  return objeto[valorIndice];
23598
23692
  }
23599
- if (objeto instanceof construtos_1.TuplaN || objeto.constructor.name === 'TuplaN') {
23693
+ if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
23600
23694
  if (!Number.isInteger(valorIndice)) {
23601
23695
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Somente inteiros podem ser usados para indexar uma tupla.', expressao.linha));
23602
23696
  }
@@ -23607,7 +23701,7 @@ class InterpretadorBase {
23607
23701
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Índice da tupla fora de intervalo.', expressao.linha));
23608
23702
  }
23609
23703
  const elemento = objeto.elementos[valorIndice];
23610
- if (elemento && elemento.constructor && elemento.constructor.name === 'Literal') {
23704
+ if (elemento instanceof construtos_1.Literal) {
23611
23705
  return elemento.valor;
23612
23706
  }
23613
23707
  return elemento;
@@ -23627,9 +23721,7 @@ class InterpretadorBase {
23627
23721
  objeto instanceof estruturas_1.DeleguaFuncao ||
23628
23722
  objeto instanceof estruturas_1.DescritorTipoClasse ||
23629
23723
  objeto instanceof estruturas_1.DeleguaModulo) {
23630
- if (objeto[valorIndice] === 0)
23631
- return 0;
23632
- return objeto[valorIndice] || null;
23724
+ return objeto[valorIndice];
23633
23725
  }
23634
23726
  if (typeof objeto === primitivos_1.default.TEXTO) {
23635
23727
  if (!Number.isInteger(valorIndice)) {
@@ -23830,7 +23922,7 @@ class InterpretadorBase {
23830
23922
  // Outro caso que `instanceof` simplesmente não funciona para casos em Liquido,
23831
23923
  // então testamos também o nome do construtor.
23832
23924
  if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
23833
- objeto.constructor.name === 'ObjetoDeleguaClasse') {
23925
+ objeto.constructor === estruturas_1.ObjetoDeleguaClasse) {
23834
23926
  const valor = await objeto.obter(expressao.simbolo, this);
23835
23927
  if (valor === 0)
23836
23928
  return 0;
@@ -24909,7 +25001,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
24909
25001
  }
24910
25002
  return objeto[valorIndice];
24911
25003
  }
24912
- if (objeto instanceof construtos_1.TuplaN || objeto.constructor.name === 'TuplaN') {
25004
+ if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
24913
25005
  if (!Number.isInteger(valorIndice)) {
24914
25006
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Somente inteiros podem ser usados para indexar uma tupla.', expressao.linha));
24915
25007
  }
@@ -24920,7 +25012,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
24920
25012
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Índice da tupla fora de intervalo.', expressao.linha));
24921
25013
  }
24922
25014
  const elemento = objeto.elementos[valorIndice];
24923
- if (elemento && elemento.constructor && elemento.constructor.name === 'Literal') {
25015
+ if (elemento instanceof construtos_1.Literal) {
24924
25016
  return elemento.valor;
24925
25017
  }
24926
25018
  return elemento;
@@ -24933,9 +25025,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
24933
25025
  objeto instanceof estruturas_1.DeleguaFuncao ||
24934
25026
  objeto instanceof estruturas_1.DescritorTipoClasse ||
24935
25027
  objeto instanceof estruturas_1.DeleguaModulo) {
24936
- if (objeto[valorIndice] === 0)
24937
- return 0;
24938
- return objeto[valorIndice] || null;
25028
+ return objeto[valorIndice];
24939
25029
  }
24940
25030
  if (typeof objeto === primitivos_1.default.TEXTO) {
24941
25031
  if (!Number.isInteger(valorIndice)) {
@@ -24954,6 +25044,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
24954
25044
  linha: this.linhaDeclaracaoAtual,
24955
25045
  }, 'Somente listas, dicionários, classes e objetos podem ter seus valores indexados.', expressao.linha));
24956
25046
  }
25047
+ async visitarExpressaoAcessoIntervaloVariavel(expressao) {
25048
+ return (0, comum_1.visitarExpressaoAcessoIntervaloVariavel)(this, expressao);
25049
+ }
24957
25050
  logicaPropriedadesEMetodosDeClasse(declaracao, superClassesResolvidas, mesclaResolvidas) {
24958
25051
  const metodos = {};
24959
25052
  const metodosEstaticos = {};
@@ -25145,7 +25238,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
25145
25238
  throw e;
25146
25239
  }
25147
25240
  }
25148
- if (objeto instanceof construtos_1.TuplaN || objeto.constructor.name === 'TuplaN') {
25241
+ if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
25149
25242
  const metodoDePrimitivaTupla = primitivas_tupla_1.default[expressao.nomeMetodo];
25150
25243
  if (metodoDePrimitivaTupla) {
25151
25244
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTupla.implementacao, expressao.nomeMetodo, 'tupla');
@@ -25342,7 +25435,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
25342
25435
  throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método ou propriedade '${expressao.simbolo.lexema}' não encontrado em '${nomeClasse}'.`, expressao.linha);
25343
25436
  }
25344
25437
  }
25345
- if (objeto instanceof construtos_1.TuplaN || objeto.constructor.name === 'TuplaN') {
25438
+ if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
25346
25439
  const metodoDePrimitivaTupla = primitivas_tupla_1.default[expressao.simbolo.lexema];
25347
25440
  if (metodoDePrimitivaTupla) {
25348
25441
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTupla.implementacao, expressao.simbolo.lexema, 'tupla');
@@ -25481,7 +25574,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
25481
25574
  if (objeto.constructor === estruturas_1.ObjetoDeleguaClasse) {
25482
25575
  return objeto.obterMetodo(expressao.nomePropriedade) || null;
25483
25576
  }
25484
- if (objeto instanceof construtos_1.TuplaN || objeto.constructor.name === 'TuplaN') {
25577
+ if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
25485
25578
  const metodoPrimitivaTupla = primitivas_tupla_1.default[expressao.nomePropriedade];
25486
25579
  if (metodoPrimitivaTupla) {
25487
25580
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoPrimitivaTupla.implementacao, expressao.nomePropriedade, 'tupla');
@@ -46811,7 +46904,7 @@ class TradutorAssemblyScript {
46811
46904
  }
46812
46905
  traduzirDeclaracaoPara(declaracaoPara) {
46813
46906
  let resultado = 'for (';
46814
- if (declaracaoPara.inicializador.constructor.name === 'Array') {
46907
+ if (Array.isArray(declaracaoPara.inicializador)) {
46815
46908
  resultado +=
46816
46909
  this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0]) + ' ';
46817
46910
  }
@@ -46893,7 +46986,7 @@ class TradutorAssemblyScript {
46893
46986
  if (!corpo)
46894
46987
  return null;
46895
46988
  for (const declaracao of corpo) {
46896
- if (declaracao.constructor.name === 'Retorna') {
46989
+ if (declaracao instanceof declaracoes_1.Retorna) {
46897
46990
  const retorna = declaracao;
46898
46991
  if (retorna.tipo && retorna.tipo !== 'vazio') {
46899
46992
  return retorna.tipo;
@@ -47236,7 +47329,7 @@ class TradutorAssemblyScript {
47236
47329
  return `Math.pow(${esquerda}, ${direita})`;
47237
47330
  }
47238
47331
  let resultado = '';
47239
- if (binario.esquerda.constructor.name === 'Agrupamento')
47332
+ if (binario.esquerda instanceof construtos_1.Agrupamento)
47240
47333
  resultado +=
47241
47334
  '(' +
47242
47335
  this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda) +
@@ -47245,7 +47338,7 @@ class TradutorAssemblyScript {
47245
47338
  resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
47246
47339
  let operador = this.traduzirSimboloOperador(binario.operador);
47247
47340
  resultado += ` ${operador} `;
47248
- if (binario.direita.constructor.name === 'Agrupamento')
47341
+ if (binario.direita instanceof construtos_1.Agrupamento)
47249
47342
  resultado +=
47250
47343
  '(' +
47251
47344
  this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) +
@@ -47391,6 +47484,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
47391
47484
  };
47392
47485
  Object.defineProperty(exports, "__esModule", { value: true });
47393
47486
  exports.TradutorElixir = void 0;
47487
+ const construtos_1 = require("../construtos");
47488
+ const declaracoes_1 = require("../declaracoes");
47394
47489
  const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
47395
47490
  /**
47396
47491
  * Tradutor que converte código Delégua para Elixir.
@@ -47602,27 +47697,27 @@ class TradutorElixir {
47602
47697
  */
47603
47698
  extrairCamposDeDeclaracao(declaracao, campos) {
47604
47699
  // Se é uma expressão de atribuição com isto.campo
47605
- if (declaracao.constructor.name === 'Expressao' && declaracao.expressao) {
47700
+ if (declaracao instanceof declaracoes_1.Expressao && declaracao.expressao) {
47606
47701
  const expressao = declaracao.expressao;
47607
47702
  // DefinirValor: usado para isto.campo = valor
47608
- if (expressao.constructor.name === 'DefinirValor') {
47609
- if (expressao.objeto && expressao.objeto.constructor.name === 'Isto') {
47703
+ if (expressao instanceof construtos_1.DefinirValor) {
47704
+ if (expressao.objeto && expressao.objeto.constructor === construtos_1.Isto) {
47610
47705
  campos.add(expressao.nome.lexema);
47611
47706
  }
47612
47707
  }
47613
47708
  // Atribuir: pode ser usado para isto.campo = valor
47614
- if (expressao.constructor.name === 'Atribuir') {
47709
+ if (expressao instanceof construtos_1.Atribuir) {
47615
47710
  // Verificar se o alvo é um acesso a propriedade de isto
47616
- if (expressao.alvo && expressao.alvo.constructor.name === 'AcessoPropriedade') {
47711
+ if (expressao.alvo instanceof construtos_1.AcessoPropriedade) {
47617
47712
  const acesso = expressao.alvo;
47618
- if (acesso.objeto && acesso.objeto.constructor.name === 'Isto') {
47713
+ if (acesso.objeto && acesso.objeto.constructor === construtos_1.Isto) {
47619
47714
  campos.add(acesso.nomePropriedade);
47620
47715
  }
47621
47716
  }
47622
47717
  }
47623
47718
  }
47624
47719
  // Se é um bloco, processar declarações internas
47625
- if (declaracao.constructor.name === 'Bloco') {
47720
+ if (declaracao.constructor === declaracoes_1.Bloco) {
47626
47721
  for (const decl of declaracao.declaracoes) {
47627
47722
  this.extrairCamposDeDeclaracao(decl, campos);
47628
47723
  }
@@ -47679,21 +47774,21 @@ class TradutorElixir {
47679
47774
  async extrairInicializacoesStruct(corpo, nomeModulo) {
47680
47775
  const inicializacoes = [];
47681
47776
  for (const declaracao of corpo) {
47682
- if (declaracao.constructor.name === 'Expressao' && declaracao.expressao) {
47777
+ if (declaracao instanceof declaracoes_1.Expressao && declaracao.expressao) {
47683
47778
  const expressao = declaracao.expressao;
47684
47779
  // DefinirValor: isto.campo = valor
47685
- if (expressao.constructor.name === 'DefinirValor') {
47686
- if (expressao.objeto && expressao.objeto.constructor.name === 'Isto') {
47780
+ if (expressao instanceof construtos_1.DefinirValor) {
47781
+ if (expressao.objeto && expressao.objeto.constructor === construtos_1.Isto) {
47687
47782
  const campo = this.converterIdentificador(expressao.nome.lexema);
47688
47783
  const valor = await expressao.valor.aceitar(this);
47689
47784
  inicializacoes.push(`${campo}: ${valor}`);
47690
47785
  }
47691
47786
  }
47692
47787
  // Atribuir: pode ser isto.campo = valor (se alvo é AcessoPropriedade)
47693
- if (expressao.constructor.name === 'Atribuir') {
47694
- if (expressao.alvo && expressao.alvo.constructor.name === 'AcessoPropriedade') {
47788
+ if (expressao instanceof construtos_1.Atribuir) {
47789
+ if (expressao.alvo instanceof construtos_1.AcessoPropriedade) {
47695
47790
  const acesso = expressao.alvo;
47696
- if (acesso.objeto && acesso.objeto.constructor.name === 'Isto') {
47791
+ if (acesso.objeto && acesso.objeto.constructor === construtos_1.Isto) {
47697
47792
  const campo = this.converterIdentificador(acesso.nomePropriedade);
47698
47793
  const valor = await expressao.valor.aceitar(this);
47699
47794
  inicializacoes.push(`${campo}: ${valor}`);
@@ -47888,7 +47983,7 @@ class TradutorElixir {
47888
47983
  const init = Array.isArray(declaracao.inicializador)
47889
47984
  ? declaracao.inicializador[0]
47890
47985
  : declaracao.inicializador;
47891
- if (init.constructor.name === 'Var') {
47986
+ if (init.constructor === declaracoes_1.Var) {
47892
47987
  nomeVar = this.converterIdentificador(init.simbolo.lexema);
47893
47988
  if (init.inicializador) {
47894
47989
  valorInicial = await init.inicializador.aceitar(this);
@@ -48121,7 +48216,7 @@ class TradutorElixir {
48121
48216
  }
48122
48217
  }
48123
48218
  // Verificar se é instanciação de módulo (classe)
48124
- if (expressao.entidadeChamada.constructor.name === 'Variavel') {
48219
+ if (expressao.entidadeChamada.constructor === construtos_1.Variavel) {
48125
48220
  const nomeEntidade = expressao.entidadeChamada.simbolo.lexema;
48126
48221
  if (this.modulosConhecidos.has(this.converterNomeModulo(nomeEntidade))) {
48127
48222
  // Chamada de construtor de módulo
@@ -48129,7 +48224,7 @@ class TradutorElixir {
48129
48224
  }
48130
48225
  }
48131
48226
  // Verificar se é chamada de método (AcessoMetodo ou AcessoMetodoOuPropriedade)
48132
- if (expressao.entidadeChamada.constructor.name === 'AcessoMetodo') {
48227
+ if (expressao.entidadeChamada.constructor === construtos_1.AcessoMetodo) {
48133
48228
  const acessoMetodo = expressao.entidadeChamada;
48134
48229
  const objeto = await acessoMetodo.objeto.aceitar(this);
48135
48230
  const metodo = this.converterIdentificador(acessoMetodo.nomeMetodo);
@@ -48141,7 +48236,7 @@ class TradutorElixir {
48141
48236
  // Método de módulo/struct - passar o struct como primeiro argumento
48142
48237
  return Promise.resolve(`${this.obterNomeModulo(objeto)}.${metodo}(${objeto}${argumentos.length > 0 ? ', ' + argumentos.join(', ') : ''})`);
48143
48238
  }
48144
- if (expressao.entidadeChamada.constructor.name === 'AcessoMetodoOuPropriedade') {
48239
+ if (expressao.entidadeChamada.constructor === construtos_1.AcessoMetodoOuPropriedade) {
48145
48240
  const acesso = expressao.entidadeChamada;
48146
48241
  const objeto = await acesso.objeto.aceitar(this);
48147
48242
  const simbolo = this.converterIdentificador(acesso.simbolo.lexema);
@@ -48345,7 +48440,7 @@ class TradutorElixir {
48345
48440
  }
48346
48441
  exports.TradutorElixir = TradutorElixir;
48347
48442
 
48348
- },{"../tipos-de-simbolos/delegua":258}],280:[function(require,module,exports){
48443
+ },{"../construtos":67,"../declaracoes":117,"../tipos-de-simbolos/delegua":258}],280:[function(require,module,exports){
48349
48444
  "use strict";
48350
48445
  var __importDefault = (this && this.__importDefault) || function (mod) {
48351
48446
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -48538,11 +48633,13 @@ class TradutorJavaScript {
48538
48633
  resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
48539
48634
  let operador = this.traduzirSimboloOperador(binario.operador);
48540
48635
  resultado += ` ${operador} `;
48541
- if (binario.direita.constructor.name === 'Agrupamento')
48636
+ if (binario.direita.constructor === construtos_1.Agrupamento) {
48637
+ const agrupamentoDireita = binario.direita;
48542
48638
  resultado +=
48543
48639
  '(' +
48544
- this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) +
48640
+ this.dicionarioConstrutos[agrupamentoDireita.constructor.name](binario.direita) +
48545
48641
  ')';
48642
+ }
48546
48643
  else
48547
48644
  resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
48548
48645
  return resultado;
@@ -48799,7 +48896,7 @@ class TradutorJavaScript {
48799
48896
  }
48800
48897
  traduzirDeclaracaoPara(declaracaoPara) {
48801
48898
  let resultado = 'for (';
48802
- if (declaracaoPara.inicializador.constructor.name === 'Array') {
48899
+ if (Array.isArray(declaracaoPara.inicializador)) {
48803
48900
  resultado +=
48804
48901
  this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0], false) + '; ';
48805
48902
  }
@@ -50532,7 +50629,7 @@ class TradutorPython {
50532
50629
  if (funcao.corpo.length > 0) {
50533
50630
  const primeiraDeclaracao = funcao.corpo[0];
50534
50631
  // Se for uma declaração de retorno, extraímos a expressão
50535
- if (primeiraDeclaracao.constructor.name === 'Retorna') {
50632
+ if (primeiraDeclaracao instanceof declaracoes_1.Retorna) {
50536
50633
  const retorna = primeiraDeclaracao;
50537
50634
  if (retorna.valor) {
50538
50635
  expressao = this.dicionarioConstrutos[retorna.valor.constructor.name](retorna.valor);
@@ -50645,14 +50742,14 @@ class TradutorPython {
50645
50742
  traduzirConstrutoBinario(binario) {
50646
50743
  let resultado = '';
50647
50744
  const valorEsquerdo = this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
50648
- if (binario.esquerda.constructor.name === 'Agrupamento')
50745
+ if (binario.esquerda instanceof construtos_1.Agrupamento)
50649
50746
  resultado += '(' + valorEsquerdo + ')';
50650
50747
  else
50651
50748
  resultado += valorEsquerdo;
50652
50749
  let operador = this.traduzirSimboloOperador(binario.operador);
50653
50750
  resultado += ` ${operador} `;
50654
50751
  const valorDireito = this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
50655
- if (binario.direita.constructor.name === 'Agrupamento')
50752
+ if (binario.direita instanceof construtos_1.Agrupamento)
50656
50753
  resultado += '(' + valorDireito + ')';
50657
50754
  else
50658
50755
  resultado += valorDireito;
@@ -51401,6 +51498,7 @@ class TradutorReversoJavaScript {
51401
51498
  LogicalExpression: this.traduzirConstrutoLogico.bind(this),
51402
51499
  MemberExpression: this.traduzirExpressao.bind(this),
51403
51500
  NewExpression: this.traduzirNovo.bind(this),
51501
+ ObjectExpression: this.traduzirConstrutoObjeto.bind(this),
51404
51502
  ThisExpression: () => 'isto',
51405
51503
  UpdateExpression: this.traduzirAtualizacaoVariavel.bind(this),
51406
51504
  // Variavel: this.traduzirConstrutoVariavel.bind(this),
@@ -51476,6 +51574,31 @@ class TradutorReversoJavaScript {
51476
51574
  traduzirIdentificador(identificador) {
51477
51575
  return identificador.name;
51478
51576
  }
51577
+ traduzirConstrutoObjeto(objeto) {
51578
+ if (!objeto.properties.length) {
51579
+ return '{}';
51580
+ }
51581
+ let resultado = '{';
51582
+ for (const propriedade of objeto.properties) {
51583
+ if (propriedade.type === 'SpreadElement') {
51584
+ const spread = propriedade;
51585
+ resultado +=
51586
+ '...' + this.dicionarioConstrutos[spread.argument.type](spread.argument) + ', ';
51587
+ continue;
51588
+ }
51589
+ const propriedadeObjeto = propriedade;
51590
+ const chave = propriedadeObjeto.key.type === 'Identifier'
51591
+ ? `'${propriedadeObjeto.key.name}'`
51592
+ : this.dicionarioConstrutos[propriedadeObjeto.key.type](propriedadeObjeto.key);
51593
+ const valor = this.dicionarioConstrutos[propriedadeObjeto.value.type](propriedadeObjeto.value);
51594
+ resultado += `${chave}: ${valor}, `;
51595
+ }
51596
+ if (objeto.properties.length > 0) {
51597
+ resultado = resultado.slice(0, -2);
51598
+ }
51599
+ resultado += '}';
51600
+ return resultado;
51601
+ }
51479
51602
  traduzirAtualizacaoVariavel(atualizarVariavel) {
51480
51603
  let resultado = '';
51481
51604
  resultado += this.dicionarioConstrutos[atualizarVariavel.argument.constructor.name](atualizarVariavel.argument);
@@ -51532,6 +51655,8 @@ class TradutorReversoJavaScript {
51532
51655
  return 'verdadeiro';
51533
51656
  if (literal.raw === 'false')
51534
51657
  return 'falso';
51658
+ if (literal.value === null || literal.raw === 'null')
51659
+ return 'nulo';
51535
51660
  return `${literal.raw}`;
51536
51661
  }
51537
51662
  traduzirConstrutoBinario(binario) {
@@ -51676,7 +51801,7 @@ class TradutorReversoJavaScript {
51676
51801
  resultado += this.logicaComumBlocoEscopo(declaracao.consequent);
51677
51802
  if (declaracao?.alternate) {
51678
51803
  resultado += 'senao ';
51679
- if (declaracao.alternate.constructor.name === 'BlockStatement') {
51804
+ if (declaracao.alternate.type === 'BlockStatement') {
51680
51805
  const bloco = declaracao.alternate;
51681
51806
  resultado += this.logicaComumBlocoEscopo(bloco);
51682
51807
  return resultado;
@@ -52776,7 +52901,7 @@ class TradutorReversoTenda {
52776
52901
  }
52777
52902
  traduzirDeclaracaoPara(declaracaoPara) {
52778
52903
  let resultado = 'para ';
52779
- if (declaracaoPara.inicializador.constructor.name === 'Array') {
52904
+ if (Array.isArray(declaracaoPara.inicializador)) {
52780
52905
  resultado +=
52781
52906
  this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0], false) + '; ';
52782
52907
  }
@@ -53196,7 +53321,7 @@ class TradutorRuby {
53196
53321
  if (funcao.corpo.length > 0) {
53197
53322
  const primeiraDeclaracao = funcao.corpo[0];
53198
53323
  // Se for uma declaração de retorno, extraímos a expressão
53199
- if (primeiraDeclaracao.constructor.name === 'Retorna') {
53324
+ if (primeiraDeclaracao instanceof declaracoes_1.Retorna) {
53200
53325
  const retorna = primeiraDeclaracao;
53201
53326
  if (retorna.valor) {
53202
53327
  expressao = this.dicionarioConstrutos[retorna.valor.constructor.name](retorna.valor);
@@ -53310,14 +53435,14 @@ class TradutorRuby {
53310
53435
  traduzirConstrutoBinario(binario) {
53311
53436
  let resultado = '';
53312
53437
  const valorEsquerdo = this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
53313
- if (binario.esquerda.constructor.name === 'Agrupamento')
53438
+ if (binario.esquerda instanceof construtos_1.Agrupamento)
53314
53439
  resultado += '(' + valorEsquerdo + ')';
53315
53440
  else
53316
53441
  resultado += valorEsquerdo;
53317
53442
  let operador = this.traduzirSimboloOperador(binario.operador);
53318
53443
  resultado += ` ${operador} `;
53319
53444
  const valorDireito = this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
53320
- if (binario.direita.constructor.name === 'Agrupamento')
53445
+ if (binario.direita instanceof construtos_1.Agrupamento)
53321
53446
  resultado += '(' + valorDireito + ')';
53322
53447
  else
53323
53448
  resultado += valorDireito;