@designliquido/delegua 0.49.1 → 0.49.2

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 (25) hide show
  1. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  2. package/avaliador-sintatico/avaliador-sintatico.js +3 -2
  3. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  4. package/bibliotecas/biblioteca-global.d.ts.map +1 -1
  5. package/bibliotecas/biblioteca-global.js +167 -44
  6. package/bibliotecas/biblioteca-global.js.map +1 -1
  7. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  8. package/bibliotecas/primitivas-vetor.js +3 -0
  9. package/bibliotecas/primitivas-vetor.js.map +1 -1
  10. package/bin/package.json +1 -1
  11. package/interfaces/interpretador-interface.d.ts +2 -0
  12. package/interfaces/interpretador-interface.d.ts.map +1 -1
  13. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +2 -0
  14. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
  15. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  16. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +2 -0
  17. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
  18. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  19. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +2 -0
  20. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
  21. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  22. package/interpretador/interpretador.d.ts.map +1 -1
  23. package/interpretador/interpretador.js.map +1 -1
  24. package/package.json +1 -1
  25. package/umd/delegua.js +173 -46
package/umd/delegua.js CHANGED
@@ -660,7 +660,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
660
660
  continue;
661
661
  }
662
662
  const tipoArgumentoUtilizado = argumentoUtilizado.tipo.startsWith('funcao') ||
663
- argumentoUtilizado.tipo.startsWith('função')
663
+ argumentoUtilizado.tipo.startsWith('função') ||
664
+ argumentoUtilizado instanceof construtos_1.FuncaoConstruto
664
665
  ? 'função'
665
666
  : argumentoUtilizado.tipo;
666
667
  const tipoArgumentoEntidadeChamada = argumentoEntidadeChamada.tipo.startsWith('funcao') ||
@@ -1680,7 +1681,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1680
1681
  throw this.erro(retornosNaoVazios[0].simboloChave, `Função declara explicitamente 'vazio', mas usa expressão 'retorna' com tipo de retorno diferente de vazio.`);
1681
1682
  }
1682
1683
  }
1683
- const tiposRetornos = new Set(expressoesRetorna.map((e) => e.tipo));
1684
+ const tiposRetornos = new Set(expressoesRetorna.filter((e) => e.tipo !== 'qualquer').map((e) => e.tipo));
1684
1685
  let retornaChamadoExplicitamente = tiposRetornos.size > 0;
1685
1686
  if (tiposRetornos.size > 1 && tipoRetorno !== 'qualquer') {
1686
1687
  let tiposEncontrados = Array.from(tiposRetornos).reduce((acumulador, valor) => (acumulador += valor + ', '), '');
@@ -5326,25 +5327,37 @@ async function aleatorio(interpretador) {
5326
5327
  */
5327
5328
  async function aleatorioEntre(interpretador, minimo, maximo) {
5328
5329
  if (arguments.length <= 0) {
5329
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'A função recebe ao menos um parâmetro.'));
5330
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5331
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5332
+ linha: interpretador.linhaDeclaracaoAtual
5333
+ }, 'A função recebe ao menos um parâmetro.'));
5330
5334
  }
5331
5335
  const valorMinimo = minimo.hasOwnProperty('valor')
5332
5336
  ? minimo.valor
5333
5337
  : minimo;
5334
5338
  if (arguments.length === 2) {
5335
5339
  if (typeof valorMinimo !== 'number') {
5336
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'O parâmetro deve ser um número.'));
5340
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5341
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5342
+ linha: interpretador.linhaDeclaracaoAtual
5343
+ }, 'O parâmetro deve ser um número.'));
5337
5344
  }
5338
5345
  return Math.floor(Math.random() * (0 - valorMinimo)) + valorMinimo;
5339
5346
  }
5340
5347
  if (arguments.length > 3) {
5341
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'A quantidade de parâmetros máxima para esta função é 2.'));
5348
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5349
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5350
+ linha: interpretador.linhaDeclaracaoAtual
5351
+ }, 'A quantidade de parâmetros máxima para esta função é 2.'));
5342
5352
  }
5343
5353
  const valorMaximo = maximo.hasOwnProperty('valor')
5344
5354
  ? maximo.valor
5345
5355
  : maximo;
5346
5356
  if (typeof valorMinimo !== 'number' || typeof valorMaximo !== 'number') {
5347
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Os dois parâmetros devem ser do tipo número.'));
5357
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5358
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5359
+ linha: interpretador.linhaDeclaracaoAtual
5360
+ }, 'Os dois parâmetros devem ser do tipo número.'));
5348
5361
  }
5349
5362
  return Promise.resolve(Math.floor(Math.random() * (valorMaximo - valorMinimo)) + valorMinimo);
5350
5363
  }
@@ -5361,10 +5374,16 @@ async function algum(interpretador, vetor, funcaoPesquisa) {
5361
5374
  ? funcaoPesquisa.valor
5362
5375
  : funcaoPesquisa;
5363
5376
  if (!Array.isArray(valorVetor)) {
5364
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5377
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5378
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5379
+ linha: interpretador.linhaDeclaracaoAtual
5380
+ }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5365
5381
  }
5366
5382
  if (valorFuncaoPesquisa.constructor.name !== 'DeleguaFuncao') {
5367
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5383
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5384
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5385
+ linha: interpretador.linhaDeclaracaoAtual
5386
+ }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5368
5387
  }
5369
5388
  for (let indice = 0; indice < valorVetor.length; ++indice) {
5370
5389
  if (await valorFuncaoPesquisa.chamar(interpretador, [valorVetor[indice]])) {
@@ -5387,10 +5406,16 @@ async function encontrar(interpretador, vetor, funcaoPesquisa) {
5387
5406
  ? funcaoPesquisa.valor
5388
5407
  : funcaoPesquisa;
5389
5408
  if (!Array.isArray(valorVetor)) {
5390
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5409
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5410
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5411
+ linha: interpretador.linhaDeclaracaoAtual
5412
+ }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5391
5413
  }
5392
5414
  if (valorFuncaoPesquisa.constructor.name !== 'DeleguaFuncao') {
5393
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5415
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5416
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5417
+ linha: interpretador.linhaDeclaracaoAtual
5418
+ }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5394
5419
  }
5395
5420
  for (let indice = 0; indice < valorVetor.length; ++indice) {
5396
5421
  if (await valorFuncaoPesquisa.chamar(interpretador, [valorVetor[indice]])) {
@@ -5413,10 +5438,16 @@ async function encontrarIndice(interpretador, vetor, funcaoPesquisa) {
5413
5438
  ? funcaoPesquisa.valor
5414
5439
  : funcaoPesquisa;
5415
5440
  if (!Array.isArray(valorVetor)) {
5416
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5441
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5442
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5443
+ linha: interpretador.linhaDeclaracaoAtual
5444
+ }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5417
5445
  }
5418
5446
  if (valorFuncaoPesquisa.constructor.name !== 'DeleguaFuncao') {
5419
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5447
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5448
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5449
+ linha: interpretador.linhaDeclaracaoAtual
5450
+ }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5420
5451
  }
5421
5452
  for (let indice = 0; indice < valorVetor.length; ++indice) {
5422
5453
  if (await valorFuncaoPesquisa.chamar(interpretador, [valorVetor[indice]])) {
@@ -5439,10 +5470,16 @@ async function encontrarUltimo(interpretador, vetor, funcaoPesquisa) {
5439
5470
  ? funcaoPesquisa.valor
5440
5471
  : funcaoPesquisa;
5441
5472
  if (!Array.isArray(valorVetor)) {
5442
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5473
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5474
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5475
+ linha: interpretador.linhaDeclaracaoAtual
5476
+ }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5443
5477
  }
5444
5478
  if (valorFuncaoPesquisa.constructor.name !== 'DeleguaFuncao') {
5445
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5479
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5480
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5481
+ linha: interpretador.linhaDeclaracaoAtual
5482
+ }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5446
5483
  }
5447
5484
  for (let indice = valorVetor.length - 1; indice >= 0; --indice) {
5448
5485
  if (await valorFuncaoPesquisa.chamar(interpretador, [valorVetor[indice]])) {
@@ -5464,10 +5501,16 @@ async function encontrarUltimoIndice(interpretador, vetor, funcaoPesquisa) {
5464
5501
  ? funcaoPesquisa.valor
5465
5502
  : funcaoPesquisa;
5466
5503
  if (!Array.isArray(valorVetor)) {
5467
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5504
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5505
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5506
+ linha: interpretador.linhaDeclaracaoAtual
5507
+ }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5468
5508
  }
5469
5509
  if (valorFuncaoPesquisa.constructor.name !== 'DeleguaFuncao') {
5470
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5510
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5511
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5512
+ linha: interpretador.linhaDeclaracaoAtual
5513
+ }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5471
5514
  }
5472
5515
  for (let indice = valorVetor.length - 1; indice >= 0; --indice) {
5473
5516
  if (await valorFuncaoPesquisa.chamar(interpretador, [valorVetor[indice]])) {
@@ -5485,17 +5528,26 @@ async function encontrarUltimoIndice(interpretador, vetor, funcaoPesquisa) {
5485
5528
  */
5486
5529
  async function filtrarPor(interpretador, vetor, funcaoFiltragem) {
5487
5530
  if (vetor === null || vetor === undefined)
5488
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função filtrarPor() não pode ser nulo.'));
5531
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5532
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5533
+ linha: interpretador.linhaDeclaracaoAtual
5534
+ }, 'Parâmetro inválido. O primeiro parâmetro da função filtrarPor() não pode ser nulo.'));
5489
5535
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
5490
5536
  const valorFuncaoFiltragem = funcaoFiltragem.hasOwnProperty('valor')
5491
5537
  ? funcaoFiltragem.valor
5492
5538
  : funcaoFiltragem;
5493
5539
  if (!Array.isArray(valorVetor)) {
5494
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função filtrarPor() deve ser um vetor.'));
5540
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5541
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5542
+ linha: interpretador.linhaDeclaracaoAtual
5543
+ }, 'Parâmetro inválido. O primeiro parâmetro da função filtrarPor() deve ser um vetor.'));
5495
5544
  }
5496
5545
  const construtorResolvido = valorFuncaoFiltragem.constructor.name.replaceAll('_', '');
5497
5546
  if (construtorResolvido !== 'DeleguaFuncao') {
5498
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função filtrarPor() deve ser uma função.'));
5547
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5548
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5549
+ linha: interpretador.linhaDeclaracaoAtual
5550
+ }, 'Parâmetro inválido. O segundo parâmetro da função filtrarPor() deve ser uma função.'));
5499
5551
  }
5500
5552
  const resultados = [];
5501
5553
  for (let indice = 0; indice < valorVetor.length; ++indice) {
@@ -5519,7 +5571,10 @@ async function incluido(interpretador, vetor, valor) {
5519
5571
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
5520
5572
  const valorValor = valor.hasOwnProperty('valor') ? valor.valor : valor;
5521
5573
  if (!Array.isArray(valorVetor)) {
5522
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5574
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5575
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5576
+ linha: interpretador.linhaDeclaracaoAtual
5577
+ }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5523
5578
  }
5524
5579
  for (let indice = 0; indice < valorVetor.length; ++indice) {
5525
5580
  if (valorVetor[indice] == valorValor) {
@@ -5528,12 +5583,18 @@ async function incluido(interpretador, vetor, valor) {
5528
5583
  }
5529
5584
  return false;
5530
5585
  }
5531
- function validacaoComumNumeros(valorParaConverter) {
5586
+ function validacaoComumNumeros(interpretador, valorParaConverter) {
5532
5587
  if (isNaN(valorParaConverter)) {
5533
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Valor não parece ser um número. Somente números ou textos com números podem ser convertidos para inteiro.'));
5588
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5589
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5590
+ linha: interpretador.linhaDeclaracaoAtual
5591
+ }, 'Valor não parece ser um número. Somente números ou textos com números podem ser convertidos para inteiro.'));
5534
5592
  }
5535
5593
  if (!/^(-)?\d+(\.\d+)?$/.test(valorParaConverter)) {
5536
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Valor não parece estar estruturado como um número (texto vazio, falso ou não definido). Somente números ou textos com números podem ser convertidos para inteiro.'));
5594
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5595
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5596
+ linha: interpretador.linhaDeclaracaoAtual
5597
+ }, 'Valor não parece estar estruturado como um número (texto vazio, falso ou não definido). Somente números ou textos com números podem ser convertidos para inteiro.'));
5537
5598
  }
5538
5599
  return null;
5539
5600
  }
@@ -5549,7 +5610,7 @@ async function inteiro(interpretador, valorParaConverter) {
5549
5610
  const valor = valorParaConverter.hasOwnProperty('valor')
5550
5611
  ? valorParaConverter.valor
5551
5612
  : valorParaConverter;
5552
- const resultadoValidacao = validacaoComumNumeros(valor);
5613
+ const resultadoValidacao = validacaoComumNumeros(interpretador, valor);
5553
5614
  return resultadoValidacao || Promise.resolve(parseInt(valor));
5554
5615
  }
5555
5616
  /**
@@ -5562,7 +5623,10 @@ async function inteiro(interpretador, valorParaConverter) {
5562
5623
  */
5563
5624
  async function mapear(interpretador, vetor, funcaoMapeamento) {
5564
5625
  if (vetor === null || vetor === undefined)
5565
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função mapear() não pode ser nulo.'));
5626
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5627
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5628
+ linha: interpretador.linhaDeclaracaoAtual
5629
+ }, 'Parâmetro inválido. O primeiro parâmetro da função mapear() não pode ser nulo.'));
5566
5630
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
5567
5631
  const valorFuncaoMapeamento = funcaoMapeamento.hasOwnProperty('valor')
5568
5632
  ? funcaoMapeamento.valor
@@ -5570,11 +5634,17 @@ async function mapear(interpretador, vetor, funcaoMapeamento) {
5570
5634
  // TODO: As lógicas de validação abaixo deixam de fazer sentido com a validação de argumentos feita
5571
5635
  // na avaliação sintática. Estudar remoção.
5572
5636
  if (!Array.isArray(valorVetor)) {
5573
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função mapear() deve ser um vetor.'));
5637
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5638
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5639
+ linha: interpretador.linhaDeclaracaoAtual
5640
+ }, 'Parâmetro inválido. O primeiro parâmetro da função mapear() deve ser um vetor.'));
5574
5641
  }
5575
5642
  const nomeConstrutorFuncaoMapeamento = valorFuncaoMapeamento.constructor.name.replaceAll('_', '');
5576
5643
  if (nomeConstrutorFuncaoMapeamento !== 'DeleguaFuncao') {
5577
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função mapear() deve ser uma função.'));
5644
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5645
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5646
+ linha: interpretador.linhaDeclaracaoAtual
5647
+ }, 'Parâmetro inválido. O segundo parâmetro da função mapear() deve ser uma função.'));
5578
5648
  }
5579
5649
  const resultados = [];
5580
5650
  for (let indice = 0; indice < valorVetor.length; ++indice) {
@@ -5594,7 +5664,7 @@ async function numero(interpretador, valorParaConverter) {
5594
5664
  const valor = valorParaConverter.hasOwnProperty('valor')
5595
5665
  ? valorParaConverter.valor
5596
5666
  : valorParaConverter;
5597
- const resultadoValidacao = validacaoComumNumeros(valor);
5667
+ const resultadoValidacao = validacaoComumNumeros(interpretador, valor);
5598
5668
  return resultadoValidacao || Promise.resolve(Number(valor));
5599
5669
  }
5600
5670
  /**
@@ -5604,10 +5674,16 @@ async function numero(interpretador, valorParaConverter) {
5604
5674
  */
5605
5675
  async function ordenar(interpretador, vetor) {
5606
5676
  if (vetor === null || vetor === undefined)
5607
- throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função ordenar() não pode ser nulo.');
5677
+ throw new excecoes_1.ErroEmTempoDeExecucao({
5678
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5679
+ linha: interpretador.linhaDeclaracaoAtual
5680
+ }, 'Parâmetro inválido. O primeiro parâmetro da função ordenar() não pode ser nulo.');
5608
5681
  const objeto = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
5609
5682
  if (!Array.isArray(objeto)) {
5610
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Valor inválido. Objeto inserido não é um vetor.'));
5683
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5684
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5685
+ linha: interpretador.linhaDeclaracaoAtual
5686
+ }, 'Valor inválido. Objeto inserido não é um vetor.'));
5611
5687
  }
5612
5688
  let trocado;
5613
5689
  const tamanho = objeto.length;
@@ -5631,7 +5707,10 @@ async function ordenar(interpretador, vetor) {
5631
5707
  */
5632
5708
  async function paraCada(interpretador, vetor, funcaoFiltragem) {
5633
5709
  if (vetor === null || vetor === undefined)
5634
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função paraCada() não pode ser nulo.'));
5710
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5711
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5712
+ linha: interpretador.linhaDeclaracaoAtual
5713
+ }, 'Parâmetro inválido. O primeiro parâmetro da função paraCada() não pode ser nulo.'));
5635
5714
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
5636
5715
  const valorFuncaoFiltragem = funcaoFiltragem.hasOwnProperty('valor')
5637
5716
  ? funcaoFiltragem.valor
@@ -5639,10 +5718,16 @@ async function paraCada(interpretador, vetor, funcaoFiltragem) {
5639
5718
  // TODO: As lógicas de validação abaixo deixam de fazer sentido com a validação de argumentos feita
5640
5719
  // na avaliação sintática. Estudar remoção.
5641
5720
  if (!Array.isArray(valorVetor)) {
5642
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função paraCada() deve ser um vetor.'));
5721
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5722
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5723
+ linha: interpretador.linhaDeclaracaoAtual
5724
+ }, 'Parâmetro inválido. O primeiro parâmetro da função paraCada() deve ser um vetor.'));
5643
5725
  }
5644
5726
  if (valorFuncaoFiltragem.constructor.name !== 'DeleguaFuncao') {
5645
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função paraCada() deve ser uma função.'));
5727
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5728
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5729
+ linha: interpretador.linhaDeclaracaoAtual
5730
+ }, 'Parâmetro inválido. O segundo parâmetro da função paraCada() deve ser uma função.'));
5646
5731
  }
5647
5732
  for (let indice = 0; indice < valorVetor.length; ++indice) {
5648
5733
  await valorFuncaoFiltragem.chamar(interpretador, [valorVetor[indice]]);
@@ -5657,16 +5742,25 @@ async function paraCada(interpretador, vetor, funcaoFiltragem) {
5657
5742
  */
5658
5743
  async function primeiroEmCondicao(interpretador, vetor, funcaoFiltragem) {
5659
5744
  if (vetor === null || vetor === undefined)
5660
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função primeiroEmCondicao() não pode ser nulo.'));
5745
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5746
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5747
+ linha: interpretador.linhaDeclaracaoAtual
5748
+ }, 'Parâmetro inválido. O primeiro parâmetro da função primeiroEmCondicao() não pode ser nulo.'));
5661
5749
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
5662
5750
  const valorFuncaoFiltragem = funcaoFiltragem.hasOwnProperty('valor')
5663
5751
  ? funcaoFiltragem.valor
5664
5752
  : funcaoFiltragem;
5665
5753
  if (!Array.isArray(valorVetor)) {
5666
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função primeiroEmCondicao() deve ser um vetor.'));
5754
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5755
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5756
+ linha: interpretador.linhaDeclaracaoAtual
5757
+ }, 'Parâmetro inválido. O primeiro parâmetro da função primeiroEmCondicao() deve ser um vetor.'));
5667
5758
  }
5668
5759
  if (valorFuncaoFiltragem.constructor.name !== 'DeleguaFuncao') {
5669
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função primeiroEmCondicao() deve ser uma função.'));
5760
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5761
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5762
+ linha: interpretador.linhaDeclaracaoAtual
5763
+ }, 'Parâmetro inválido. O segundo parâmetro da função primeiroEmCondicao() deve ser uma função.'));
5670
5764
  }
5671
5765
  for (let indice = 0; indice < valorVetor.length; ++indice) {
5672
5766
  const valorResolvido = await valorFuncaoFiltragem.chamar(interpretador, [
@@ -5689,7 +5783,10 @@ async function real(interpretador, numero) {
5689
5783
  return Promise.resolve(parseFloat('0'));
5690
5784
  const valor = numero.hasOwnProperty('valor') ? numero.valor : numero;
5691
5785
  if (!/^(-)?\d+(\.\d+)?$/.test(valor)) {
5692
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Valor não parece estar estruturado como um número (texto/valor vazio, falso ou não definido). Somente números ou textos com números podem ser convertidos para real.'));
5786
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5787
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5788
+ linha: interpretador.linhaDeclaracaoAtual
5789
+ }, 'Valor não parece estar estruturado como um número (texto/valor vazio, falso ou não definido). Somente números ou textos com números podem ser convertidos para real.'));
5693
5790
  }
5694
5791
  return Promise.resolve(parseFloat(valor));
5695
5792
  }
@@ -5708,10 +5805,16 @@ async function reduzir(interpretador, vetor, funcaoReducao, valorInicial = null)
5708
5805
  : funcaoReducao;
5709
5806
  const valorPadrao = valorInicial.hasOwnProperty('valor') ? valorInicial.valor : valorInicial;
5710
5807
  if (!Array.isArray(valorVetor)) {
5711
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5808
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5809
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5810
+ linha: interpretador.linhaDeclaracaoAtual
5811
+ }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
5712
5812
  }
5713
5813
  if (valorFuncaoReducao.constructor.name !== 'DeleguaFuncao') {
5714
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5814
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5815
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5816
+ linha: interpretador.linhaDeclaracaoAtual
5817
+ }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
5715
5818
  }
5716
5819
  let resultado = valorPadrao;
5717
5820
  let inicio = 0;
@@ -5732,10 +5835,16 @@ async function reduzir(interpretador, vetor, funcaoReducao, valorInicial = null)
5732
5835
  async function tamanho(interpretador, objeto) {
5733
5836
  const valorObjeto = objeto.hasOwnProperty('valor') ? objeto.valor : objeto;
5734
5837
  if (typeof valorObjeto === 'number') {
5735
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Função global tamanho() não funciona com números.'));
5838
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5839
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5840
+ linha: interpretador.linhaDeclaracaoAtual
5841
+ }, 'Função global tamanho() não funciona com números.'));
5736
5842
  }
5737
5843
  if (valorObjeto instanceof objeto_delegua_classe_1.ObjetoDeleguaClasse) {
5738
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Função global tamanho não funciona com objetos complexos.'));
5844
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5845
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5846
+ linha: interpretador.linhaDeclaracaoAtual
5847
+ }, 'Função global tamanho não funciona com objetos complexos.'));
5739
5848
  }
5740
5849
  if (valorObjeto instanceof estruturas_1.DeleguaFuncao) {
5741
5850
  return Promise.resolve(valorObjeto.declaracao.parametros.length);
@@ -5774,16 +5883,25 @@ async function texto(interpretador, valorParaConverter) {
5774
5883
  */
5775
5884
  async function todosEmCondicao(interpretador, vetor, funcaoCondicional) {
5776
5885
  if (vetor === null || vetor === undefined)
5777
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função todosEmCondicao() não pode ser nulo.'));
5886
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5887
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5888
+ linha: interpretador.linhaDeclaracaoAtual
5889
+ }, 'Parâmetro inválido. O primeiro parâmetro da função todosEmCondicao() não pode ser nulo.'));
5778
5890
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
5779
5891
  const valorFuncaoCondicional = funcaoCondicional.hasOwnProperty('valor')
5780
5892
  ? funcaoCondicional.valor
5781
5893
  : funcaoCondicional;
5782
5894
  if (!Array.isArray(valorVetor)) {
5783
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função todosEmCondicao() deve ser um vetor.'));
5895
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5896
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5897
+ linha: interpretador.linhaDeclaracaoAtual
5898
+ }, 'Parâmetro inválido. O primeiro parâmetro da função todosEmCondicao() deve ser um vetor.'));
5784
5899
  }
5785
5900
  if (valorFuncaoCondicional.constructor.name !== 'DeleguaFuncao') {
5786
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função todosEmCondicao() deve ser uma função.'));
5901
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5902
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5903
+ linha: interpretador.linhaDeclaracaoAtual
5904
+ }, 'Parâmetro inválido. O segundo parâmetro da função todosEmCondicao() deve ser uma função.'));
5787
5905
  }
5788
5906
  for (let indice = 0; indice < valorVetor.length; ++indice) {
5789
5907
  if (!(await valorFuncaoCondicional.chamar(interpretador, [valorVetor[indice]])))
@@ -5803,7 +5921,10 @@ async function tupla(interpretador, vetor) {
5803
5921
  // TODO: As lógicas de validação abaixo deixam de fazer sentido com a validação de argumentos feita
5804
5922
  // na avaliação sintática. Estudar remoção.
5805
5923
  if (!Array.isArray(valorVetor)) {
5806
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Argumento de função nativa `tupla` não parece ser um vetor.'));
5924
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5925
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5926
+ linha: interpretador.linhaDeclaracaoAtual
5927
+ }, 'Argumento de função nativa `tupla` não parece ser um vetor.'));
5807
5928
  }
5808
5929
  switch (valorVetor.length) {
5809
5930
  case 2:
@@ -5826,7 +5947,10 @@ async function tupla(interpretador, vetor) {
5826
5947
  return Promise.resolve(new construtos_1.Deceto(valorVetor[0], valorVetor[1], valorVetor[2], valorVetor[3], valorVetor[4], valorVetor[5], valorVetor[6], valorVetor[7], valorVetor[8], valorVetor[9]));
5827
5948
  case 1:
5828
5949
  default:
5829
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Para ser transformado em uma tupla, vetor precisa ter de 2 a 10 elementos.'));
5950
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
5951
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
5952
+ linha: interpretador.linhaDeclaracaoAtual
5953
+ }, 'Para ser transformado em uma tupla, vetor precisa ter de 2 a 10 elementos.'));
5830
5954
  }
5831
5955
  }
5832
5956
 
@@ -6156,6 +6280,9 @@ exports.default = {
6156
6280
  ],
6157
6281
  implementacao: (interpretador, nomePrimitiva, vetor, elemento) => {
6158
6282
  vetor.push(elemento);
6283
+ interpretador.pilhaEscoposExecucao.atribuirVariavel({
6284
+ lexema: nomePrimitiva,
6285
+ }, vetor);
6159
6286
  return Promise.resolve(vetor);
6160
6287
  },
6161
6288
  assinaturaFormato: 'vetor.adicionar(...elemento: qualquer)',