@designliquido/delegua 1.11.0 → 1.12.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.
- package/analisador-semantico/analisador-semantico-base.d.ts +2 -2
- package/analisador-semantico/analisador-semantico-base.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico-base.js +14 -6
- package/analisador-semantico/analisador-semantico-base.js.map +1 -1
- package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico.js +38 -19
- package/analisador-semantico/analisador-semantico.js.map +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +41 -18
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
- package/analisador-semantico/funcao-hipotetica-interface.d.ts +1 -1
- package/analisador-semantico/gerenciador-escopos.d.ts +1 -1
- package/analisador-semantico/pilha-variaveis.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +99 -42
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/comum.d.ts.map +1 -1
- package/avaliador-sintatico/comum.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +91 -96
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +4 -4
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
- package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/erro-avaliador-sintatico.d.ts +18 -0
- package/avaliador-sintatico/erro-avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/erro-avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts.map +1 -1
- package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js.map +1 -1
- package/bibliotecas/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/biblioteca-global.js +93 -31
- package/bibliotecas/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js +12 -8
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-dicionario.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-numero.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-numero.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.js +3 -4
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +9 -11
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -1
- package/bibliotecas/primitivas-dicionario.d.ts.map +1 -1
- package/bibliotecas/primitivas-dicionario.js +1 -1
- package/bibliotecas/primitivas-dicionario.js.map +1 -1
- package/bibliotecas/primitivas-numero.d.ts.map +1 -1
- package/bibliotecas/primitivas-numero.js.map +1 -1
- package/bibliotecas/primitivas-texto.d.ts.map +1 -1
- package/bibliotecas/primitivas-texto.js +1 -1
- package/bibliotecas/primitivas-texto.js.map +1 -1
- package/bibliotecas/primitivas-tupla.d.ts.map +1 -1
- package/bibliotecas/primitivas-tupla.js +34 -14
- package/bibliotecas/primitivas-tupla.js.map +1 -1
- package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/primitivas-vetor.js +1 -1
- package/bibliotecas/primitivas-vetor.js.map +1 -1
- package/bin/package.json +1 -1
- package/construtos/ajuda-como-construto.d.ts +2 -2
- package/construtos/ajuda-como-construto.js +1 -1
- package/construtos/atribuir.d.ts.map +1 -1
- package/construtos/atribuir.js +5 -2
- package/construtos/atribuir.js.map +1 -1
- package/construtos/binario.d.ts.map +1 -1
- package/construtos/binario.js +1 -2
- package/construtos/binario.js.map +1 -1
- package/construtos/comentario-como-construto.d.ts.map +1 -1
- package/construtos/comentario-como-construto.js.map +1 -1
- package/construtos/decorador.d.ts.map +1 -1
- package/construtos/decorador.js +3 -1
- package/construtos/decorador.js.map +1 -1
- package/construtos/dicionario.d.ts.map +1 -1
- package/construtos/dicionario.js.map +1 -1
- package/construtos/tupla-n.d.ts +3 -3
- package/construtos/tupla-n.d.ts.map +1 -1
- package/construtos/tupla-n.js +4 -2
- package/construtos/tupla-n.js.map +1 -1
- package/declaracoes/ajuda.d.ts +3 -3
- package/declaracoes/funcao.d.ts +2 -1
- package/declaracoes/funcao.d.ts.map +1 -1
- package/declaracoes/funcao.js +2 -1
- package/declaracoes/funcao.js.map +1 -1
- package/declaracoes/interface.d.ts.map +1 -1
- package/declaracoes/interface.js.map +1 -1
- package/declaracoes/texto-documentacao.d.ts.map +1 -1
- package/declaracoes/texto-documentacao.js.map +1 -1
- package/estilizador/estilizador-delegua.d.ts.map +1 -1
- package/estilizador/estilizador-delegua.js +5 -1
- package/estilizador/estilizador-delegua.js.map +1 -1
- package/formatadores/formatador-delegua.d.ts.map +1 -1
- package/formatadores/formatador-delegua.js.map +1 -1
- package/formatadores/formatador-pitugues.d.ts.map +1 -1
- package/formatadores/formatador-pitugues.js +74 -29
- package/formatadores/formatador-pitugues.js.map +1 -1
- package/geracao-identificadores/index.js +2 -2
- package/geracao-identificadores/index.js.map +1 -1
- package/interfaces/componente-modulo-classe-interface.d.ts.map +1 -1
- package/interfaces/componente-modulo-funcao-interface.d.ts.map +1 -1
- package/interfaces/interpretador-com-depuracao-interface.d.ts.map +1 -1
- package/interfaces/modulo-interface.d.ts +2 -2
- package/interfaces/modulo-interface.d.ts.map +1 -1
- package/interfaces/visitante-comum-interface.d.ts.map +1 -1
- package/interpretador/comum.d.ts.map +1 -1
- package/interpretador/comum.js +55 -55
- package/interpretador/comum.js.map +1 -1
- package/interpretador/depuracao/avaliador-expressao-depuracao.d.ts.map +1 -1
- package/interpretador/depuracao/avaliador-expressao-depuracao.js.map +1 -1
- package/interpretador/depuracao/comum.d.ts.map +1 -1
- package/interpretador/depuracao/comum.js +8 -4
- package/interpretador/depuracao/comum.js.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +1 -3
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
- package/interpretador/dialetos/pitugues/comum.d.ts +2 -2
- package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/comum.js +2 -3
- package/interpretador/dialetos/pitugues/comum.js.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts +2 -2
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +3 -3
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js +3 -2
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
- package/interpretador/estruturas/classe-de-modulo.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.js +3 -1
- package/interpretador/estruturas/delegua-funcao.js.map +1 -1
- package/interpretador/estruturas/descritor-tipo-classe.d.ts.map +1 -1
- package/interpretador/estruturas/descritor-tipo-classe.js +6 -6
- package/interpretador/estruturas/descritor-tipo-classe.js.map +1 -1
- package/interpretador/estruturas/metodo-polimorfico.d.ts.map +1 -1
- package/interpretador/estruturas/metodo-polimorfico.js +13 -9
- package/interpretador/estruturas/metodo-polimorfico.js.map +1 -1
- package/interpretador/estruturas/metodo-primitiva.d.ts.map +1 -1
- package/interpretador/estruturas/metodo-primitiva.js.map +1 -1
- package/interpretador/estruturas/objeto-base.d.ts.map +1 -1
- package/interpretador/estruturas/objeto-base.js.map +1 -1
- package/interpretador/estruturas/objeto-delegua-classe.d.ts.map +1 -1
- package/interpretador/estruturas/objeto-delegua-classe.js +10 -6
- package/interpretador/estruturas/objeto-delegua-classe.js.map +1 -1
- package/interpretador/interpretador-base.d.ts +4 -4
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +123 -54
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +28 -17
- package/interpretador/interpretador.js.map +1 -1
- package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
- package/interpretador/pilha-escopos-execucao.js.map +1 -1
- package/lexador/dialetos/lexador-calango.d.ts.map +1 -1
- package/lexador/dialetos/lexador-calango.js.map +1 -1
- package/lexador/dialetos/lexador-egua-classico.d.ts.map +1 -1
- package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
- package/lexador/dialetos/lexador-pitugues.d.ts.map +1 -1
- package/lexador/dialetos/lexador-pitugues.js +21 -13
- package/lexador/dialetos/lexador-pitugues.js.map +1 -1
- package/lexador/dialetos/lexador-portugol-ipt.d.ts.map +1 -1
- package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
- package/lexador/dialetos/lexador-prisma.d.ts.map +1 -1
- package/lexador/dialetos/lexador-prisma.js +25 -3
- package/lexador/dialetos/lexador-prisma.js.map +1 -1
- package/lexador/dialetos/lexador-tenda.d.ts.map +1 -1
- package/lexador/dialetos/lexador-tenda.js.map +1 -1
- package/lexador/filtro-paradigma.d.ts.map +1 -1
- package/lexador/filtro-paradigma.js.map +1 -1
- package/lexador/lexador-base-linha-unica.d.ts.map +1 -1
- package/lexador/lexador-base-linha-unica.js.map +1 -1
- package/lexador/lexador-base.d.ts.map +1 -1
- package/lexador/lexador-base.js.map +1 -1
- package/lexador/lexador.d.ts.map +1 -1
- package/lexador/lexador.js.map +1 -1
- package/lexador/mapeamento-paradigmas.d.ts.map +1 -1
- package/lexador/mapeamento-paradigmas.js.map +1 -1
- package/lexador/palavras-reservadas.js +2 -2
- package/lexador/palavras-reservadas.js.map +1 -1
- package/lexador/simbolo.d.ts.map +1 -1
- package/lexador/simbolo.js.map +1 -1
- package/lexador/traducao/lexador-javascript.d.ts.map +1 -1
- package/package.json +1 -1
- package/tradutores/mermaid/aresta-fluxograma.d.ts +1 -1
- package/tradutores/mermaid/subgrafo-classe.d.ts +3 -3
- package/tradutores/mermaid/subgrafo-funcao.d.ts +2 -2
- package/tradutores/mermaid/subgrafo-funcao.d.ts.map +1 -1
- package/tradutores/mermaid/subgrafo-funcao.js.map +1 -1
- package/tradutores/mermaid/subgrafo-metodo.d.ts +2 -2
- package/tradutores/mermaid/vertice-fluxograma.d.ts +1 -1
- package/tradutores/tradutor-assembly-arm.d.ts.map +1 -1
- package/tradutores/tradutor-assembly-arm.js +164 -156
- package/tradutores/tradutor-assembly-arm.js.map +1 -1
- package/tradutores/tradutor-assembly-x64.d.ts.map +1 -1
- package/tradutores/tradutor-assembly-x64.js +136 -127
- package/tradutores/tradutor-assembly-x64.js.map +1 -1
- package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
- package/tradutores/tradutor-assemblyscript.js +10 -6
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/tradutores/tradutor-calango.d.ts.map +1 -1
- package/tradutores/tradutor-calango.js.map +1 -1
- package/tradutores/tradutor-elixir.d.ts.map +1 -1
- package/tradutores/tradutor-elixir.js +9 -7
- package/tradutores/tradutor-elixir.js.map +1 -1
- package/tradutores/tradutor-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-javascript.js +2 -1
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-mermaidjs.d.ts.map +1 -1
- package/tradutores/tradutor-mermaidjs.js +4 -8
- package/tradutores/tradutor-mermaidjs.js.map +1 -1
- package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
- package/tradutores/tradutor-portugol-ipt.js.map +1 -1
- package/tradutores/tradutor-python.d.ts.map +1 -1
- package/tradutores/tradutor-python.js +1 -1
- package/tradutores/tradutor-python.js.map +1 -1
- package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-ruby.d.ts.map +1 -1
- package/tradutores/tradutor-ruby.js +1 -1
- package/tradutores/tradutor-ruby.js.map +1 -1
- package/umd/delegua.js +1056 -720
|
@@ -172,7 +172,7 @@ class InterpretadorBase {
|
|
|
172
172
|
}
|
|
173
173
|
// Se é array, resolve recursivamente todos os elementos
|
|
174
174
|
if (Array.isArray(objeto)) {
|
|
175
|
-
return objeto.map(elemento => this.resolverValorRecursivo(elemento));
|
|
175
|
+
return objeto.map((elemento) => this.resolverValorRecursivo(elemento));
|
|
176
176
|
}
|
|
177
177
|
// Se é objeto plano, resolve recursivamente todas as propriedades
|
|
178
178
|
if (objeto && objeto.constructor && objeto.constructor === Object) {
|
|
@@ -215,8 +215,18 @@ class InterpretadorBase {
|
|
|
215
215
|
async visitarExpressaoTupla(expressao) {
|
|
216
216
|
// Lista de propriedades válidas para tuplas (ignorar propriedades de controle)
|
|
217
217
|
const propriedadesValidas = [
|
|
218
|
-
'primeiro',
|
|
219
|
-
'
|
|
218
|
+
'primeiro',
|
|
219
|
+
'segundo',
|
|
220
|
+
'terceiro',
|
|
221
|
+
'quarto',
|
|
222
|
+
'quinto',
|
|
223
|
+
'sexto',
|
|
224
|
+
'sétimo',
|
|
225
|
+
'setimo',
|
|
226
|
+
'oitavo',
|
|
227
|
+
'nono',
|
|
228
|
+
'décimo',
|
|
229
|
+
'decimo',
|
|
220
230
|
];
|
|
221
231
|
const valores = [];
|
|
222
232
|
for (let propriedade of propriedadesValidas) {
|
|
@@ -233,7 +243,7 @@ class InterpretadorBase {
|
|
|
233
243
|
const res = await this.avaliar(expressao.elementos[i]);
|
|
234
244
|
elementos.push(this.resolverValor(res));
|
|
235
245
|
}
|
|
236
|
-
const elementosComoConstrutos = elementos.map(valor => new construtos_1.Literal(expressao.hashArquivo, expressao.linha, valor));
|
|
246
|
+
const elementosComoConstrutos = elementos.map((valor) => new construtos_1.Literal(expressao.hashArquivo, expressao.linha, valor));
|
|
237
247
|
return new construtos_1.TuplaN(expressao.hashArquivo, expressao.linha, elementosComoConstrutos);
|
|
238
248
|
}
|
|
239
249
|
async visitarExpressaoAtribuicaoPorIndicesMatriz(expressao) {
|
|
@@ -575,8 +585,12 @@ class InterpretadorBase {
|
|
|
575
585
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
576
586
|
// Auto-promove para BigInt se qualquer operando for BigInt
|
|
577
587
|
if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
|
|
578
|
-
const esq = typeof valorEsquerdo === 'bigint'
|
|
579
|
-
|
|
588
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
589
|
+
? valorEsquerdo
|
|
590
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
591
|
+
const dir = typeof valorDireito === 'bigint'
|
|
592
|
+
? valorDireito
|
|
593
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
580
594
|
return esq ** dir;
|
|
581
595
|
}
|
|
582
596
|
const resultadoExponenciacao = Math.pow(valorEsquerdo, valorDireito);
|
|
@@ -604,8 +618,12 @@ class InterpretadorBase {
|
|
|
604
618
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
605
619
|
// Auto-promove para BigInt se qualquer operando for BigInt
|
|
606
620
|
if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
|
|
607
|
-
const esq = typeof valorEsquerdo === 'bigint'
|
|
608
|
-
|
|
621
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
622
|
+
? valorEsquerdo
|
|
623
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
624
|
+
const dir = typeof valorDireito === 'bigint'
|
|
625
|
+
? valorDireito
|
|
626
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
609
627
|
return esq - dir;
|
|
610
628
|
}
|
|
611
629
|
return Number(valorEsquerdo) - Number(valorDireito);
|
|
@@ -617,8 +635,12 @@ class InterpretadorBase {
|
|
|
617
635
|
}
|
|
618
636
|
// Auto-promove para BigInt se qualquer operando for BigInt
|
|
619
637
|
if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
|
|
620
|
-
const esq = typeof valorEsquerdo === 'bigint'
|
|
621
|
-
|
|
638
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
639
|
+
? valorEsquerdo
|
|
640
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
641
|
+
const dir = typeof valorDireito === 'bigint'
|
|
642
|
+
? valorDireito
|
|
643
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
622
644
|
return esq + dir;
|
|
623
645
|
}
|
|
624
646
|
if (this.tiposNumericos.includes(tipoEsquerdo) &&
|
|
@@ -648,8 +670,12 @@ class InterpretadorBase {
|
|
|
648
670
|
}
|
|
649
671
|
// Retorna BigInt se qualquer operando for BigInt
|
|
650
672
|
if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
|
|
651
|
-
const esq = typeof valorEsquerdo === 'bigint'
|
|
652
|
-
|
|
673
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
674
|
+
? valorEsquerdo
|
|
675
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
676
|
+
const dir = typeof valorDireito === 'bigint'
|
|
677
|
+
? valorDireito
|
|
678
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
653
679
|
return esq / dir; // Trunca automaticamente
|
|
654
680
|
}
|
|
655
681
|
return Math.floor(Number(valorEsquerdo) / Number(valorDireito));
|
|
@@ -659,8 +685,12 @@ class InterpretadorBase {
|
|
|
659
685
|
if ((typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') &&
|
|
660
686
|
tipoEsquerdo !== delegua_2.default.TEXTO &&
|
|
661
687
|
tipoDireito !== delegua_2.default.TEXTO) {
|
|
662
|
-
const esq = typeof valorEsquerdo === 'bigint'
|
|
663
|
-
|
|
688
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
689
|
+
? valorEsquerdo
|
|
690
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
691
|
+
const dir = typeof valorDireito === 'bigint'
|
|
692
|
+
? valorDireito
|
|
693
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
664
694
|
return esq * dir;
|
|
665
695
|
}
|
|
666
696
|
if (tipoEsquerdo === delegua_2.default.TEXTO ||
|
|
@@ -693,7 +723,8 @@ class InterpretadorBase {
|
|
|
693
723
|
case delegua_1.default.MODULO:
|
|
694
724
|
case delegua_1.default.MODULO_IGUAL:
|
|
695
725
|
// Se o operando esquerdo é uma string, usar formatação de string
|
|
696
|
-
if (tipoEsquerdo === delegua_2.default.TEXTO ||
|
|
726
|
+
if (tipoEsquerdo === delegua_2.default.TEXTO ||
|
|
727
|
+
typeof valorEsquerdo === 'string') {
|
|
697
728
|
return this.formatarStringComOperadorPorcentagem(String(valorEsquerdo), direita, // Passar 'direita' ao invés de 'valorDireito' para preservar arrays de tuplas
|
|
698
729
|
expressao.operador);
|
|
699
730
|
}
|
|
@@ -707,8 +738,12 @@ class InterpretadorBase {
|
|
|
707
738
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
708
739
|
// Auto-promove para BigInt se qualquer operando for BigInt
|
|
709
740
|
if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
|
|
710
|
-
const esq = typeof valorEsquerdo === 'bigint'
|
|
711
|
-
|
|
741
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
742
|
+
? valorEsquerdo
|
|
743
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
744
|
+
const dir = typeof valorDireito === 'bigint'
|
|
745
|
+
? valorDireito
|
|
746
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
712
747
|
return esq & dir;
|
|
713
748
|
}
|
|
714
749
|
return Number(valorEsquerdo) & Number(valorDireito);
|
|
@@ -719,8 +754,12 @@ class InterpretadorBase {
|
|
|
719
754
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
720
755
|
// Auto-promove para BigInt se qualquer operando for BigInt
|
|
721
756
|
if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
|
|
722
|
-
const esq = typeof valorEsquerdo === 'bigint'
|
|
723
|
-
|
|
757
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
758
|
+
? valorEsquerdo
|
|
759
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
760
|
+
const dir = typeof valorDireito === 'bigint'
|
|
761
|
+
? valorDireito
|
|
762
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
724
763
|
return esq ^ dir;
|
|
725
764
|
}
|
|
726
765
|
return Number(valorEsquerdo) ^ Number(valorDireito);
|
|
@@ -731,8 +770,12 @@ class InterpretadorBase {
|
|
|
731
770
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
732
771
|
// Auto-promove para BigInt se qualquer operando for BigInt
|
|
733
772
|
if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
|
|
734
|
-
const esq = typeof valorEsquerdo === 'bigint'
|
|
735
|
-
|
|
773
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
774
|
+
? valorEsquerdo
|
|
775
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
776
|
+
const dir = typeof valorDireito === 'bigint'
|
|
777
|
+
? valorDireito
|
|
778
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
736
779
|
return esq | dir;
|
|
737
780
|
}
|
|
738
781
|
return Number(valorEsquerdo) | Number(valorDireito);
|
|
@@ -740,9 +783,15 @@ class InterpretadorBase {
|
|
|
740
783
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
741
784
|
// Auto-promove para BigInt (interno para longo) se qualquer operando for BigInt ou se deslocamento >= 32
|
|
742
785
|
const tamanhoDeslocamentoEsquerda = Number(valorDireito);
|
|
743
|
-
if (typeof valorEsquerdo === 'bigint' ||
|
|
744
|
-
|
|
745
|
-
|
|
786
|
+
if (typeof valorEsquerdo === 'bigint' ||
|
|
787
|
+
typeof valorDireito === 'bigint' ||
|
|
788
|
+
tamanhoDeslocamentoEsquerda >= 32) {
|
|
789
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
790
|
+
? valorEsquerdo
|
|
791
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
792
|
+
const dir = typeof valorDireito === 'bigint'
|
|
793
|
+
? valorDireito
|
|
794
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
746
795
|
return esq << dir;
|
|
747
796
|
}
|
|
748
797
|
return Number(valorEsquerdo) << Number(valorDireito);
|
|
@@ -750,9 +799,15 @@ class InterpretadorBase {
|
|
|
750
799
|
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
|
|
751
800
|
// Auto-promove para BigInt (interno para longo) se qualquer operando for BigInt ou se deslocamento >= 32
|
|
752
801
|
const tamanhoDeslocamentoDireita = Number(valorDireito);
|
|
753
|
-
if (typeof valorEsquerdo === 'bigint' ||
|
|
754
|
-
|
|
755
|
-
|
|
802
|
+
if (typeof valorEsquerdo === 'bigint' ||
|
|
803
|
+
typeof valorDireito === 'bigint' ||
|
|
804
|
+
tamanhoDeslocamentoDireita >= 32) {
|
|
805
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
806
|
+
? valorEsquerdo
|
|
807
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
808
|
+
const dir = typeof valorDireito === 'bigint'
|
|
809
|
+
? valorDireito
|
|
810
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
756
811
|
return esq >> dir;
|
|
757
812
|
}
|
|
758
813
|
return Number(valorEsquerdo) >> Number(valorDireito);
|
|
@@ -873,7 +928,8 @@ class InterpretadorBase {
|
|
|
873
928
|
// Casos que passam aqui: chamadas a métodos de bibliotecas de Delégua.
|
|
874
929
|
if (typeof entidadeChamada === primitivos_1.default.FUNCAO) {
|
|
875
930
|
let objeto = null;
|
|
876
|
-
if (expressao.entidadeChamada.objeto) {
|
|
931
|
+
if (expressao.entidadeChamada.objeto) {
|
|
932
|
+
// TODO: Qual o tipo certo aqui?
|
|
877
933
|
objeto = await this.avaliar(expressao.entidadeChamada.objeto);
|
|
878
934
|
}
|
|
879
935
|
return entidadeChamada.apply(this.resolverValor(objeto), argumentos);
|
|
@@ -932,7 +988,8 @@ class InterpretadorBase {
|
|
|
932
988
|
}
|
|
933
989
|
logicaContemOuEm(esquerda, direita, expressao) {
|
|
934
990
|
const valorDireitoResolvido = this.resolverValor(direita);
|
|
935
|
-
if (Array.isArray(valorDireitoResolvido) ||
|
|
991
|
+
if (Array.isArray(valorDireitoResolvido) ||
|
|
992
|
+
typeof valorDireitoResolvido === primitivos_1.default.TEXTO) {
|
|
936
993
|
const avaliacao = valorDireitoResolvido.includes(esquerda);
|
|
937
994
|
return expressao.negado ? !avaliacao : avaliacao;
|
|
938
995
|
}
|
|
@@ -964,13 +1021,19 @@ class InterpretadorBase {
|
|
|
964
1021
|
const valorDireito = this.resolverValor(direita);
|
|
965
1022
|
if (typeof valorDireito === 'number' || typeof valorDireito === 'bigint') {
|
|
966
1023
|
if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
|
|
967
|
-
const esq = typeof valorEsquerdo === 'bigint'
|
|
968
|
-
|
|
969
|
-
|
|
1024
|
+
const esq = typeof valorEsquerdo === 'bigint'
|
|
1025
|
+
? valorEsquerdo
|
|
1026
|
+
: BigInt(Math.floor(Number(valorEsquerdo)));
|
|
1027
|
+
const dir = typeof valorDireito === 'bigint'
|
|
1028
|
+
? valorDireito
|
|
1029
|
+
: BigInt(Math.floor(Number(valorDireito)));
|
|
1030
|
+
return expressao.operador.tipo === delegua_1.default.E
|
|
1031
|
+
? esq & dir
|
|
1032
|
+
: esq | dir;
|
|
970
1033
|
}
|
|
971
1034
|
return expressao.operador.tipo === delegua_1.default.E
|
|
972
|
-
?
|
|
973
|
-
:
|
|
1035
|
+
? Number(valorEsquerdo) & Number(valorDireito)
|
|
1036
|
+
: Number(valorEsquerdo) | Number(valorDireito);
|
|
974
1037
|
}
|
|
975
1038
|
// Demais casos sem diferença de tipos
|
|
976
1039
|
if (expressao.operador.tipo === delegua_1.default.OU) {
|
|
@@ -1064,7 +1127,7 @@ class InterpretadorBase {
|
|
|
1064
1127
|
const valorComoDupla = valorVetorResolvido[declaracao.posicaoAtual];
|
|
1065
1128
|
const promises = await Promise.all([
|
|
1066
1129
|
this.avaliar(declaracao.variavelIteracao.primeiro),
|
|
1067
|
-
this.avaliar(declaracao.variavelIteracao.segundo)
|
|
1130
|
+
this.avaliar(declaracao.variavelIteracao.segundo),
|
|
1068
1131
|
]);
|
|
1069
1132
|
// TODO: O que fazer quando não forem literais?
|
|
1070
1133
|
this.pilhaEscoposExecucao.definirVariavel(String(promises[0].valor), valorComoDupla.primeiro);
|
|
@@ -1244,7 +1307,9 @@ class InterpretadorBase {
|
|
|
1244
1307
|
let formatoTexto = '';
|
|
1245
1308
|
for (const argumento of argumentos) {
|
|
1246
1309
|
let resultadoAvaliacao = await this.avaliar(argumento);
|
|
1247
|
-
if (resultadoAvaliacao &&
|
|
1310
|
+
if (resultadoAvaliacao &&
|
|
1311
|
+
resultadoAvaliacao.hasOwnProperty &&
|
|
1312
|
+
resultadoAvaliacao.hasOwnProperty('valorRetornado')) {
|
|
1248
1313
|
resultadoAvaliacao = resultadoAvaliacao.valorRetornado;
|
|
1249
1314
|
}
|
|
1250
1315
|
let valor = this.resolverValor(resultadoAvaliacao);
|
|
@@ -1485,12 +1550,12 @@ class InterpretadorBase {
|
|
|
1485
1550
|
}, 'Somente listas, dicionários, classes e objetos podem ter seus valores indexados.', expressao.linha));
|
|
1486
1551
|
}
|
|
1487
1552
|
/**
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1553
|
+
* Método base para acesso a intervalo.
|
|
1554
|
+
* Por padrão lança erro, pois a maioria dos dialetos (como Delégua padrão)
|
|
1555
|
+
* ainda não suporta isso nativamente, apenas Pituguês.
|
|
1556
|
+
*/
|
|
1492
1557
|
visitarExpressaoAcessoIntervaloVariavel(expressao) {
|
|
1493
|
-
return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento,
|
|
1558
|
+
return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Acesso por intervalo não implementado para este dialeto.', expressao.linha));
|
|
1494
1559
|
}
|
|
1495
1560
|
async visitarExpressaoDefinirValor(expressao) {
|
|
1496
1561
|
const variavelObjeto = await this.avaliar(expressao.objeto);
|
|
@@ -1507,14 +1572,12 @@ class InterpretadorBase {
|
|
|
1507
1572
|
objeto[expressao.nome.lexema] = valor;
|
|
1508
1573
|
}
|
|
1509
1574
|
}
|
|
1510
|
-
visitarDeclaracaoDefinicaoFuncao(declaracao) {
|
|
1575
|
+
async visitarDeclaracaoDefinicaoFuncao(declaracao) {
|
|
1511
1576
|
const funcao = new estruturas_1.DeleguaFuncao(declaracao.simbolo.lexema, declaracao.funcao);
|
|
1512
1577
|
funcao.documentacao = declaracao.documentacao;
|
|
1513
1578
|
this.pilhaEscoposExecucao.definirVariavel(declaracao.simbolo.lexema, funcao);
|
|
1514
1579
|
this.pilhaEscoposExecucao.registrarReferenciaFuncao(declaracao.id, funcao);
|
|
1515
|
-
return
|
|
1516
|
-
declaracao: funcao,
|
|
1517
|
-
});
|
|
1580
|
+
return { declaracao: funcao };
|
|
1518
1581
|
}
|
|
1519
1582
|
/**
|
|
1520
1583
|
* Executa uma declaração de classe.
|
|
@@ -1574,9 +1637,7 @@ class InterpretadorBase {
|
|
|
1574
1637
|
const funcao = new estruturas_1.DeleguaFuncao(nomeMetodo, metodoAtual.funcao, undefined, eInicializador);
|
|
1575
1638
|
funcao.documentacao = metodoAtual.documentacao;
|
|
1576
1639
|
// Numa classe estática, todos os métodos (exceto construtor) são estáticos.
|
|
1577
|
-
const ehEstatico = declaracao.classeEstatica
|
|
1578
|
-
? !eInicializador
|
|
1579
|
-
: metodoAtual.estatico;
|
|
1640
|
+
const ehEstatico = declaracao.classeEstatica ? !eInicializador : metodoAtual.estatico;
|
|
1580
1641
|
if (metodoAtual.eObtenedor) {
|
|
1581
1642
|
if (ehEstatico) {
|
|
1582
1643
|
obtenedoresEstaticos[nomeMetodo] = funcao;
|
|
@@ -1632,7 +1693,9 @@ class InterpretadorBase {
|
|
|
1632
1693
|
// Toda classe sem superclasse explícita herda implicitamente de `Objeto`.
|
|
1633
1694
|
// Isso só deve acontecer quando OBJETO_BASE já estiver inicializado e a classe
|
|
1634
1695
|
// atual não for o próprio OBJETO_BASE, para evitar cadeias de herança recursivas.
|
|
1635
|
-
if (descritorTipoClasse.superClasses.length === 0 &&
|
|
1696
|
+
if (descritorTipoClasse.superClasses.length === 0 &&
|
|
1697
|
+
estruturas_1.OBJETO_BASE &&
|
|
1698
|
+
descritorTipoClasse !== estruturas_1.OBJETO_BASE) {
|
|
1636
1699
|
descritorTipoClasse.superClasses = [estruturas_1.OBJETO_BASE];
|
|
1637
1700
|
}
|
|
1638
1701
|
// Calcular o OReM (linearização C3) após os pais estarem definidos.
|
|
@@ -1895,21 +1958,25 @@ class InterpretadorBase {
|
|
|
1895
1958
|
let valoresArray;
|
|
1896
1959
|
// Verificar se é uma TuplaN (verifica instanceof OU propriedade elementos/tipo para maior compatibilidade)
|
|
1897
1960
|
if (valores instanceof construtos_1.TuplaN ||
|
|
1898
|
-
(valores &&
|
|
1961
|
+
(valores &&
|
|
1962
|
+
valores.tipo === 'tupla' &&
|
|
1963
|
+
valores.elementos &&
|
|
1964
|
+
Array.isArray(valores.elementos))) {
|
|
1899
1965
|
valoresArray = valores.elementos.map((elem) => {
|
|
1900
|
-
if (elem instanceof construtos_1.Literal ||
|
|
1966
|
+
if (elem instanceof construtos_1.Literal ||
|
|
1967
|
+
(elem && typeof elem === 'object' && elem.hasOwnProperty('valor'))) {
|
|
1901
1968
|
return this.resolverValor(elem.valor);
|
|
1902
1969
|
}
|
|
1903
1970
|
return this.resolverValor(elem);
|
|
1904
1971
|
});
|
|
1905
1972
|
}
|
|
1906
1973
|
else if (Array.isArray(valores)) {
|
|
1907
|
-
valoresArray = valores.map(v => this.resolverValor(v));
|
|
1974
|
+
valoresArray = valores.map((v) => this.resolverValor(v));
|
|
1908
1975
|
}
|
|
1909
1976
|
else {
|
|
1910
1977
|
const valorResolvido = this.resolverValor(valores);
|
|
1911
1978
|
if (Array.isArray(valorResolvido)) {
|
|
1912
|
-
valoresArray = valorResolvido.map(v => this.resolverValor(v));
|
|
1979
|
+
valoresArray = valorResolvido.map((v) => this.resolverValor(v));
|
|
1913
1980
|
}
|
|
1914
1981
|
else {
|
|
1915
1982
|
valoresArray = [valorResolvido];
|
|
@@ -2031,7 +2098,9 @@ class InterpretadorBase {
|
|
|
2031
2098
|
return objeto.valor.paraTexto();
|
|
2032
2099
|
if (objeto instanceof construtos_1.Literal)
|
|
2033
2100
|
return this.paraTexto(objeto.valor);
|
|
2034
|
-
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
|
|
2101
|
+
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
|
|
2102
|
+
objeto instanceof estruturas_1.DeleguaFuncao ||
|
|
2103
|
+
objeto instanceof estruturas_1.DescritorTipoClasse)
|
|
2035
2104
|
return objeto.paraTexto();
|
|
2036
2105
|
if (objeto instanceof quebras_1.RetornoQuebra) {
|
|
2037
2106
|
if (typeof objeto.valor === 'boolean')
|