@designliquido/delegua 1.17.2 → 1.18.1

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 (34) hide show
  1. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  2. package/analisador-semantico/analisador-semantico.js +35 -4
  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 +37 -11
  6. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  7. package/avaliador-sintatico/avaliador-sintatico.d.ts +2 -1
  8. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  9. package/avaliador-sintatico/avaliador-sintatico.js +51 -3
  10. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  11. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +1 -1
  12. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  13. package/bin/package.json +1 -1
  14. package/interpretador/comum.js +13 -0
  15. package/interpretador/comum.js.map +1 -1
  16. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +2 -2
  17. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  18. package/lexador/palavras-reservadas.d.ts.map +1 -1
  19. package/lexador/palavras-reservadas.js +2 -0
  20. package/lexador/palavras-reservadas.js.map +1 -1
  21. package/package.json +1 -1
  22. package/tipos-de-simbolos/delegua.d.ts +1 -0
  23. package/tipos-de-simbolos/delegua.d.ts.map +1 -1
  24. package/tipos-de-simbolos/delegua.js +1 -0
  25. package/tipos-de-simbolos/delegua.js.map +1 -1
  26. package/tradutores/tradutor-assembly-risc-v.d.ts +3 -2
  27. package/tradutores/tradutor-assembly-risc-v.d.ts.map +1 -1
  28. package/tradutores/tradutor-assembly-risc-v.js +18 -5
  29. package/tradutores/tradutor-assembly-risc-v.js.map +1 -1
  30. package/tradutores/tradutor-assemblyscript.d.ts +3 -2
  31. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  32. package/tradutores/tradutor-assemblyscript.js +13 -4
  33. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  34. package/umd/delegua.js +135 -18
package/umd/delegua.js CHANGED
@@ -1194,9 +1194,12 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1194
1194
  ];
1195
1195
  // Classes/construtores geralmente começam com letra maiúscula
1196
1196
  const pareceSerClasse = nomeFuncao[0] === nomeFuncao[0].toUpperCase();
1197
+ if (pareceSerClasse) {
1198
+ this.gerenciadorEscopos.marcarComoUsada(nomeFuncao);
1199
+ break;
1200
+ }
1197
1201
  // Só verifica se a função existe se não for embutidas e não parecer ser classe
1198
1202
  if (!funcoesEmbutidas.includes(nomeFuncao) &&
1199
- !pareceSerClasse &&
1200
1203
  !this.funcoes[nomeFuncao] &&
1201
1204
  !this.gerenciadorEscopos.buscar(nomeFuncao)) {
1202
1205
  this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${nomeFuncao}' não existe.`);
@@ -1501,6 +1504,22 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1501
1504
  }
1502
1505
  this.classesDeclaradas.add(declaracao.simbolo.lexema);
1503
1506
  this.classesRegistradas.set(declaracao.simbolo.lexema, declaracao);
1507
+ // Marca tipos usados em anotações de propriedades e parâmetros de métodos como usados.
1508
+ for (const propriedade of declaracao.propriedades) {
1509
+ const tipoBase = propriedade.tipo?.replace('[]', '');
1510
+ if (tipoBase)
1511
+ this.gerenciadorEscopos.marcarComoUsada(tipoBase);
1512
+ }
1513
+ for (const metodo of declaracao.metodos) {
1514
+ const tipoRetorno = metodo.funcao.tipo?.replace('[]', '');
1515
+ if (tipoRetorno)
1516
+ this.gerenciadorEscopos.marcarComoUsada(tipoRetorno);
1517
+ for (const parametro of metodo.funcao.parametros) {
1518
+ const tipoBase = parametro.tipoDado?.replace('[]', '');
1519
+ if (tipoBase)
1520
+ this.gerenciadorEscopos.marcarComoUsada(tipoBase);
1521
+ }
1522
+ }
1504
1523
  // Visita corpos dos métodos com contexto de classe ativo.
1505
1524
  // Métodos abstratos implícitos e métodos de classes estrangeiras têm corpo vazio —
1506
1525
  // não há declarações para visitar.
@@ -1510,6 +1529,12 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1510
1529
  for (const metodo of declaracao.metodos) {
1511
1530
  if (metodo.abstrato)
1512
1531
  continue;
1532
+ const tipoRetornoMetodo = metodo.funcao.tipo;
1533
+ if (tipoRetornoMetodo &&
1534
+ !['vazio', 'qualquer'].includes(tipoRetornoMetodo) &&
1535
+ metodo.funcao.corpo.length === 0) {
1536
+ this.aviso(metodo.simbolo, `Método especifica tipo de retorno '${tipoRetornoMetodo}', mas não há qualquer retorno correspondente no corpo do método.`);
1537
+ }
1513
1538
  for (const stmt of metodo.funcao.corpo) {
1514
1539
  await stmt.aceitar(this);
1515
1540
  }
@@ -1526,10 +1551,16 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1526
1551
  }
1527
1552
  let tipoRetornoFuncao = declaracao.funcao.tipo;
1528
1553
  if (tipoRetornoFuncao) {
1554
+ this.gerenciadorEscopos.marcarComoUsada(tipoRetornoFuncao);
1529
1555
  if (!['vazio', 'qualquer'].includes(tipoRetornoFuncao)) {
1530
- const todosOsCaminhosRetornam = this.todosOsCaminhosRetornam(declaracao.funcao.corpo);
1531
- if (!todosOsCaminhosRetornam) {
1532
- this.erro(declaracao.simbolo, `Função '${declaracao.simbolo.lexema}' deve retornar '${tipoRetornoFuncao}' em todos os caminhos de execução.`);
1556
+ if (declaracao.funcao.corpo.length === 0) {
1557
+ this.aviso(declaracao.simbolo, `Método especifica tipo de retorno '${tipoRetornoFuncao}', mas não há qualquer retorno correspondente no corpo do método.`);
1558
+ }
1559
+ else {
1560
+ const todosOsCaminhosRetornam = this.todosOsCaminhosRetornam(declaracao.funcao.corpo);
1561
+ if (!todosOsCaminhosRetornam) {
1562
+ this.erro(declaracao.simbolo, `Função '${declaracao.simbolo.lexema}' deve retornar '${tipoRetornoFuncao}' em todos os caminhos de execução.`);
1563
+ }
1533
1564
  }
1534
1565
  }
1535
1566
  let retornos = [];
@@ -2079,6 +2110,7 @@ const informacao_elemento_sintatico_1 = require("../informacao-elemento-sintatic
2079
2110
  const comum_1 = require("./comum");
2080
2111
  const montao_tipos_1 = require("./montao-tipos");
2081
2112
  const elemento_montao_tipos_1 = require("./elemento-montao-tipos");
2113
+ const simbolo_1 = require("../lexador/simbolo");
2082
2114
  const delegua_1 = __importDefault(require("../tipos-de-dados/delegua"));
2083
2115
  const delegua_2 = __importDefault(require("../tipos-de-simbolos/delegua"));
2084
2116
  const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
@@ -2136,7 +2168,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2136
2168
  verificarDefinicaoTipoAtual() {
2137
2169
  const tipos = [...Object.values(delegua_1.default)];
2138
2170
  if (this.simbolos[this.atual].lexema in this.tiposDefinidosEmCodigo) {
2139
- return this.simbolos[this.atual].lexema;
2171
+ const nomeBase = this.simbolos[this.atual].lexema;
2172
+ if (this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_ESQUERDO)) {
2173
+ this.avancarEDevolverAnterior(); // avança do tipo para '['
2174
+ if (!this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_DIREITO)) {
2175
+ throw this.erro(this.simbolos[this.atual], `Esperado símbolo de fechamento do vetor: ']'. Atual: ${this.simbolos[this.atual].lexema}`);
2176
+ }
2177
+ this.avancarEDevolverAnterior(); // avança de '[' para ']'
2178
+ return `${nomeBase}[]`;
2179
+ }
2180
+ return nomeBase;
2140
2181
  }
2141
2182
  if (this.simbolos[this.atual].lexema in this.interfacesDeclaradas) {
2142
2183
  return this.simbolos[this.atual].lexema;
@@ -2237,6 +2278,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2237
2278
  case delegua_2.default.EXTENSAO:
2238
2279
  this.avancarEDevolverAnterior();
2239
2280
  return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), 'extensao', 'texto');
2281
+ case delegua_2.default.ASSERCAO:
2282
+ this.avancarEDevolverAnterior();
2283
+ return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), 'assercao', 'texto');
2240
2284
  default:
2241
2285
  return undefined;
2242
2286
  }
@@ -3388,6 +3432,38 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3388
3432
  const expressaoFalha = await this.expressao();
3389
3433
  return new declaracoes_1.Falhar(simboloFalha, expressaoFalha);
3390
3434
  }
3435
+ async declaracaoAssercao() {
3436
+ const simboloAssercao = this.simbolos[this.atual - 1];
3437
+ let condicao;
3438
+ let mensagemFalha;
3439
+ if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.PARENTESE_ESQUERDO)) {
3440
+ condicao = await this.expressao();
3441
+ if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
3442
+ this.avancarEDevolverAnterior();
3443
+ mensagemFalha = await this.expressao();
3444
+ if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
3445
+ throw this.erro(this.simbolos[this.atual], "'asserção' aceita apenas condição obrigatória e mensagem opcional.");
3446
+ }
3447
+ }
3448
+ else {
3449
+ mensagemFalha = new construtos_1.Literal(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), 'A asserção falhou.', 'texto', "'");
3450
+ }
3451
+ this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após argumentos de 'asserção'.");
3452
+ }
3453
+ else {
3454
+ condicao = await this.expressao();
3455
+ if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
3456
+ throw this.erro(this.simbolos[this.atual], "Mensagem em 'asserção' exige uso de parênteses.");
3457
+ }
3458
+ mensagemFalha = new construtos_1.Literal(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), 'A asserção falhou.', 'texto', "'");
3459
+ }
3460
+ this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
3461
+ const simboloNao = new simbolo_1.Simbolo(delegua_2.default.NEGACAO, 'nao', null, Number(simboloAssercao.linha), simboloAssercao.hashArquivo, simboloAssercao.colunaInicio, simboloAssercao.colunaFim);
3462
+ const condicaoNegada = new construtos_1.Unario(simboloAssercao.hashArquivo, simboloNao, condicao, 'ANTES');
3463
+ const declaracaoFalhar = new declaracoes_1.Falhar(simboloAssercao, mensagemFalha);
3464
+ const blocoFalha = new declaracoes_1.Bloco(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), [declaracaoFalhar]);
3465
+ return new declaracoes_1.Se(condicaoNegada, blocoFalha);
3466
+ }
3391
3467
  async logicaComumFazer() {
3392
3468
  const caminhoFazer = await this.declaracaoBloco();
3393
3469
  this.consumir(delegua_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
@@ -4661,14 +4737,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4661
4737
  }
4662
4738
  /**
4663
4739
  * Usado quando há erros na avaliação sintática.
4664
- * Garante que o código não entre em _loop_ infinito.
4740
+ * Garante que o avaliador sintático não entre em _loop_ infinito.
4665
4741
  * @returns Sempre retorna `void`.
4666
4742
  */
4667
4743
  sincronizar() {
4668
4744
  this.avancarEDevolverAnterior(); // avança além do token com erro
4669
4745
  while (!this.estaNoFinal()) {
4670
4746
  // Um ponto-e-vírgula já consumido indica fronteira limpa entre declarações.
4671
- if (this.simbolos[this.atual - 1].tipo === delegua_2.default.PONTO_E_VIRGULA)
4747
+ if (this.simbolos[this.atual].tipo === delegua_2.default.PONTO_E_VIRGULA)
4672
4748
  return;
4673
4749
  // Uma palavra-chave de início de declaração ou fecha-chave à frente:
4674
4750
  // retorna SEM consumir o token, para que o chamador o analise normalmente.
@@ -4700,6 +4776,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4700
4776
  switch (this.simbolos[this.atual].tipo) {
4701
4777
  case delegua_2.default.AJUDA:
4702
4778
  return await this.declaracaoAjuda();
4779
+ case delegua_2.default.ASSERCAO:
4780
+ this.avancarEDevolverAnterior();
4781
+ return await this.declaracaoAssercao();
4703
4782
  case delegua_2.default.CHAVE_ESQUERDA:
4704
4783
  return await this.declaracaoBloco();
4705
4784
  case delegua_2.default.COMENTARIO:
@@ -4988,7 +5067,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4988
5067
  }
4989
5068
  exports.AvaliadorSintatico = AvaliadorSintatico;
4990
5069
 
4991
- },{"../bibliotecas/primitivas-dicionario":29,"../bibliotecas/primitivas-numero":30,"../bibliotecas/primitivas-texto":31,"../bibliotecas/primitivas-vetor":32,"../construtos":62,"../construtos/tuplas":80,"../declaracoes":110,"../inferenciador":139,"../informacao-elemento-sintatico":140,"../tipos-de-dados/delegua":220,"../tipos-de-simbolos/delegua":225,"./avaliador-sintatico-base":9,"./comum":11,"./elemento-montao-tipos":19,"./erro-avaliador-sintatico":20,"./informacao-escopo":22,"./montao-tipos":25,"./pilha-escopos":26,"browser-process-hrtime":418}],11:[function(require,module,exports){
5070
+ },{"../bibliotecas/primitivas-dicionario":29,"../bibliotecas/primitivas-numero":30,"../bibliotecas/primitivas-texto":31,"../bibliotecas/primitivas-vetor":32,"../construtos":62,"../construtos/tuplas":80,"../declaracoes":110,"../inferenciador":139,"../informacao-elemento-sintatico":140,"../lexador/simbolo":218,"../tipos-de-dados/delegua":220,"../tipos-de-simbolos/delegua":225,"./avaliador-sintatico-base":9,"./comum":11,"./elemento-montao-tipos":19,"./erro-avaliador-sintatico":20,"./informacao-escopo":22,"./montao-tipos":25,"./pilha-escopos":26,"browser-process-hrtime":418}],11:[function(require,module,exports){
4992
5071
  "use strict";
4993
5072
  Object.defineProperty(exports, "__esModule", { value: true });
4994
5073
  exports.buscarRetornos = buscarRetornos;
@@ -5251,7 +5330,7 @@ class AvaliadorSintaticoEguaClassico {
5251
5330
  if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NULO))
5252
5331
  return new construtos_1.Literal(this.hashArquivo, 0, null);
5253
5332
  if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.ISTO))
5254
- return new construtos_1.Isto(this.hashArquivo, Number(this.simboloAnterior()));
5333
+ return new construtos_1.Isto(this.hashArquivo, Number(this.simboloAnterior().linha), this.simboloAnterior());
5255
5334
  if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NUMERO, egua_classico_1.default.TEXTO)) {
5256
5335
  return new construtos_1.Literal(this.hashArquivo, 0, this.simboloAnterior().literal);
5257
5336
  }
@@ -18679,6 +18758,19 @@ function obterAjudaTemaClasse(chave) {
18679
18758
  `\tvar s = "olá"\n` +
18680
18759
  `\tescreva(s.gritarMaiusculas()) // OLÁ!!!\n\n` +
18681
18760
  `Ver também: 'classe'.`);
18761
+ case 'assercao':
18762
+ return (`A instrução 'asserção' valida uma condição em tempo de execução.\n` +
18763
+ `Se condição for falsa, execução falha com erro.\n\n` +
18764
+ `Sintaxe:\n` +
18765
+ `\tasserção condicao\n` +
18766
+ `\tasserção(condicao)\n` +
18767
+ `\tasserção(condicao, "mensagem de erro")\n\n` +
18768
+ `Exemplo:\n` +
18769
+ `\tvar idade = 20\n` +
18770
+ `\tasserção idade >= 18\n` +
18771
+ `\tasserção(idade >= 18, "idade precisa ser maior de idade")\n\n` +
18772
+ `Internamente, primeira implementação usa fluxo equivalente a 'se' + 'falhar'.\n\n` +
18773
+ `Ver também: 'falhar'.`);
18682
18774
  default:
18683
18775
  return `Desculpe, não há documentação disponível para o tópico '${chave}' no momento.`;
18684
18776
  }
@@ -28737,6 +28829,8 @@ const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
28737
28829
  exports.palavrasReservadasDelegua = {
28738
28830
  abstrata: delegua_1.default.ABSTRATO,
28739
28831
  abstrato: delegua_1.default.ABSTRATO,
28832
+ assercao: delegua_1.default.ASSERCAO,
28833
+ asserção: delegua_1.default.ASSERCAO,
28740
28834
  ajuda: delegua_1.default.AJUDA,
28741
28835
  cada: delegua_1.default.CADA,
28742
28836
  caso: delegua_1.default.CASO,
@@ -29058,6 +29152,7 @@ exports.default = {
29058
29152
  Object.defineProperty(exports, "__esModule", { value: true });
29059
29153
  exports.default = {
29060
29154
  ADICAO: 'ADICAO',
29155
+ ASSERCAO: 'ASSERCAO',
29061
29156
  ABSTRATO: 'ABSTRATO',
29062
29157
  AJUDA: 'AJUDA',
29063
29158
  ARROBA: 'ARROBA',
@@ -43315,7 +43410,12 @@ ${labelFuncao}:
43315
43410
  }
43316
43411
  traduzirConstrutoLiteral(construto) {
43317
43412
  if (typeof construto.valor === 'string') {
43318
- return this.criaStringLiteral(construto);
43413
+ return this.criarStringLiteral(construto);
43414
+ }
43415
+ if (typeof construto.valor === 'number' &&
43416
+ Number.isFinite(construto.valor) &&
43417
+ !Number.isInteger(construto.valor)) {
43418
+ return this.criarLiteralPontoFlutuante(construto.valor);
43319
43419
  }
43320
43420
  return String(construto.valor);
43321
43421
  }
@@ -43447,7 +43547,10 @@ ${labelProximo}:`;
43447
43547
  traduzirDeclaracaoExpressao(declaracao) {
43448
43548
  if (declaracao.expressao &&
43449
43549
  this.dicionarioConstrutos[declaracao.expressao.constructor.name]) {
43450
- this.dicionarioConstrutos[declaracao.expressao.constructor.name](declaracao.expressao);
43550
+ const resultado = this.dicionarioConstrutos[declaracao.expressao.constructor.name](declaracao.expressao);
43551
+ if (typeof resultado === 'string' && resultado && resultado !== 'a0') {
43552
+ this.emitirCarga('a0', resultado);
43553
+ }
43451
43554
  }
43452
43555
  }
43453
43556
  traduzirDeclaracaoFazer(declaracao) {
@@ -43661,19 +43764,24 @@ ${labelSenao}:`;
43661
43764
  }
43662
43765
  }
43663
43766
  }
43664
- criaStringLiteral(literal) {
43767
+ criarStringLiteral(literal) {
43665
43768
  const varLiteral = `Delegua_${this.gerarDigitoAleatorio()}`;
43666
43769
  this.data += ` ${varLiteral}: .asciz "${literal.valor}"\n`;
43667
43770
  return varLiteral;
43668
43771
  }
43669
- criaTamanhoNaMemoriaReferenteAVar(nomeStringLiteral) {
43772
+ criarLiteralPontoFlutuante(valor) {
43773
+ const varLiteral = `Delegua_${this.gerarDigitoAleatorio()}`;
43774
+ this.data += ` ${varLiteral}: .double ${valor}\n`;
43775
+ return varLiteral;
43776
+ }
43777
+ criarTamanhoNaMemoriaReferenteAVar(nomeStringLiteral) {
43670
43778
  return `tam_${nomeStringLiteral}`;
43671
43779
  }
43672
43780
  traduzirDeclaracaoEscreva(declaracaoEscreva) {
43673
43781
  let nomeStringLiteral = '';
43674
43782
  let tamanhoString = '';
43675
43783
  if (declaracaoEscreva.argumentos[0] instanceof construtos_1.Literal) {
43676
- nomeStringLiteral = this.criaStringLiteral(declaracaoEscreva.argumentos[0]);
43784
+ nomeStringLiteral = this.criarStringLiteral(declaracaoEscreva.argumentos[0]);
43677
43785
  const stringValue = declaracaoEscreva.argumentos[0].valor;
43678
43786
  tamanhoString = String(stringValue.length);
43679
43787
  }
@@ -44495,7 +44603,7 @@ class TradutorAssemblyScript {
44495
44603
  this.dicionarioConstrutos = {
44496
44604
  AcessoIndiceVariavel: this.traduzirConstrutoAcessoIndiceVariavel.bind(this),
44497
44605
  AcessoMetodo: this.traduzirConstrutoAcessoMetodo.bind(this),
44498
- AcessoMetodoOuPropriedade: this.traduzirConstrutoAcessoMetodo.bind(this),
44606
+ AcessoMetodoOuPropriedade: this.traduzirConstrutoAcessoMetodoOuPropriedade.bind(this),
44499
44607
  AcessoPropriedade: this.traduzirConstrutoAcessoPropriedade.bind(this),
44500
44608
  Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
44501
44609
  ArgumentoReferenciaFuncao: this.traduzirConstrutoArgumentoReferenciaFuncao.bind(this),
@@ -44698,7 +44806,7 @@ class TradutorAssemblyScript {
44698
44806
  case 'aleatorio':
44699
44807
  return `Math.random()`;
44700
44808
  case 'aleatorioEntre':
44701
- case 'aleatorioente':
44809
+ case 'aleatorioentre':
44702
44810
  if (argumentos.length >= 2) {
44703
44811
  return `(Math.random() * (${argumentos[1]} - ${argumentos[0]}) + ${argumentos[0]})`;
44704
44812
  }
@@ -45596,11 +45704,20 @@ class TradutorAssemblyScript {
45596
45704
  return resultado;
45597
45705
  }
45598
45706
  traduzirConstrutoAcessoMetodo(acessoMetodo) {
45707
+ const nomeMetodo = acessoMetodo.nomeMetodo;
45599
45708
  if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
45600
45709
  let objetoVariavel = acessoMetodo.objeto;
45601
- return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(acessoMetodo.simbolo.lexema)}`;
45710
+ return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(nomeMetodo)}`;
45602
45711
  }
45603
- return `this.${acessoMetodo.simbolo.lexema}`;
45712
+ return `this.${nomeMetodo}`;
45713
+ }
45714
+ traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodoOuPropriedade) {
45715
+ const nomeMetodo = acessoMetodoOuPropriedade.simbolo?.lexema;
45716
+ if (acessoMetodoOuPropriedade.objeto instanceof construtos_1.Variavel) {
45717
+ let objetoVariavel = acessoMetodoOuPropriedade.objeto;
45718
+ return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(nomeMetodo)}`;
45719
+ }
45720
+ return `this.${nomeMetodo}`;
45604
45721
  }
45605
45722
  traduzirConstrutoAcessoIndiceVariavel(acessoIndiceVariavel) {
45606
45723
  let resultado = '';