@designliquido/delegua 0.45.8 → 0.45.10

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 (30) hide show
  1. package/README.md +3 -0
  2. package/avaliador-sintatico/avaliador-sintatico-base.d.ts +1 -1
  3. package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
  4. package/avaliador-sintatico/avaliador-sintatico-base.js +2 -8
  5. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  6. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  7. package/avaliador-sintatico/avaliador-sintatico.js +13 -6
  8. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  9. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  10. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +5 -4
  11. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  12. package/bin/package.json +1 -1
  13. package/depuracao/cyrb53.d.ts +4 -4
  14. package/depuracao/cyrb53.d.ts.map +1 -1
  15. package/depuracao/cyrb53.js +4 -4
  16. package/interpretador/estruturas/funcao-padrao.d.ts +7 -0
  17. package/interpretador/estruturas/funcao-padrao.d.ts.map +1 -1
  18. package/interpretador/estruturas/funcao-padrao.js +1 -0
  19. package/interpretador/estruturas/funcao-padrao.js.map +1 -1
  20. package/lexador/lexador.d.ts.map +1 -1
  21. package/lexador/lexador.js +1 -0
  22. package/lexador/lexador.js.map +1 -1
  23. package/lexador/palavras-reservadas.d.ts +1 -0
  24. package/lexador/palavras-reservadas.d.ts.map +1 -1
  25. package/lexador/palavras-reservadas.js +1 -0
  26. package/lexador/palavras-reservadas.js.map +1 -1
  27. package/package.json +1 -1
  28. package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
  29. package/tradutores/tradutor-reverso-javascript.js.map +1 -1
  30. package/umd/delegua.js +27 -22
package/umd/delegua.js CHANGED
@@ -56,13 +56,6 @@ class AvaliadorSintaticoBase {
56
56
  this.atual += 1;
57
57
  return this.simbolos[this.atual - 1];
58
58
  }
59
- // TODO: Verificar possibilidade de remoção.
60
- // Regressão de símbolo é uma roubada por N razões.
61
- regredirEDevolverAtual() {
62
- if (this.atual > 0)
63
- this.atual -= 1;
64
- return this.simbolos[this.atual];
65
- }
66
59
  verificarSeSimboloAtualEIgualA(...argumentos) {
67
60
  for (let i = 0; i < argumentos.length; i++) {
68
61
  const tipoAtual = argumentos[i];
@@ -169,7 +162,8 @@ class AvaliadorSintaticoBase {
169
162
  return this.atribuir();
170
163
  }
171
164
  funcao(tipo) {
172
- const simboloFuncao = this.avancarEDevolverAnterior();
165
+ // Avançar `função` ou `funcao`.
166
+ this.avancarEDevolverAnterior();
173
167
  const nomeFuncao = this.consumir(comum_1.default.IDENTIFICADOR, `Esperado nome ${tipo}.`);
174
168
  return new declaracoes_1.FuncaoDeclaracao(nomeFuncao, this.corpoDaFuncao(tipo));
175
169
  }
@@ -610,6 +604,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
610
604
  return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaNumeroSelecionada.tipoRetorno);
611
605
  case delegua_1.default.MODULO:
612
606
  case delegua_1.default.MÓDULO:
607
+ // Há dois casos para resolução de módulo:
608
+ // Um quando o módulo é definido no próprio código (por exemplo, em um outro arquivo `.delegua`).
609
+ // Outro quando é importado de uma biblioteca externa.
610
+ // Este é o caso quando o módulo vem de outro arquivo `.delegua`.
613
611
  if (construtoTipado.simbolo.lexema in this.tiposDefinidosEmCodigo) {
614
612
  // Construtor de classe.
615
613
  return new construtos_1.Variavel(construtoTipado.hashArquivo, construtoTipado.simbolo, construtoTipado.objeto.tipo);
@@ -645,7 +643,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
645
643
  }
646
644
  const argumentoEntidadeChamadaQualquer = argumentoEntidadeChamada.tipo.startsWith('qualquer');
647
645
  const argumentoUtilizadoQualquer = argumentoUtilizado.tipo.startsWith('qualquer');
648
- // Este caso é tarefa do anasalidor semântico apontar.
646
+ // Este caso é tarefa do analisador semântico apontar.
649
647
  if (argumentoEntidadeChamadaQualquer || argumentoUtilizadoQualquer) {
650
648
  continue;
651
649
  }
@@ -678,7 +676,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
678
676
  if (tipoPrimitiva === undefined) {
679
677
  // Provavelmente uma chamada a alguma função da biblioteca global.
680
678
  const informacoesPossivelFuncaoBibliotecaGlobal = this.pilhaEscopos.obterBibliotecaGlobal(entidadeChamadaResolvidaVariavel.simbolo.lexema);
681
- if (informacoesPossivelFuncaoBibliotecaGlobal !== undefined) {
679
+ if (informacoesPossivelFuncaoBibliotecaGlobal) {
682
680
  const erros = this.validarArgumentosEntidadeChamada(informacoesPossivelFuncaoBibliotecaGlobal.argumentos, argumentos);
683
681
  if (erros.length > 0) {
684
682
  throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaResolvidaVariavel.simbolo, `Erros ao resolver argumentos de chamada a ${entidadeChamadaResolvidaVariavel.simbolo.lexema}: \n${erros.reduce((mensagem, erro) => (mensagem += `${erro}\n`), '')}`);
@@ -723,8 +721,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
723
721
  this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos.");
724
722
  // Toda chamada precisa saber de antemão qual o tipo resolvido.
725
723
  const entidadeChamadaResolvida = this.resolverEntidadeChamada(entidadeChamada, argumentos, tipoPrimitiva);
726
- // TODO: Criar forma de validar tipos dos argumentos da entidade chamada.
727
724
  const construtoChamada = new construtos_1.Chamada(this.hashArquivo, entidadeChamadaResolvida, argumentos);
725
+ // A validação de tipos dos argumentos da entidade chamada existe em
726
+ // avaliadores sintáticos derivados deste, como em `delegua-node`.
727
+ // Pode ser que esta lógica seja trazida para cá no futuro.
728
728
  construtoChamada.tipo = 'qualquer';
729
729
  return construtoChamada;
730
730
  }
@@ -1070,7 +1070,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1070
1070
  throw this.erro(simboloPara, `Variável ou constante em 'para cada' não parece possuir um tipo iterável.`);
1071
1071
  }
1072
1072
  const tipoVetor = vetor.tipo;
1073
- if (!tipoVetor.endsWith('[]') && tipoVetor !== 'vetor') {
1073
+ if (!tipoVetor.endsWith('[]') && !['qualquer', 'vetor'].includes(tipoVetor)) {
1074
1074
  throw this.erro(simboloPara, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
1075
1075
  }
1076
1076
  let tipoVariavelIteracao = 'qualquer';
@@ -1524,8 +1524,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1524
1524
  // para ela. Vai ser atualizado após avaliação do corpo da função.
1525
1525
  this.pilhaEscopos.definirInformacoesVariavel(simbolo.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simbolo.lexema, 'qualquer'));
1526
1526
  const corpoDaFuncao = this.corpoDaFuncao(tipo);
1527
- this.pilhaEscopos.definirInformacoesVariavel(simbolo.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simbolo.lexema, corpoDaFuncao.tipo));
1528
- const funcaoDeclaracao = new declaracoes_1.FuncaoDeclaracao(simbolo, corpoDaFuncao, corpoDaFuncao.tipo, decoradores);
1527
+ const tipoDaFuncao = `função<${corpoDaFuncao.tipo}>`;
1528
+ this.pilhaEscopos.definirInformacoesVariavel(simbolo.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simbolo.lexema, tipoDaFuncao));
1529
+ const funcaoDeclaracao = new declaracoes_1.FuncaoDeclaracao(simbolo, corpoDaFuncao, tipoDaFuncao, decoradores);
1529
1530
  this.pilhaEscopos.registrarReferenciaFuncao(simbolo.lexema, funcaoDeclaracao);
1530
1531
  return funcaoDeclaracao;
1531
1532
  }
@@ -3216,7 +3217,7 @@ class AvaliadorSintaticoPitugues {
3216
3217
  throw this.erro(simboloPara, `Variável ou constante em 'para cada' não parece possuir um tipo iterável.`);
3217
3218
  }
3218
3219
  const tipoVetor = vetor.tipo;
3219
- if (!tipoVetor.endsWith('[]') && tipoVetor !== 'vetor') {
3220
+ if (!tipoVetor.endsWith('[]') && !['qualquer', 'vetor'].includes(tipoVetor)) {
3220
3221
  throw this.erro(simboloPara, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
3221
3222
  }
3222
3223
  this.pilhaEscopos.definirInformacoesVariavel(nomeVariavelIteracao.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(nomeVariavelIteracao.lexema, tipoVetor.slice(0, -2)));
@@ -3389,8 +3390,9 @@ class AvaliadorSintaticoPitugues {
3389
3390
  // para ela. Vai ser atualizado após avaliação do corpo da função.
3390
3391
  this.pilhaEscopos.definirInformacoesVariavel(simbolo.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simbolo.lexema, 'qualquer'));
3391
3392
  const corpoDaFuncao = this.corpoDaFuncao(tipo);
3392
- this.pilhaEscopos.definirInformacoesVariavel(simbolo.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simbolo.lexema, corpoDaFuncao.tipo));
3393
- const funcaoDeclaracao = new declaracoes_1.FuncaoDeclaracao(simbolo, corpoDaFuncao, corpoDaFuncao.tipo);
3393
+ const tipoDaFuncao = `função<${corpoDaFuncao.tipo}>`;
3394
+ this.pilhaEscopos.definirInformacoesVariavel(simbolo.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simbolo.lexema, tipoDaFuncao));
3395
+ const funcaoDeclaracao = new declaracoes_1.FuncaoDeclaracao(simbolo, corpoDaFuncao, tipoDaFuncao);
3394
3396
  this.pilhaEscopos.registrarReferenciaFuncao(simbolo.lexema, funcaoDeclaracao);
3395
3397
  return funcaoDeclaracao;
3396
3398
  }
@@ -3482,7 +3484,7 @@ class AvaliadorSintaticoPitugues {
3482
3484
  inicializarPilhaEscopos() {
3483
3485
  this.pilhaEscopos = new pilha_escopos_1.PilhaEscopos();
3484
3486
  this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
3485
- // Funções nativas de Delégua
3487
+ // Funções nativas de Delégua (e de Pituguês também, por enquanto)
3486
3488
  this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('aleatorio', 'inteiro', [
3487
3489
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('número', 'número'),
3488
3490
  ]));
@@ -7797,11 +7799,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
7797
7799
  exports.default = cyrb53;
7798
7800
  /**
7799
7801
  * Função de geração de hashes copiada de https://stackoverflow.com/a/52171480/1314276.
7800
- * A ideia é gerar hashes únicos para nomes de arquivos importados e usar o hash para os
7802
+ * A ideia é gerar _hashes_ únicos para nomes de arquivos importados e usar o _hash_ para os
7801
7803
  * pragmas de elementos catalogados pelo lexador e usados pelo interpretador.
7802
- * @param nomeArquivo Nome do arquivo
7803
- * @param semente Uma semente de dispersão, padrão: 0
7804
- * @returns Texto com o hash correspondente ao nome do arquivo
7804
+ * @param {string} nomeArquivo Nome do arquivo
7805
+ * @param {number} semente Uma semente de dispersão, padrão: 0
7806
+ * @returns {number} Número inteiro com o hash correspondente ao nome do arquivo
7805
7807
  */
7806
7808
  function cyrb53(nomeArquivo, semente = 0) {
7807
7809
  let h1 = 0xdeadbeef ^ semente, h2 = 0x41c6ce57 ^ semente;
@@ -9514,6 +9516,7 @@ const chamavel_1 = require("./chamavel");
9514
9516
  class FuncaoPadrao extends chamavel_1.Chamavel {
9515
9517
  constructor(valorAridade, funcao) {
9516
9518
  super();
9519
+ this.descartarPrimeiroArgumento = true;
9517
9520
  this.valorAridade = valorAridade;
9518
9521
  this.funcao = funcao;
9519
9522
  }
@@ -14059,6 +14062,7 @@ class Lexador {
14059
14062
  }
14060
14063
  if (this.performance) {
14061
14064
  const deltaMapeamento = (0, browser_process_hrtime_1.default)(inicioMapeamento);
14065
+ // eslint-disable-next-line no-undef
14062
14066
  console.log(`[Lexador] Tempo para mapeamento: ${deltaMapeamento[0] * 1e9 + deltaMapeamento[1]}ns`);
14063
14067
  }
14064
14068
  return {
@@ -14321,6 +14325,7 @@ exports.palavrasReservadas = {
14321
14325
  nulo: delegua_1.default.NULO,
14322
14326
  ou: delegua_1.default.OU,
14323
14327
  padrao: delegua_1.default.PADRAO,
14328
+ padrão: delegua_1.default.PADRAO,
14324
14329
  para: delegua_1.default.PARA,
14325
14330
  pausa: delegua_1.default.PAUSA,
14326
14331
  pegue: delegua_1.default.PEGUE,