@designliquido/delegua 1.25.1 → 1.26.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/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +34 -4
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/bin/package.json +1 -1
- package/interpretador/comum.d.ts +3 -0
- package/interpretador/comum.d.ts.map +1 -1
- package/interpretador/comum.js +64 -0
- package/interpretador/comum.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 +8 -66
- package/interpretador/dialetos/pitugues/comum.js.map +1 -1
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +4 -6
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts +2 -1
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +9 -8
- package/interpretador/interpretador.js.map +1 -1
- package/package.json +1 -1
- package/tradutores/tradutor-assemblyscript.js +4 -4
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/tradutores/tradutor-elixir.js +19 -17
- package/tradutores/tradutor-elixir.js.map +1 -1
- package/tradutores/tradutor-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-javascript.js +5 -3
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-python.js +3 -3
- package/tradutores/tradutor-python.js.map +1 -1
- package/tradutores/tradutor-reverso-javascript.d.ts +3 -1
- package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-reverso-javascript.js +29 -1
- package/tradutores/tradutor-reverso-javascript.js.map +1 -1
- package/tradutores/tradutor-reverso-tenda.js +1 -1
- package/tradutores/tradutor-reverso-tenda.js.map +1 -1
- package/tradutores/tradutor-ruby.js +3 -3
- package/tradutores/tradutor-ruby.js.map +1 -1
- package/umd/delegua.js +177 -52
package/umd/delegua.js
CHANGED
|
@@ -3147,10 +3147,40 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
3147
3147
|
case delegua_2.default.COLCHETE_ESQUERDO:
|
|
3148
3148
|
const tipoAcesso = this.resolverTipoAcessoIndiceVariavel(expressaoAnterior);
|
|
3149
3149
|
this.avancarEDevolverAnterior();
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3150
|
+
// Determina se é intervalo ([:]), índice único ([indice]) ou
|
|
3151
|
+
// intervalo com passo ([inicio:fim:passo]).
|
|
3152
|
+
let indiceInicio = null;
|
|
3153
|
+
let indiceFim = null;
|
|
3154
|
+
let indicePasso = null;
|
|
3155
|
+
// Se começar com ':', não há início explícito (ex.: `[:fim]`).
|
|
3156
|
+
if (this.simbolos[this.atual].tipo !== delegua_2.default.DOIS_PONTOS) {
|
|
3157
|
+
indiceInicio = await this.expressao();
|
|
3158
|
+
}
|
|
3159
|
+
if (this.simbolos[this.atual].tipo === delegua_2.default.DOIS_PONTOS) {
|
|
3160
|
+
// É um intervalo: [inicio:fim] ou [inicio:fim:passo].
|
|
3161
|
+
this.avancarEDevolverAnterior(); // Pula ':'.
|
|
3162
|
+
if (this.simbolos[this.atual].tipo !== delegua_2.default.COLCHETE_DIREITO &&
|
|
3163
|
+
this.simbolos[this.atual].tipo !== delegua_2.default.DOIS_PONTOS) {
|
|
3164
|
+
indiceFim = await this.expressao();
|
|
3165
|
+
}
|
|
3166
|
+
if (this.simbolos[this.atual].tipo === delegua_2.default.DOIS_PONTOS) {
|
|
3167
|
+
this.avancarEDevolverAnterior(); // Pula segundo ':'.
|
|
3168
|
+
if (this.simbolos[this.atual].tipo !== delegua_2.default.COLCHETE_DIREITO) {
|
|
3169
|
+
indicePasso = await this.expressao();
|
|
3170
|
+
}
|
|
3171
|
+
}
|
|
3172
|
+
const simboloFechamento = this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após intervalo.");
|
|
3173
|
+
// Fatiamento sempre retorna uma coleção do mesmo tipo de elemento.
|
|
3174
|
+
const tipoIntervalo = tipoAcesso + '[]';
|
|
3175
|
+
const acessoIntervalo = new construtos_1.AcessoIntervaloVariavel(this.hashArquivo, expressaoAnterior, indiceInicio, indiceFim, indicePasso, simboloFechamento, tipoIntervalo);
|
|
3176
|
+
return await this.resolverCadeiaChamadas(acessoIntervalo);
|
|
3177
|
+
}
|
|
3178
|
+
else {
|
|
3179
|
+
// É um índice único
|
|
3180
|
+
const simboloFechamento = this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
|
|
3181
|
+
const acessoVariavel = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressaoAnterior, indiceInicio, simboloFechamento, tipoAcesso);
|
|
3182
|
+
return await this.resolverCadeiaChamadas(acessoVariavel);
|
|
3183
|
+
}
|
|
3154
3184
|
default:
|
|
3155
3185
|
return expressaoAnterior;
|
|
3156
3186
|
}
|
|
@@ -19977,6 +20007,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
19977
20007
|
};
|
|
19978
20008
|
})();
|
|
19979
20009
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20010
|
+
exports.visitarExpressaoAcessoIntervaloVariavel = visitarExpressaoAcessoIntervaloVariavel;
|
|
19980
20011
|
exports.carregarBibliotecasGlobais = carregarBibliotecasGlobais;
|
|
19981
20012
|
exports.pontoEntradaAjuda = pontoEntradaAjuda;
|
|
19982
20013
|
exports.obterTopicoAjuda = obterTopicoAjuda;
|
|
@@ -19985,7 +20016,70 @@ const delegua_funcao_1 = require("./estruturas/delegua-funcao");
|
|
|
19985
20016
|
const descritor_tipo_classe_1 = require("./estruturas/descritor-tipo-classe");
|
|
19986
20017
|
const objeto_delegua_classe_1 = require("./estruturas/objeto-delegua-classe");
|
|
19987
20018
|
const construtos_1 = require("../construtos");
|
|
20019
|
+
const excecoes_1 = require("../excecoes");
|
|
19988
20020
|
const bibliotecaGlobal = __importStar(require("../bibliotecas/biblioteca-global"));
|
|
20021
|
+
async function visitarExpressaoAcessoIntervaloVariavel(interpretador, expressao) {
|
|
20022
|
+
const resultadoEntidade = await interpretador.avaliar(expressao.entidadeChamada);
|
|
20023
|
+
const objeto = interpretador.resolverValor(resultadoEntidade);
|
|
20024
|
+
let tamanho = 0;
|
|
20025
|
+
let itens;
|
|
20026
|
+
const ehTexto = typeof objeto === 'string';
|
|
20027
|
+
if (objeto instanceof construtos_1.TuplaN) {
|
|
20028
|
+
itens = objeto.elementos;
|
|
20029
|
+
tamanho = objeto.elementos.length;
|
|
20030
|
+
}
|
|
20031
|
+
else if (Array.isArray(objeto) || ehTexto) {
|
|
20032
|
+
itens = objeto;
|
|
20033
|
+
tamanho = objeto.length;
|
|
20034
|
+
}
|
|
20035
|
+
else {
|
|
20036
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Acesso por intervalo só é suportado em vetores, textos e tuplas.', expressao.linha);
|
|
20037
|
+
}
|
|
20038
|
+
let passo = 1;
|
|
20039
|
+
if (expressao.indicePasso) {
|
|
20040
|
+
const resPasso = await interpretador.avaliar(expressao.indicePasso);
|
|
20041
|
+
passo = interpretador.resolverValor(resPasso);
|
|
20042
|
+
}
|
|
20043
|
+
if (passo === 0) {
|
|
20044
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'O passo do fatiamento não pode ser zero.', expressao.linha);
|
|
20045
|
+
}
|
|
20046
|
+
let inicio = passo > 0 ? 0 : tamanho - 1;
|
|
20047
|
+
if (expressao.indiceInicio) {
|
|
20048
|
+
const resInicio = await interpretador.avaliar(expressao.indiceInicio);
|
|
20049
|
+
inicio = interpretador.resolverValor(resInicio);
|
|
20050
|
+
if (inicio < 0)
|
|
20051
|
+
inicio = tamanho + inicio;
|
|
20052
|
+
}
|
|
20053
|
+
let fim = passo > 0 ? tamanho : -1;
|
|
20054
|
+
if (expressao.indiceFim) {
|
|
20055
|
+
const resFim = await interpretador.avaliar(expressao.indiceFim);
|
|
20056
|
+
fim = interpretador.resolverValor(resFim);
|
|
20057
|
+
if (fim < 0)
|
|
20058
|
+
fim = tamanho + fim;
|
|
20059
|
+
}
|
|
20060
|
+
// Lógica de fatiamento para suportar "passo", pois o TypeScript não suporta nativamente
|
|
20061
|
+
const resultadoFatiado = [];
|
|
20062
|
+
if (passo > 0) {
|
|
20063
|
+
for (let i = inicio; i < fim; i += passo) {
|
|
20064
|
+
if (i >= 0 && i < tamanho) {
|
|
20065
|
+
resultadoFatiado.push(itens[i]);
|
|
20066
|
+
}
|
|
20067
|
+
}
|
|
20068
|
+
}
|
|
20069
|
+
else {
|
|
20070
|
+
for (let i = inicio; i > fim; i += passo) {
|
|
20071
|
+
if (i >= 0 && i < tamanho) {
|
|
20072
|
+
resultadoFatiado.push(itens[i]);
|
|
20073
|
+
}
|
|
20074
|
+
}
|
|
20075
|
+
}
|
|
20076
|
+
if (objeto instanceof construtos_1.TuplaN) {
|
|
20077
|
+
return new construtos_1.TuplaN(objeto.hashArquivo, objeto.linha, resultadoFatiado);
|
|
20078
|
+
}
|
|
20079
|
+
if (ehTexto)
|
|
20080
|
+
return resultadoFatiado.join('');
|
|
20081
|
+
return resultadoFatiado;
|
|
20082
|
+
}
|
|
19989
20083
|
function carregarBibliotecasGlobais(pilhaEscoposExecucao) {
|
|
19990
20084
|
pilhaEscoposExecucao.definirVariavel('aleatorio', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
|
|
19991
20085
|
pilhaEscoposExecucao.definirVariavel('aleatório', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
|
|
@@ -20556,7 +20650,7 @@ function obterAjudaFuncaoPadrao(funcaoPadrao) {
|
|
|
20556
20650
|
}
|
|
20557
20651
|
}
|
|
20558
20652
|
|
|
20559
|
-
},{"../bibliotecas/biblioteca-global":29,"../construtos":67,"./estruturas/delegua-funcao":210,"./estruturas/descritor-tipo-classe":211,"./estruturas/funcao-padrao":213,"./estruturas/objeto-delegua-classe":219}],205:[function(require,module,exports){
|
|
20653
|
+
},{"../bibliotecas/biblioteca-global":29,"../construtos":67,"../excecoes":141,"./estruturas/delegua-funcao":210,"./estruturas/descritor-tipo-classe":211,"./estruturas/funcao-padrao":213,"./estruturas/objeto-delegua-classe":219}],205:[function(require,module,exports){
|
|
20560
20654
|
"use strict";
|
|
20561
20655
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20562
20656
|
exports.EspacoMemoria = void 0;
|
|
@@ -23596,7 +23690,7 @@ class InterpretadorBase {
|
|
|
23596
23690
|
}
|
|
23597
23691
|
return objeto[valorIndice];
|
|
23598
23692
|
}
|
|
23599
|
-
if (objeto instanceof construtos_1.TuplaN || objeto.constructor
|
|
23693
|
+
if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
|
|
23600
23694
|
if (!Number.isInteger(valorIndice)) {
|
|
23601
23695
|
return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Somente inteiros podem ser usados para indexar uma tupla.', expressao.linha));
|
|
23602
23696
|
}
|
|
@@ -23607,7 +23701,7 @@ class InterpretadorBase {
|
|
|
23607
23701
|
return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Índice da tupla fora de intervalo.', expressao.linha));
|
|
23608
23702
|
}
|
|
23609
23703
|
const elemento = objeto.elementos[valorIndice];
|
|
23610
|
-
if (elemento
|
|
23704
|
+
if (elemento instanceof construtos_1.Literal) {
|
|
23611
23705
|
return elemento.valor;
|
|
23612
23706
|
}
|
|
23613
23707
|
return elemento;
|
|
@@ -23627,9 +23721,7 @@ class InterpretadorBase {
|
|
|
23627
23721
|
objeto instanceof estruturas_1.DeleguaFuncao ||
|
|
23628
23722
|
objeto instanceof estruturas_1.DescritorTipoClasse ||
|
|
23629
23723
|
objeto instanceof estruturas_1.DeleguaModulo) {
|
|
23630
|
-
|
|
23631
|
-
return 0;
|
|
23632
|
-
return objeto[valorIndice] || null;
|
|
23724
|
+
return objeto[valorIndice];
|
|
23633
23725
|
}
|
|
23634
23726
|
if (typeof objeto === primitivos_1.default.TEXTO) {
|
|
23635
23727
|
if (!Number.isInteger(valorIndice)) {
|
|
@@ -23830,7 +23922,7 @@ class InterpretadorBase {
|
|
|
23830
23922
|
// Outro caso que `instanceof` simplesmente não funciona para casos em Liquido,
|
|
23831
23923
|
// então testamos também o nome do construtor.
|
|
23832
23924
|
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
|
|
23833
|
-
objeto.constructor
|
|
23925
|
+
objeto.constructor === estruturas_1.ObjetoDeleguaClasse) {
|
|
23834
23926
|
const valor = await objeto.obter(expressao.simbolo, this);
|
|
23835
23927
|
if (valor === 0)
|
|
23836
23928
|
return 0;
|
|
@@ -24909,7 +25001,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
24909
25001
|
}
|
|
24910
25002
|
return objeto[valorIndice];
|
|
24911
25003
|
}
|
|
24912
|
-
if (objeto instanceof construtos_1.TuplaN || objeto.constructor
|
|
25004
|
+
if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
|
|
24913
25005
|
if (!Number.isInteger(valorIndice)) {
|
|
24914
25006
|
return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Somente inteiros podem ser usados para indexar uma tupla.', expressao.linha));
|
|
24915
25007
|
}
|
|
@@ -24920,7 +25012,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
24920
25012
|
return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Índice da tupla fora de intervalo.', expressao.linha));
|
|
24921
25013
|
}
|
|
24922
25014
|
const elemento = objeto.elementos[valorIndice];
|
|
24923
|
-
if (elemento
|
|
25015
|
+
if (elemento instanceof construtos_1.Literal) {
|
|
24924
25016
|
return elemento.valor;
|
|
24925
25017
|
}
|
|
24926
25018
|
return elemento;
|
|
@@ -24933,9 +25025,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
24933
25025
|
objeto instanceof estruturas_1.DeleguaFuncao ||
|
|
24934
25026
|
objeto instanceof estruturas_1.DescritorTipoClasse ||
|
|
24935
25027
|
objeto instanceof estruturas_1.DeleguaModulo) {
|
|
24936
|
-
|
|
24937
|
-
return 0;
|
|
24938
|
-
return objeto[valorIndice] || null;
|
|
25028
|
+
return objeto[valorIndice];
|
|
24939
25029
|
}
|
|
24940
25030
|
if (typeof objeto === primitivos_1.default.TEXTO) {
|
|
24941
25031
|
if (!Number.isInteger(valorIndice)) {
|
|
@@ -24954,6 +25044,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
24954
25044
|
linha: this.linhaDeclaracaoAtual,
|
|
24955
25045
|
}, 'Somente listas, dicionários, classes e objetos podem ter seus valores indexados.', expressao.linha));
|
|
24956
25046
|
}
|
|
25047
|
+
async visitarExpressaoAcessoIntervaloVariavel(expressao) {
|
|
25048
|
+
return (0, comum_1.visitarExpressaoAcessoIntervaloVariavel)(this, expressao);
|
|
25049
|
+
}
|
|
24957
25050
|
logicaPropriedadesEMetodosDeClasse(declaracao, superClassesResolvidas, mesclaResolvidas) {
|
|
24958
25051
|
const metodos = {};
|
|
24959
25052
|
const metodosEstaticos = {};
|
|
@@ -25145,7 +25238,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
25145
25238
|
throw e;
|
|
25146
25239
|
}
|
|
25147
25240
|
}
|
|
25148
|
-
if (objeto instanceof construtos_1.TuplaN || objeto.constructor
|
|
25241
|
+
if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
|
|
25149
25242
|
const metodoDePrimitivaTupla = primitivas_tupla_1.default[expressao.nomeMetodo];
|
|
25150
25243
|
if (metodoDePrimitivaTupla) {
|
|
25151
25244
|
return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTupla.implementacao, expressao.nomeMetodo, 'tupla');
|
|
@@ -25342,7 +25435,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
25342
25435
|
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método ou propriedade '${expressao.simbolo.lexema}' não encontrado em '${nomeClasse}'.`, expressao.linha);
|
|
25343
25436
|
}
|
|
25344
25437
|
}
|
|
25345
|
-
if (objeto instanceof construtos_1.TuplaN || objeto.constructor
|
|
25438
|
+
if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
|
|
25346
25439
|
const metodoDePrimitivaTupla = primitivas_tupla_1.default[expressao.simbolo.lexema];
|
|
25347
25440
|
if (metodoDePrimitivaTupla) {
|
|
25348
25441
|
return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTupla.implementacao, expressao.simbolo.lexema, 'tupla');
|
|
@@ -25481,7 +25574,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
25481
25574
|
if (objeto.constructor === estruturas_1.ObjetoDeleguaClasse) {
|
|
25482
25575
|
return objeto.obterMetodo(expressao.nomePropriedade) || null;
|
|
25483
25576
|
}
|
|
25484
|
-
if (objeto instanceof construtos_1.TuplaN || objeto.constructor
|
|
25577
|
+
if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
|
|
25485
25578
|
const metodoPrimitivaTupla = primitivas_tupla_1.default[expressao.nomePropriedade];
|
|
25486
25579
|
if (metodoPrimitivaTupla) {
|
|
25487
25580
|
return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoPrimitivaTupla.implementacao, expressao.nomePropriedade, 'tupla');
|
|
@@ -46811,7 +46904,7 @@ class TradutorAssemblyScript {
|
|
|
46811
46904
|
}
|
|
46812
46905
|
traduzirDeclaracaoPara(declaracaoPara) {
|
|
46813
46906
|
let resultado = 'for (';
|
|
46814
|
-
if (declaracaoPara.inicializador
|
|
46907
|
+
if (Array.isArray(declaracaoPara.inicializador)) {
|
|
46815
46908
|
resultado +=
|
|
46816
46909
|
this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0]) + ' ';
|
|
46817
46910
|
}
|
|
@@ -46893,7 +46986,7 @@ class TradutorAssemblyScript {
|
|
|
46893
46986
|
if (!corpo)
|
|
46894
46987
|
return null;
|
|
46895
46988
|
for (const declaracao of corpo) {
|
|
46896
|
-
if (declaracao
|
|
46989
|
+
if (declaracao instanceof declaracoes_1.Retorna) {
|
|
46897
46990
|
const retorna = declaracao;
|
|
46898
46991
|
if (retorna.tipo && retorna.tipo !== 'vazio') {
|
|
46899
46992
|
return retorna.tipo;
|
|
@@ -47236,7 +47329,7 @@ class TradutorAssemblyScript {
|
|
|
47236
47329
|
return `Math.pow(${esquerda}, ${direita})`;
|
|
47237
47330
|
}
|
|
47238
47331
|
let resultado = '';
|
|
47239
|
-
if (binario.esquerda
|
|
47332
|
+
if (binario.esquerda instanceof construtos_1.Agrupamento)
|
|
47240
47333
|
resultado +=
|
|
47241
47334
|
'(' +
|
|
47242
47335
|
this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda) +
|
|
@@ -47245,7 +47338,7 @@ class TradutorAssemblyScript {
|
|
|
47245
47338
|
resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
|
|
47246
47339
|
let operador = this.traduzirSimboloOperador(binario.operador);
|
|
47247
47340
|
resultado += ` ${operador} `;
|
|
47248
|
-
if (binario.direita
|
|
47341
|
+
if (binario.direita instanceof construtos_1.Agrupamento)
|
|
47249
47342
|
resultado +=
|
|
47250
47343
|
'(' +
|
|
47251
47344
|
this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) +
|
|
@@ -47391,6 +47484,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
47391
47484
|
};
|
|
47392
47485
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47393
47486
|
exports.TradutorElixir = void 0;
|
|
47487
|
+
const construtos_1 = require("../construtos");
|
|
47488
|
+
const declaracoes_1 = require("../declaracoes");
|
|
47394
47489
|
const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
47395
47490
|
/**
|
|
47396
47491
|
* Tradutor que converte código Delégua para Elixir.
|
|
@@ -47602,27 +47697,27 @@ class TradutorElixir {
|
|
|
47602
47697
|
*/
|
|
47603
47698
|
extrairCamposDeDeclaracao(declaracao, campos) {
|
|
47604
47699
|
// Se é uma expressão de atribuição com isto.campo
|
|
47605
|
-
if (declaracao
|
|
47700
|
+
if (declaracao instanceof declaracoes_1.Expressao && declaracao.expressao) {
|
|
47606
47701
|
const expressao = declaracao.expressao;
|
|
47607
47702
|
// DefinirValor: usado para isto.campo = valor
|
|
47608
|
-
if (expressao
|
|
47609
|
-
if (expressao.objeto && expressao.objeto.constructor
|
|
47703
|
+
if (expressao instanceof construtos_1.DefinirValor) {
|
|
47704
|
+
if (expressao.objeto && expressao.objeto.constructor === construtos_1.Isto) {
|
|
47610
47705
|
campos.add(expressao.nome.lexema);
|
|
47611
47706
|
}
|
|
47612
47707
|
}
|
|
47613
47708
|
// Atribuir: pode ser usado para isto.campo = valor
|
|
47614
|
-
if (expressao
|
|
47709
|
+
if (expressao instanceof construtos_1.Atribuir) {
|
|
47615
47710
|
// Verificar se o alvo é um acesso a propriedade de isto
|
|
47616
|
-
if (expressao.alvo
|
|
47711
|
+
if (expressao.alvo instanceof construtos_1.AcessoPropriedade) {
|
|
47617
47712
|
const acesso = expressao.alvo;
|
|
47618
|
-
if (acesso.objeto && acesso.objeto.constructor
|
|
47713
|
+
if (acesso.objeto && acesso.objeto.constructor === construtos_1.Isto) {
|
|
47619
47714
|
campos.add(acesso.nomePropriedade);
|
|
47620
47715
|
}
|
|
47621
47716
|
}
|
|
47622
47717
|
}
|
|
47623
47718
|
}
|
|
47624
47719
|
// Se é um bloco, processar declarações internas
|
|
47625
|
-
if (declaracao.constructor
|
|
47720
|
+
if (declaracao.constructor === declaracoes_1.Bloco) {
|
|
47626
47721
|
for (const decl of declaracao.declaracoes) {
|
|
47627
47722
|
this.extrairCamposDeDeclaracao(decl, campos);
|
|
47628
47723
|
}
|
|
@@ -47679,21 +47774,21 @@ class TradutorElixir {
|
|
|
47679
47774
|
async extrairInicializacoesStruct(corpo, nomeModulo) {
|
|
47680
47775
|
const inicializacoes = [];
|
|
47681
47776
|
for (const declaracao of corpo) {
|
|
47682
|
-
if (declaracao
|
|
47777
|
+
if (declaracao instanceof declaracoes_1.Expressao && declaracao.expressao) {
|
|
47683
47778
|
const expressao = declaracao.expressao;
|
|
47684
47779
|
// DefinirValor: isto.campo = valor
|
|
47685
|
-
if (expressao
|
|
47686
|
-
if (expressao.objeto && expressao.objeto.constructor
|
|
47780
|
+
if (expressao instanceof construtos_1.DefinirValor) {
|
|
47781
|
+
if (expressao.objeto && expressao.objeto.constructor === construtos_1.Isto) {
|
|
47687
47782
|
const campo = this.converterIdentificador(expressao.nome.lexema);
|
|
47688
47783
|
const valor = await expressao.valor.aceitar(this);
|
|
47689
47784
|
inicializacoes.push(`${campo}: ${valor}`);
|
|
47690
47785
|
}
|
|
47691
47786
|
}
|
|
47692
47787
|
// Atribuir: pode ser isto.campo = valor (se alvo é AcessoPropriedade)
|
|
47693
|
-
if (expressao
|
|
47694
|
-
if (expressao.alvo
|
|
47788
|
+
if (expressao instanceof construtos_1.Atribuir) {
|
|
47789
|
+
if (expressao.alvo instanceof construtos_1.AcessoPropriedade) {
|
|
47695
47790
|
const acesso = expressao.alvo;
|
|
47696
|
-
if (acesso.objeto && acesso.objeto.constructor
|
|
47791
|
+
if (acesso.objeto && acesso.objeto.constructor === construtos_1.Isto) {
|
|
47697
47792
|
const campo = this.converterIdentificador(acesso.nomePropriedade);
|
|
47698
47793
|
const valor = await expressao.valor.aceitar(this);
|
|
47699
47794
|
inicializacoes.push(`${campo}: ${valor}`);
|
|
@@ -47888,7 +47983,7 @@ class TradutorElixir {
|
|
|
47888
47983
|
const init = Array.isArray(declaracao.inicializador)
|
|
47889
47984
|
? declaracao.inicializador[0]
|
|
47890
47985
|
: declaracao.inicializador;
|
|
47891
|
-
if (init.constructor
|
|
47986
|
+
if (init.constructor === declaracoes_1.Var) {
|
|
47892
47987
|
nomeVar = this.converterIdentificador(init.simbolo.lexema);
|
|
47893
47988
|
if (init.inicializador) {
|
|
47894
47989
|
valorInicial = await init.inicializador.aceitar(this);
|
|
@@ -48121,7 +48216,7 @@ class TradutorElixir {
|
|
|
48121
48216
|
}
|
|
48122
48217
|
}
|
|
48123
48218
|
// Verificar se é instanciação de módulo (classe)
|
|
48124
|
-
if (expressao.entidadeChamada.constructor
|
|
48219
|
+
if (expressao.entidadeChamada.constructor === construtos_1.Variavel) {
|
|
48125
48220
|
const nomeEntidade = expressao.entidadeChamada.simbolo.lexema;
|
|
48126
48221
|
if (this.modulosConhecidos.has(this.converterNomeModulo(nomeEntidade))) {
|
|
48127
48222
|
// Chamada de construtor de módulo
|
|
@@ -48129,7 +48224,7 @@ class TradutorElixir {
|
|
|
48129
48224
|
}
|
|
48130
48225
|
}
|
|
48131
48226
|
// Verificar se é chamada de método (AcessoMetodo ou AcessoMetodoOuPropriedade)
|
|
48132
|
-
if (expressao.entidadeChamada.constructor
|
|
48227
|
+
if (expressao.entidadeChamada.constructor === construtos_1.AcessoMetodo) {
|
|
48133
48228
|
const acessoMetodo = expressao.entidadeChamada;
|
|
48134
48229
|
const objeto = await acessoMetodo.objeto.aceitar(this);
|
|
48135
48230
|
const metodo = this.converterIdentificador(acessoMetodo.nomeMetodo);
|
|
@@ -48141,7 +48236,7 @@ class TradutorElixir {
|
|
|
48141
48236
|
// Método de módulo/struct - passar o struct como primeiro argumento
|
|
48142
48237
|
return Promise.resolve(`${this.obterNomeModulo(objeto)}.${metodo}(${objeto}${argumentos.length > 0 ? ', ' + argumentos.join(', ') : ''})`);
|
|
48143
48238
|
}
|
|
48144
|
-
if (expressao.entidadeChamada.constructor
|
|
48239
|
+
if (expressao.entidadeChamada.constructor === construtos_1.AcessoMetodoOuPropriedade) {
|
|
48145
48240
|
const acesso = expressao.entidadeChamada;
|
|
48146
48241
|
const objeto = await acesso.objeto.aceitar(this);
|
|
48147
48242
|
const simbolo = this.converterIdentificador(acesso.simbolo.lexema);
|
|
@@ -48345,7 +48440,7 @@ class TradutorElixir {
|
|
|
48345
48440
|
}
|
|
48346
48441
|
exports.TradutorElixir = TradutorElixir;
|
|
48347
48442
|
|
|
48348
|
-
},{"../tipos-de-simbolos/delegua":258}],280:[function(require,module,exports){
|
|
48443
|
+
},{"../construtos":67,"../declaracoes":117,"../tipos-de-simbolos/delegua":258}],280:[function(require,module,exports){
|
|
48349
48444
|
"use strict";
|
|
48350
48445
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
48351
48446
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -48538,11 +48633,13 @@ class TradutorJavaScript {
|
|
|
48538
48633
|
resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
|
|
48539
48634
|
let operador = this.traduzirSimboloOperador(binario.operador);
|
|
48540
48635
|
resultado += ` ${operador} `;
|
|
48541
|
-
if (binario.direita.constructor
|
|
48636
|
+
if (binario.direita.constructor === construtos_1.Agrupamento) {
|
|
48637
|
+
const agrupamentoDireita = binario.direita;
|
|
48542
48638
|
resultado +=
|
|
48543
48639
|
'(' +
|
|
48544
|
-
this.dicionarioConstrutos[
|
|
48640
|
+
this.dicionarioConstrutos[agrupamentoDireita.constructor.name](binario.direita) +
|
|
48545
48641
|
')';
|
|
48642
|
+
}
|
|
48546
48643
|
else
|
|
48547
48644
|
resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
|
|
48548
48645
|
return resultado;
|
|
@@ -48799,7 +48896,7 @@ class TradutorJavaScript {
|
|
|
48799
48896
|
}
|
|
48800
48897
|
traduzirDeclaracaoPara(declaracaoPara) {
|
|
48801
48898
|
let resultado = 'for (';
|
|
48802
|
-
if (declaracaoPara.inicializador
|
|
48899
|
+
if (Array.isArray(declaracaoPara.inicializador)) {
|
|
48803
48900
|
resultado +=
|
|
48804
48901
|
this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0], false) + '; ';
|
|
48805
48902
|
}
|
|
@@ -50532,7 +50629,7 @@ class TradutorPython {
|
|
|
50532
50629
|
if (funcao.corpo.length > 0) {
|
|
50533
50630
|
const primeiraDeclaracao = funcao.corpo[0];
|
|
50534
50631
|
// Se for uma declaração de retorno, extraímos a expressão
|
|
50535
|
-
if (primeiraDeclaracao
|
|
50632
|
+
if (primeiraDeclaracao instanceof declaracoes_1.Retorna) {
|
|
50536
50633
|
const retorna = primeiraDeclaracao;
|
|
50537
50634
|
if (retorna.valor) {
|
|
50538
50635
|
expressao = this.dicionarioConstrutos[retorna.valor.constructor.name](retorna.valor);
|
|
@@ -50645,14 +50742,14 @@ class TradutorPython {
|
|
|
50645
50742
|
traduzirConstrutoBinario(binario) {
|
|
50646
50743
|
let resultado = '';
|
|
50647
50744
|
const valorEsquerdo = this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
|
|
50648
|
-
if (binario.esquerda
|
|
50745
|
+
if (binario.esquerda instanceof construtos_1.Agrupamento)
|
|
50649
50746
|
resultado += '(' + valorEsquerdo + ')';
|
|
50650
50747
|
else
|
|
50651
50748
|
resultado += valorEsquerdo;
|
|
50652
50749
|
let operador = this.traduzirSimboloOperador(binario.operador);
|
|
50653
50750
|
resultado += ` ${operador} `;
|
|
50654
50751
|
const valorDireito = this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
|
|
50655
|
-
if (binario.direita
|
|
50752
|
+
if (binario.direita instanceof construtos_1.Agrupamento)
|
|
50656
50753
|
resultado += '(' + valorDireito + ')';
|
|
50657
50754
|
else
|
|
50658
50755
|
resultado += valorDireito;
|
|
@@ -51401,6 +51498,7 @@ class TradutorReversoJavaScript {
|
|
|
51401
51498
|
LogicalExpression: this.traduzirConstrutoLogico.bind(this),
|
|
51402
51499
|
MemberExpression: this.traduzirExpressao.bind(this),
|
|
51403
51500
|
NewExpression: this.traduzirNovo.bind(this),
|
|
51501
|
+
ObjectExpression: this.traduzirConstrutoObjeto.bind(this),
|
|
51404
51502
|
ThisExpression: () => 'isto',
|
|
51405
51503
|
UpdateExpression: this.traduzirAtualizacaoVariavel.bind(this),
|
|
51406
51504
|
// Variavel: this.traduzirConstrutoVariavel.bind(this),
|
|
@@ -51476,6 +51574,31 @@ class TradutorReversoJavaScript {
|
|
|
51476
51574
|
traduzirIdentificador(identificador) {
|
|
51477
51575
|
return identificador.name;
|
|
51478
51576
|
}
|
|
51577
|
+
traduzirConstrutoObjeto(objeto) {
|
|
51578
|
+
if (!objeto.properties.length) {
|
|
51579
|
+
return '{}';
|
|
51580
|
+
}
|
|
51581
|
+
let resultado = '{';
|
|
51582
|
+
for (const propriedade of objeto.properties) {
|
|
51583
|
+
if (propriedade.type === 'SpreadElement') {
|
|
51584
|
+
const spread = propriedade;
|
|
51585
|
+
resultado +=
|
|
51586
|
+
'...' + this.dicionarioConstrutos[spread.argument.type](spread.argument) + ', ';
|
|
51587
|
+
continue;
|
|
51588
|
+
}
|
|
51589
|
+
const propriedadeObjeto = propriedade;
|
|
51590
|
+
const chave = propriedadeObjeto.key.type === 'Identifier'
|
|
51591
|
+
? `'${propriedadeObjeto.key.name}'`
|
|
51592
|
+
: this.dicionarioConstrutos[propriedadeObjeto.key.type](propriedadeObjeto.key);
|
|
51593
|
+
const valor = this.dicionarioConstrutos[propriedadeObjeto.value.type](propriedadeObjeto.value);
|
|
51594
|
+
resultado += `${chave}: ${valor}, `;
|
|
51595
|
+
}
|
|
51596
|
+
if (objeto.properties.length > 0) {
|
|
51597
|
+
resultado = resultado.slice(0, -2);
|
|
51598
|
+
}
|
|
51599
|
+
resultado += '}';
|
|
51600
|
+
return resultado;
|
|
51601
|
+
}
|
|
51479
51602
|
traduzirAtualizacaoVariavel(atualizarVariavel) {
|
|
51480
51603
|
let resultado = '';
|
|
51481
51604
|
resultado += this.dicionarioConstrutos[atualizarVariavel.argument.constructor.name](atualizarVariavel.argument);
|
|
@@ -51532,6 +51655,8 @@ class TradutorReversoJavaScript {
|
|
|
51532
51655
|
return 'verdadeiro';
|
|
51533
51656
|
if (literal.raw === 'false')
|
|
51534
51657
|
return 'falso';
|
|
51658
|
+
if (literal.value === null || literal.raw === 'null')
|
|
51659
|
+
return 'nulo';
|
|
51535
51660
|
return `${literal.raw}`;
|
|
51536
51661
|
}
|
|
51537
51662
|
traduzirConstrutoBinario(binario) {
|
|
@@ -51676,7 +51801,7 @@ class TradutorReversoJavaScript {
|
|
|
51676
51801
|
resultado += this.logicaComumBlocoEscopo(declaracao.consequent);
|
|
51677
51802
|
if (declaracao?.alternate) {
|
|
51678
51803
|
resultado += 'senao ';
|
|
51679
|
-
if (declaracao.alternate.
|
|
51804
|
+
if (declaracao.alternate.type === 'BlockStatement') {
|
|
51680
51805
|
const bloco = declaracao.alternate;
|
|
51681
51806
|
resultado += this.logicaComumBlocoEscopo(bloco);
|
|
51682
51807
|
return resultado;
|
|
@@ -52776,7 +52901,7 @@ class TradutorReversoTenda {
|
|
|
52776
52901
|
}
|
|
52777
52902
|
traduzirDeclaracaoPara(declaracaoPara) {
|
|
52778
52903
|
let resultado = 'para ';
|
|
52779
|
-
if (declaracaoPara.inicializador
|
|
52904
|
+
if (Array.isArray(declaracaoPara.inicializador)) {
|
|
52780
52905
|
resultado +=
|
|
52781
52906
|
this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0], false) + '; ';
|
|
52782
52907
|
}
|
|
@@ -53196,7 +53321,7 @@ class TradutorRuby {
|
|
|
53196
53321
|
if (funcao.corpo.length > 0) {
|
|
53197
53322
|
const primeiraDeclaracao = funcao.corpo[0];
|
|
53198
53323
|
// Se for uma declaração de retorno, extraímos a expressão
|
|
53199
|
-
if (primeiraDeclaracao
|
|
53324
|
+
if (primeiraDeclaracao instanceof declaracoes_1.Retorna) {
|
|
53200
53325
|
const retorna = primeiraDeclaracao;
|
|
53201
53326
|
if (retorna.valor) {
|
|
53202
53327
|
expressao = this.dicionarioConstrutos[retorna.valor.constructor.name](retorna.valor);
|
|
@@ -53310,14 +53435,14 @@ class TradutorRuby {
|
|
|
53310
53435
|
traduzirConstrutoBinario(binario) {
|
|
53311
53436
|
let resultado = '';
|
|
53312
53437
|
const valorEsquerdo = this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
|
|
53313
|
-
if (binario.esquerda
|
|
53438
|
+
if (binario.esquerda instanceof construtos_1.Agrupamento)
|
|
53314
53439
|
resultado += '(' + valorEsquerdo + ')';
|
|
53315
53440
|
else
|
|
53316
53441
|
resultado += valorEsquerdo;
|
|
53317
53442
|
let operador = this.traduzirSimboloOperador(binario.operador);
|
|
53318
53443
|
resultado += ` ${operador} `;
|
|
53319
53444
|
const valorDireito = this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
|
|
53320
|
-
if (binario.direita
|
|
53445
|
+
if (binario.direita instanceof construtos_1.Agrupamento)
|
|
53321
53446
|
resultado += '(' + valorDireito + ')';
|
|
53322
53447
|
else
|
|
53323
53448
|
resultado += valorDireito;
|