@designliquido/delegua 1.18.0 → 1.18.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 (37) hide show
  1. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  2. package/analisador-semantico/analisador-semantico.js +43 -6
  3. package/analisador-semantico/analisador-semantico.js.map +1 -1
  4. package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
  5. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +38 -12
  6. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  7. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  8. package/avaliador-sintatico/avaliador-sintatico.js +19 -2
  9. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  10. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +1 -1
  11. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  12. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +8 -8
  13. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  14. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +1 -1
  15. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
  16. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +19 -19
  17. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
  18. package/bin/package.json +2 -2
  19. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +2 -2
  20. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  21. package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
  22. package/interpretador/dialetos/pitugues/comum.js +78 -158
  23. package/interpretador/dialetos/pitugues/comum.js.map +1 -1
  24. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +1 -0
  25. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
  26. package/interpretador/dialetos/pitugues/interpretador-pitugues.js +9 -0
  27. package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
  28. package/package.json +2 -2
  29. package/tradutores/tradutor-assembly-risc-v.d.ts +3 -2
  30. package/tradutores/tradutor-assembly-risc-v.d.ts.map +1 -1
  31. package/tradutores/tradutor-assembly-risc-v.js +18 -5
  32. package/tradutores/tradutor-assembly-risc-v.js.map +1 -1
  33. package/tradutores/tradutor-assemblyscript.d.ts +3 -2
  34. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  35. package/tradutores/tradutor-assemblyscript.js +13 -4
  36. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  37. package/umd/delegua.js +102 -26
package/umd/delegua.js CHANGED
@@ -822,6 +822,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
822
822
  visitarDeclaracaoEscolha(declaracao) {
823
823
  const identificadorOuLiteral = declaracao.identificadorOuLiteral;
824
824
  const tipo = identificadorOuLiteral.tipo || 'qualquer';
825
+ const tiposLiteraisCasos = [];
825
826
  for (let caminho of declaracao.caminhos) {
826
827
  for (let condicao of caminho.condicoes) {
827
828
  switch (condicao.constructor) {
@@ -830,7 +831,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
830
831
  const tiposNumericos = ['inteiro', 'número', 'real'];
831
832
  const ambosSaoNumericos = tiposNumericos.includes(condicaoLiteral.tipo) &&
832
833
  tiposNumericos.includes(tipo);
833
- if (condicaoLiteral.tipo !== tipo && !ambosSaoNumericos) {
834
+ if (condicaoLiteral.tipo !== tipo && !ambosSaoNumericos && tipo !== 'qualquer') {
834
835
  this.erro({
835
836
  lexema: condicaoLiteral.valor,
836
837
  tipo: condicaoLiteral.tipo,
@@ -838,6 +839,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
838
839
  hashArquivo: condicaoLiteral.hashArquivo,
839
840
  }, `'caso ${condicaoLiteral.valor}:' não é do mesmo tipo esperado em 'escolha' (esperado: ${tipo}, atual: ${condicaoLiteral.tipo}).`);
840
841
  }
842
+ tiposLiteraisCasos.push(condicaoLiteral.tipo);
841
843
  break;
842
844
  case construtos_1.Variavel:
843
845
  const condicaoVariavel = condicao;
@@ -850,6 +852,23 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
850
852
  }
851
853
  }
852
854
  }
855
+ if (tipo === 'qualquer' && tiposLiteraisCasos.length > 0 && identificadorOuLiteral instanceof construtos_1.Variavel) {
856
+ const tiposUnicos = [...new Set(tiposLiteraisCasos)];
857
+ if (tiposUnicos.length === 1) {
858
+ const tipoInferido = tiposUnicos[0];
859
+ const variavelEscopo = this.gerenciadorEscopos.buscar(identificadorOuLiteral.simbolo.lexema);
860
+ if (variavelEscopo) {
861
+ this.sugestao(identificadorOuLiteral.simbolo, `Um tipo melhor pode ser inferido para '${identificadorOuLiteral.simbolo.lexema}': '${tipoInferido}'`, [{
862
+ titulo: `Alterar tipo de '${identificadorOuLiteral.simbolo.lexema}' para '${tipoInferido}'`,
863
+ textoOriginal: 'qualquer',
864
+ textoSubstituto: tipoInferido,
865
+ linha: variavelEscopo.linha,
866
+ colunaInicio: 0,
867
+ colunaFim: 0,
868
+ }]);
869
+ }
870
+ }
871
+ }
853
872
  return Promise.resolve();
854
873
  }
855
874
  async visitarDeclaracaoEnquanto(declaracao) {
@@ -1194,9 +1213,12 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1194
1213
  ];
1195
1214
  // Classes/construtores geralmente começam com letra maiúscula
1196
1215
  const pareceSerClasse = nomeFuncao[0] === nomeFuncao[0].toUpperCase();
1216
+ if (pareceSerClasse) {
1217
+ this.gerenciadorEscopos.marcarComoUsada(nomeFuncao);
1218
+ break;
1219
+ }
1197
1220
  // Só verifica se a função existe se não for embutidas e não parecer ser classe
1198
1221
  if (!funcoesEmbutidas.includes(nomeFuncao) &&
1199
- !pareceSerClasse &&
1200
1222
  !this.funcoes[nomeFuncao] &&
1201
1223
  !this.gerenciadorEscopos.buscar(nomeFuncao)) {
1202
1224
  this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${nomeFuncao}' não existe.`);
@@ -1274,7 +1296,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1274
1296
  this.erro(argumento.simbolo, `Variável ou função '${argumento.simbolo.lexema}' não existe.`);
1275
1297
  continue;
1276
1298
  }
1277
- if (possivelVariavel && possivelVariavel.valor === undefined) {
1299
+ if (possivelVariavel && !possivelVariavel.inicializada) {
1278
1300
  this.aviso(argumento.simbolo, `Variável '${argumento.simbolo.lexema}' não foi inicializada.`);
1279
1301
  }
1280
1302
  }
@@ -1508,6 +1530,9 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1508
1530
  this.gerenciadorEscopos.marcarComoUsada(tipoBase);
1509
1531
  }
1510
1532
  for (const metodo of declaracao.metodos) {
1533
+ const tipoRetorno = metodo.funcao.tipo?.replace('[]', '');
1534
+ if (tipoRetorno)
1535
+ this.gerenciadorEscopos.marcarComoUsada(tipoRetorno);
1511
1536
  for (const parametro of metodo.funcao.parametros) {
1512
1537
  const tipoBase = parametro.tipoDado?.replace('[]', '');
1513
1538
  if (tipoBase)
@@ -1523,6 +1548,12 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1523
1548
  for (const metodo of declaracao.metodos) {
1524
1549
  if (metodo.abstrato)
1525
1550
  continue;
1551
+ const tipoRetornoMetodo = metodo.funcao.tipo;
1552
+ if (tipoRetornoMetodo &&
1553
+ !['vazio', 'qualquer'].includes(tipoRetornoMetodo) &&
1554
+ metodo.funcao.corpo.length === 0) {
1555
+ this.aviso(metodo.simbolo, `Método especifica tipo de retorno '${tipoRetornoMetodo}', mas não há qualquer retorno correspondente no corpo do método.`);
1556
+ }
1526
1557
  for (const stmt of metodo.funcao.corpo) {
1527
1558
  await stmt.aceitar(this);
1528
1559
  }
@@ -1539,10 +1570,16 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1539
1570
  }
1540
1571
  let tipoRetornoFuncao = declaracao.funcao.tipo;
1541
1572
  if (tipoRetornoFuncao) {
1573
+ this.gerenciadorEscopos.marcarComoUsada(tipoRetornoFuncao);
1542
1574
  if (!['vazio', 'qualquer'].includes(tipoRetornoFuncao)) {
1543
- const todosOsCaminhosRetornam = this.todosOsCaminhosRetornam(declaracao.funcao.corpo);
1544
- if (!todosOsCaminhosRetornam) {
1545
- this.erro(declaracao.simbolo, `Função '${declaracao.simbolo.lexema}' deve retornar '${tipoRetornoFuncao}' em todos os caminhos de execução.`);
1575
+ if (declaracao.funcao.corpo.length === 0) {
1576
+ this.aviso(declaracao.simbolo, `Método especifica tipo de retorno '${tipoRetornoFuncao}', mas não há qualquer retorno correspondente no corpo do método.`);
1577
+ }
1578
+ else {
1579
+ const todosOsCaminhosRetornam = this.todosOsCaminhosRetornam(declaracao.funcao.corpo);
1580
+ if (!todosOsCaminhosRetornam) {
1581
+ this.erro(declaracao.simbolo, `Função '${declaracao.simbolo.lexema}' deve retornar '${tipoRetornoFuncao}' em todos os caminhos de execução.`);
1582
+ }
1546
1583
  }
1547
1584
  }
1548
1585
  let retornos = [];
@@ -3805,9 +3842,26 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3805
3842
  // Isso ocorre quando a importação é feita de uma biblioteca Node.js.
3806
3843
  // Nesse caso, o tipo de `entidadeChamada.objeto` começa com uma letra maiúscula.
3807
3844
  if (entidadeChamada.objeto.tipo && entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
3808
- const tipoCorrespondente = this.tiposDefinidosPorBibliotecas[entidadeChamada.objeto.tipo];
3845
+ const tipoObjeto = entidadeChamada.objeto.tipo;
3846
+ // Classe definida em código (local ou importada de arquivo .delegua) tem precedência.
3847
+ if (tipoObjeto in this.tiposDefinidosEmCodigo) {
3848
+ const classeDefinida = this.tiposDefinidosEmCodigo[tipoObjeto];
3849
+ if (classeDefinida instanceof declaracoes_1.Classe) {
3850
+ const nomeMembro = entidadeChamada.simbolo.lexema;
3851
+ const metodo = classeDefinida.metodos?.find(m => m.simbolo.lexema === nomeMembro);
3852
+ if (metodo) {
3853
+ return metodo.tipo || 'qualquer';
3854
+ }
3855
+ const propriedade = classeDefinida.propriedades?.find(p => p.nome.lexema === nomeMembro);
3856
+ if (propriedade) {
3857
+ return propriedade.tipo || 'qualquer';
3858
+ }
3859
+ return 'qualquer';
3860
+ }
3861
+ }
3862
+ const tipoCorrespondente = this.tiposDefinidosPorBibliotecas[tipoObjeto];
3809
3863
  if (!tipoCorrespondente) {
3810
- throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${entidadeChamada.objeto.tipo}' não foi encontrado entre os tipos definidos por bibliotecas.`);
3864
+ throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${tipoObjeto}' não foi encontrado entre os tipos definidos por bibliotecas.`);
3811
3865
  }
3812
3866
  if (!(entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) &&
3813
3867
  !(entidadeChamada.simbolo.lexema in tipoCorrespondente.propriedades)) {
@@ -5312,7 +5366,7 @@ class AvaliadorSintaticoEguaClassico {
5312
5366
  if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NULO))
5313
5367
  return new construtos_1.Literal(this.hashArquivo, 0, null);
5314
5368
  if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.ISTO))
5315
- return new construtos_1.Isto(this.hashArquivo, Number(this.simboloAnterior()));
5369
+ return new construtos_1.Isto(this.hashArquivo, Number(this.simboloAnterior().linha), this.simboloAnterior());
5316
5370
  if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NUMERO, egua_classico_1.default.TEXTO)) {
5317
5371
  return new construtos_1.Literal(this.hashArquivo, 0, this.simboloAnterior().literal);
5318
5372
  }
@@ -7396,7 +7450,7 @@ class AvaliadorSintaticoPitugues {
7396
7450
  this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
7397
7451
  // Funções nativas de Delégua (e de Pituguês também, por enquanto)
7398
7452
  this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio', 'número'));
7399
- this.pilhaEscopos.definirInformacoesVariavel('aleatorioEntre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorioEntre', 'número', true, [
7453
+ this.pilhaEscopos.definirInformacoesVariavel('aleatorio_entre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio_entre', 'número', true, [
7400
7454
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
7401
7455
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
7402
7456
  ]));
@@ -7412,19 +7466,19 @@ class AvaliadorSintaticoPitugues {
7412
7466
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
7413
7467
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
7414
7468
  ]));
7415
- this.pilhaEscopos.definirInformacoesVariavel('encontrarIndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarIndice', 'inteiro', true, [
7469
+ this.pilhaEscopos.definirInformacoesVariavel('encontrar_indice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_indice', 'inteiro', true, [
7416
7470
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
7417
7471
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
7418
7472
  ]));
7419
- this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarUltimo', 'inteiro', true, [
7473
+ this.pilhaEscopos.definirInformacoesVariavel('encontrar_ultimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_ultimo', 'inteiro', true, [
7420
7474
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
7421
7475
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
7422
7476
  ]));
7423
- this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimoIndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarUltimoIndice', 'inteiro', true, [
7477
+ this.pilhaEscopos.definirInformacoesVariavel('encontrar_ultimo_indice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_ultimo_indice', 'inteiro', true, [
7424
7478
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
7425
7479
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
7426
7480
  ]));
7427
- this.pilhaEscopos.definirInformacoesVariavel('filtrarPor', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('filtrarPor', 'qualquer[]', true, [
7481
+ this.pilhaEscopos.definirInformacoesVariavel('filtrar_por', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('filtrar_por', 'qualquer[]', true, [
7428
7482
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
7429
7483
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
7430
7484
  ]));
@@ -7463,11 +7517,11 @@ class AvaliadorSintaticoPitugues {
7463
7517
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
7464
7518
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoOrdenacao', 'função'),
7465
7519
  ]));
7466
- this.pilhaEscopos.definirInformacoesVariavel('paraCada', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('paraCada', 'qualquer[]', true, [
7520
+ this.pilhaEscopos.definirInformacoesVariavel('para_cada', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('para_cada', 'qualquer[]', true, [
7467
7521
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
7468
7522
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
7469
7523
  ]));
7470
- this.pilhaEscopos.definirInformacoesVariavel('primeiroEmCondicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('primeiroEmCondicao', 'qualquer', true, [
7524
+ this.pilhaEscopos.definirInformacoesVariavel('primeiro_em_condicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('primeiro_em_condicao', 'qualquer', true, [
7471
7525
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
7472
7526
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
7473
7527
  ]));
@@ -7494,7 +7548,7 @@ class AvaliadorSintaticoPitugues {
7494
7548
  this.pilhaEscopos.definirInformacoesVariavel('todos', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos', 'lógico', true, [
7495
7549
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
7496
7550
  ]));
7497
- this.pilhaEscopos.definirInformacoesVariavel('todosEmCondicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todosEmCondicao', 'lógico', true, [
7551
+ this.pilhaEscopos.definirInformacoesVariavel('todos_em_condicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos_em_condicao', 'lógico', true, [
7498
7552
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
7499
7553
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoCondicional', 'função'),
7500
7554
  ]));
@@ -43392,7 +43446,12 @@ ${labelFuncao}:
43392
43446
  }
43393
43447
  traduzirConstrutoLiteral(construto) {
43394
43448
  if (typeof construto.valor === 'string') {
43395
- return this.criaStringLiteral(construto);
43449
+ return this.criarStringLiteral(construto);
43450
+ }
43451
+ if (typeof construto.valor === 'number' &&
43452
+ Number.isFinite(construto.valor) &&
43453
+ !Number.isInteger(construto.valor)) {
43454
+ return this.criarLiteralPontoFlutuante(construto.valor);
43396
43455
  }
43397
43456
  return String(construto.valor);
43398
43457
  }
@@ -43524,7 +43583,10 @@ ${labelProximo}:`;
43524
43583
  traduzirDeclaracaoExpressao(declaracao) {
43525
43584
  if (declaracao.expressao &&
43526
43585
  this.dicionarioConstrutos[declaracao.expressao.constructor.name]) {
43527
- this.dicionarioConstrutos[declaracao.expressao.constructor.name](declaracao.expressao);
43586
+ const resultado = this.dicionarioConstrutos[declaracao.expressao.constructor.name](declaracao.expressao);
43587
+ if (typeof resultado === 'string' && resultado && resultado !== 'a0') {
43588
+ this.emitirCarga('a0', resultado);
43589
+ }
43528
43590
  }
43529
43591
  }
43530
43592
  traduzirDeclaracaoFazer(declaracao) {
@@ -43738,19 +43800,24 @@ ${labelSenao}:`;
43738
43800
  }
43739
43801
  }
43740
43802
  }
43741
- criaStringLiteral(literal) {
43803
+ criarStringLiteral(literal) {
43742
43804
  const varLiteral = `Delegua_${this.gerarDigitoAleatorio()}`;
43743
43805
  this.data += ` ${varLiteral}: .asciz "${literal.valor}"\n`;
43744
43806
  return varLiteral;
43745
43807
  }
43746
- criaTamanhoNaMemoriaReferenteAVar(nomeStringLiteral) {
43808
+ criarLiteralPontoFlutuante(valor) {
43809
+ const varLiteral = `Delegua_${this.gerarDigitoAleatorio()}`;
43810
+ this.data += ` ${varLiteral}: .double ${valor}\n`;
43811
+ return varLiteral;
43812
+ }
43813
+ criarTamanhoNaMemoriaReferenteAVar(nomeStringLiteral) {
43747
43814
  return `tam_${nomeStringLiteral}`;
43748
43815
  }
43749
43816
  traduzirDeclaracaoEscreva(declaracaoEscreva) {
43750
43817
  let nomeStringLiteral = '';
43751
43818
  let tamanhoString = '';
43752
43819
  if (declaracaoEscreva.argumentos[0] instanceof construtos_1.Literal) {
43753
- nomeStringLiteral = this.criaStringLiteral(declaracaoEscreva.argumentos[0]);
43820
+ nomeStringLiteral = this.criarStringLiteral(declaracaoEscreva.argumentos[0]);
43754
43821
  const stringValue = declaracaoEscreva.argumentos[0].valor;
43755
43822
  tamanhoString = String(stringValue.length);
43756
43823
  }
@@ -44572,7 +44639,7 @@ class TradutorAssemblyScript {
44572
44639
  this.dicionarioConstrutos = {
44573
44640
  AcessoIndiceVariavel: this.traduzirConstrutoAcessoIndiceVariavel.bind(this),
44574
44641
  AcessoMetodo: this.traduzirConstrutoAcessoMetodo.bind(this),
44575
- AcessoMetodoOuPropriedade: this.traduzirConstrutoAcessoMetodo.bind(this),
44642
+ AcessoMetodoOuPropriedade: this.traduzirConstrutoAcessoMetodoOuPropriedade.bind(this),
44576
44643
  AcessoPropriedade: this.traduzirConstrutoAcessoPropriedade.bind(this),
44577
44644
  Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
44578
44645
  ArgumentoReferenciaFuncao: this.traduzirConstrutoArgumentoReferenciaFuncao.bind(this),
@@ -44775,7 +44842,7 @@ class TradutorAssemblyScript {
44775
44842
  case 'aleatorio':
44776
44843
  return `Math.random()`;
44777
44844
  case 'aleatorioEntre':
44778
- case 'aleatorioente':
44845
+ case 'aleatorioentre':
44779
44846
  if (argumentos.length >= 2) {
44780
44847
  return `(Math.random() * (${argumentos[1]} - ${argumentos[0]}) + ${argumentos[0]})`;
44781
44848
  }
@@ -45673,11 +45740,20 @@ class TradutorAssemblyScript {
45673
45740
  return resultado;
45674
45741
  }
45675
45742
  traduzirConstrutoAcessoMetodo(acessoMetodo) {
45743
+ const nomeMetodo = acessoMetodo.nomeMetodo;
45676
45744
  if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
45677
45745
  let objetoVariavel = acessoMetodo.objeto;
45678
- return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(acessoMetodo.simbolo.lexema)}`;
45746
+ return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(nomeMetodo)}`;
45679
45747
  }
45680
- return `this.${acessoMetodo.simbolo.lexema}`;
45748
+ return `this.${nomeMetodo}`;
45749
+ }
45750
+ traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodoOuPropriedade) {
45751
+ const nomeMetodo = acessoMetodoOuPropriedade.simbolo?.lexema;
45752
+ if (acessoMetodoOuPropriedade.objeto instanceof construtos_1.Variavel) {
45753
+ let objetoVariavel = acessoMetodoOuPropriedade.objeto;
45754
+ return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(nomeMetodo)}`;
45755
+ }
45756
+ return `this.${nomeMetodo}`;
45681
45757
  }
45682
45758
  traduzirConstrutoAcessoIndiceVariavel(acessoIndiceVariavel) {
45683
45759
  let resultado = '';