@designliquido/delegua 0.54.2 → 0.54.4
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 +16 -6
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/comum.js +2 -2
- package/avaliador-sintatico/comum.js.map +1 -1
- package/bibliotecas/primitivas-dicionario.js +1 -1
- package/bibliotecas/primitivas-dicionario.js.map +1 -1
- package/bin/package.json +1 -1
- package/interpretador/interpretador-base.js +1 -1
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +45 -28
- package/interpretador/interpretador.js.map +1 -1
- package/package.json +1 -1
- package/umd/delegua.js +66 -39
package/umd/delegua.js
CHANGED
|
@@ -257,13 +257,13 @@ const informacao_escopo_1 = require("./informacao-escopo");
|
|
|
257
257
|
const informacao_elemento_sintatico_1 = require("../informacao-elemento-sintatico");
|
|
258
258
|
const comum_1 = require("./comum");
|
|
259
259
|
const montao_tipos_1 = require("./montao-tipos");
|
|
260
|
+
const elemento_montao_tipos_1 = require("./elemento-montao-tipos");
|
|
260
261
|
const delegua_1 = __importDefault(require("../tipos-de-dados/delegua"));
|
|
261
262
|
const delegua_2 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
262
263
|
const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
|
|
263
264
|
const primitivas_numero_1 = __importDefault(require("../bibliotecas/primitivas-numero"));
|
|
264
265
|
const primitivas_texto_1 = __importDefault(require("../bibliotecas/primitivas-texto"));
|
|
265
266
|
const primitivas_vetor_1 = __importDefault(require("../bibliotecas/primitivas-vetor"));
|
|
266
|
-
const elemento_montao_tipos_1 = require("./elemento-montao-tipos");
|
|
267
267
|
/**
|
|
268
268
|
* O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
|
|
269
269
|
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
|
|
@@ -790,6 +790,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
790
790
|
* @returns A entidade chamada resolvida, se as validações passarem.
|
|
791
791
|
*/
|
|
792
792
|
resolverEntidadeChamada(entidadeChamada, argumentos, tipoPrimitiva = undefined) {
|
|
793
|
+
if (entidadeChamada.constructor === construtos_1.AcessoMetodoOuPropriedade) {
|
|
794
|
+
return this.resolverEntidadeChamadaAcessoMetodoOuPropriedade(entidadeChamada);
|
|
795
|
+
}
|
|
793
796
|
if (entidadeChamada.constructor === construtos_1.Variavel) {
|
|
794
797
|
const entidadeChamadaResolvidaVariavel = entidadeChamada;
|
|
795
798
|
if (tipoPrimitiva === 'qualquer') {
|
|
@@ -822,9 +825,6 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
822
825
|
}
|
|
823
826
|
return new construtos_1.ArgumentoReferenciaFuncao(entidadeChamadaResolvidaVariavel.hashArquivo, entidadeChamadaResolvidaVariavel.linha, entidadeChamadaResolvidaVariavel.simbolo);
|
|
824
827
|
}
|
|
825
|
-
if (entidadeChamada.constructor === construtos_1.AcessoMetodoOuPropriedade) {
|
|
826
|
-
return this.resolverEntidadeChamadaAcessoMetodoOuPropriedade(entidadeChamada);
|
|
827
|
-
}
|
|
828
828
|
return entidadeChamada;
|
|
829
829
|
}
|
|
830
830
|
finalizarChamada(entidadeChamada, tipoPrimitiva = undefined) {
|
|
@@ -1232,7 +1232,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1232
1232
|
if (!this.verificarSeSimboloAtualEIgualA(delegua_2.default.DE, delegua_2.default.EM)) {
|
|
1233
1233
|
throw this.erro(this.simbolos[this.atual], "Esperado palavras reservadas 'em' ou 'de' após variável de iteração em instrução 'para cada'.");
|
|
1234
1234
|
}
|
|
1235
|
-
|
|
1235
|
+
let vetor = this.expressao();
|
|
1236
|
+
if (vetor.constructor === construtos_1.AcessoIndiceVariavel) {
|
|
1237
|
+
const construtoAcessoIndiceVariavel = vetor;
|
|
1238
|
+
if (construtoAcessoIndiceVariavel.entidadeChamada.tipo === 'dicionário') {
|
|
1239
|
+
// A avaliação sintática não deve verificar valores de dicionários.
|
|
1240
|
+
// Aqui se supõe que o programador sabe o que está fazendo.
|
|
1241
|
+
// TODO: Talvez pensar numa forma melhor de fazer isso.
|
|
1242
|
+
vetor.tipo = 'vetor';
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1236
1245
|
if (!vetor.hasOwnProperty('tipo')) {
|
|
1237
1246
|
throw this.erro(simboloPara, `Variável ou constante em 'para cada' não parece possuir um tipo iterável.`);
|
|
1238
1247
|
}
|
|
@@ -1553,7 +1562,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1553
1562
|
switch (entidadeChamadaChamada.constructor) {
|
|
1554
1563
|
case construtos_1.AcessoMetodo:
|
|
1555
1564
|
const entidadeChamadaAcessoMetodo = entidadeChamadaChamada;
|
|
1556
|
-
|
|
1565
|
+
const tipoRetornoAcessoMetodoResolvido = entidadeChamadaAcessoMetodo.tipoRetornoMetodo.replace('<T>', entidadeChamadaAcessoMetodo.objeto.tipo);
|
|
1566
|
+
return tipoRetornoAcessoMetodoResolvido;
|
|
1557
1567
|
case construtos_1.AcessoMetodoOuPropriedade:
|
|
1558
1568
|
// Este caso ocorre quando a variável/constante é do tipo 'qualquer',
|
|
1559
1569
|
// e a chamada normalmente é feita para uma primitiva.
|
|
@@ -2178,8 +2188,8 @@ function logicaDescobertaRetornoFuncao(avaliadorSintatico, declaracoesDaFuncao,
|
|
|
2178
2188
|
}
|
|
2179
2189
|
function registrarPrimitiva(primitivasConhecidas, tipo, catalogoPrimitivas) {
|
|
2180
2190
|
primitivasConhecidas[tipo] = {};
|
|
2181
|
-
for (const [
|
|
2182
|
-
primitivasConhecidas[tipo][
|
|
2191
|
+
for (const [nomePrimitiva, dadosPrimitiva] of Object.entries(catalogoPrimitivas)) {
|
|
2192
|
+
primitivasConhecidas[tipo][nomePrimitiva] = new informacao_elemento_sintatico_1.InformacaoElementoSintatico(nomePrimitiva, dadosPrimitiva.tipoRetorno, true, dadosPrimitiva.argumentos);
|
|
2183
2193
|
}
|
|
2184
2194
|
}
|
|
2185
2195
|
|
|
@@ -6317,7 +6327,7 @@ exports.default = {
|
|
|
6317
6327
|
assinaturaFormato: `dicionário.remover(chave: qualquer)`,
|
|
6318
6328
|
},
|
|
6319
6329
|
valores: {
|
|
6320
|
-
tipoRetorno: '
|
|
6330
|
+
tipoRetorno: '<T>[]',
|
|
6321
6331
|
argumentos: [],
|
|
6322
6332
|
implementacao: (interpretador, nomePrimitiva, valor) => {
|
|
6323
6333
|
return Promise.resolve(Object.values(valor));
|
|
@@ -11288,7 +11298,7 @@ class InterpretadorBase {
|
|
|
11288
11298
|
for (const elemento of interpolacoes) {
|
|
11289
11299
|
// TODO: Há alguma chance de `elemento` ser `undefined` aqui?
|
|
11290
11300
|
let valor = elemento === null || elemento === void 0 ? void 0 : elemento.valor;
|
|
11291
|
-
if (valor.hasOwnProperty('valorRetornado')) {
|
|
11301
|
+
if (valor.hasOwnProperty && valor.hasOwnProperty('valorRetornado')) {
|
|
11292
11302
|
valor = valor.valorRetornado;
|
|
11293
11303
|
}
|
|
11294
11304
|
if (valor.tipo === delegua_2.default.LOGICO) {
|
|
@@ -12541,6 +12551,7 @@ const estruturas_1 = require("./estruturas");
|
|
|
12541
12551
|
const interpretador_base_1 = require("./interpretador-base");
|
|
12542
12552
|
const inferenciador_1 = require("../inferenciador");
|
|
12543
12553
|
const excecoes_1 = require("../excecoes");
|
|
12554
|
+
const declaracoes_1 = require("../declaracoes");
|
|
12544
12555
|
const quebras_1 = require("../quebras");
|
|
12545
12556
|
const montao_1 = require("./montao");
|
|
12546
12557
|
const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
|
|
@@ -12582,17 +12593,19 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
12582
12593
|
if (objeto instanceof quebras_1.RetornoQuebra) {
|
|
12583
12594
|
return this.resolverValor(objeto.valor);
|
|
12584
12595
|
}
|
|
12585
|
-
if (objeto.hasOwnProperty
|
|
12586
|
-
|
|
12587
|
-
|
|
12588
|
-
if (objeto.hasOwnProperty('valor')) {
|
|
12589
|
-
if (Array.isArray(objeto.valor)) {
|
|
12590
|
-
return this.resolverValor(objeto.valor);
|
|
12596
|
+
if (objeto.hasOwnProperty) {
|
|
12597
|
+
if (objeto.hasOwnProperty('valorRetornado')) {
|
|
12598
|
+
return this.resolverValor(objeto.valorRetornado);
|
|
12591
12599
|
}
|
|
12592
|
-
if (objeto.valor
|
|
12593
|
-
|
|
12600
|
+
if (objeto.hasOwnProperty('valor')) {
|
|
12601
|
+
if (Array.isArray(objeto.valor)) {
|
|
12602
|
+
return this.resolverValor(objeto.valor);
|
|
12603
|
+
}
|
|
12604
|
+
if (objeto.valor instanceof estruturas_1.ReferenciaMontao) {
|
|
12605
|
+
return this.resolverReferenciaMontao(objeto.valor);
|
|
12606
|
+
}
|
|
12607
|
+
return objeto.valor;
|
|
12594
12608
|
}
|
|
12595
|
-
return objeto.valor;
|
|
12596
12609
|
}
|
|
12597
12610
|
return objeto;
|
|
12598
12611
|
}
|
|
@@ -12604,7 +12617,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
12604
12617
|
}
|
|
12605
12618
|
if (objeto.valor instanceof estruturas_1.ObjetoPadrao)
|
|
12606
12619
|
return objeto.valor.paraTexto();
|
|
12607
|
-
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
|
|
12620
|
+
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
|
|
12621
|
+
objeto instanceof estruturas_1.DeleguaFuncao)
|
|
12608
12622
|
return objeto.paraTexto();
|
|
12609
12623
|
if (objeto instanceof quebras_1.RetornoQuebra) {
|
|
12610
12624
|
if (typeof objeto.valor === 'boolean')
|
|
@@ -12642,7 +12656,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
12642
12656
|
if (typeof valor === primitivos_1.default.BOOLEANO) {
|
|
12643
12657
|
valor = valor ? 'verdadeiro' : 'falso';
|
|
12644
12658
|
}
|
|
12645
|
-
if (valor instanceof estruturas_1.ReferenciaMontao) {
|
|
12659
|
+
if (valor instanceof estruturas_1.ReferenciaMontao || ((valor === null || valor === void 0 ? void 0 : valor.hasOwnProperty) && (valor === null || valor === void 0 ? void 0 : valor.hasOwnProperty('tipo')))) {
|
|
12646
12660
|
valor = this.resolverValor(valor);
|
|
12647
12661
|
}
|
|
12648
12662
|
objetoEscrita[propriedade] = valor;
|
|
@@ -13035,6 +13049,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13035
13049
|
// Objeto simples do JavaScript, ou dicionário de Delégua.
|
|
13036
13050
|
if (objeto.constructor === Object) {
|
|
13037
13051
|
if (expressao.simbolo.lexema in primitivas_dicionario_1.default) {
|
|
13052
|
+
if (!(expressao.simbolo.lexema in primitivas_numero_1.default)) {
|
|
13053
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo dicionário.`);
|
|
13054
|
+
}
|
|
13038
13055
|
const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.simbolo.lexema].implementacao;
|
|
13039
13056
|
return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaDicionario);
|
|
13040
13057
|
}
|
|
@@ -13056,12 +13073,18 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13056
13073
|
case delegua_1.default.INTEIRO:
|
|
13057
13074
|
case delegua_1.default.NUMERO:
|
|
13058
13075
|
case delegua_1.default.NÚMERO:
|
|
13076
|
+
if (!(expressao.simbolo.lexema in primitivas_numero_1.default)) {
|
|
13077
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo ${tipoObjeto}.`);
|
|
13078
|
+
}
|
|
13059
13079
|
const metodoDePrimitivaNumero = primitivas_numero_1.default[expressao.simbolo.lexema].implementacao;
|
|
13060
13080
|
if (metodoDePrimitivaNumero) {
|
|
13061
13081
|
return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaNumero);
|
|
13062
13082
|
}
|
|
13063
13083
|
break;
|
|
13064
13084
|
case delegua_1.default.TEXTO:
|
|
13085
|
+
if (!(expressao.simbolo.lexema in primitivas_texto_1.default)) {
|
|
13086
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo ${tipoObjeto}.`);
|
|
13087
|
+
}
|
|
13065
13088
|
const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.simbolo.lexema].implementacao;
|
|
13066
13089
|
if (metodoDePrimitivaTexto) {
|
|
13067
13090
|
return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTexto);
|
|
@@ -13075,6 +13098,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13075
13098
|
case delegua_1.default.VETOR_NÚMERO:
|
|
13076
13099
|
case delegua_1.default.VETOR_QUALQUER:
|
|
13077
13100
|
case delegua_1.default.VETOR_TEXTO:
|
|
13101
|
+
if (!(expressao.simbolo.lexema in primitivas_vetor_1.default)) {
|
|
13102
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo ${tipoObjeto}.`);
|
|
13103
|
+
}
|
|
13078
13104
|
const metodoDePrimitivaVetor = primitivas_vetor_1.default[expressao.simbolo.lexema].implementacao;
|
|
13079
13105
|
if (metodoDePrimitivaVetor) {
|
|
13080
13106
|
return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaVetor);
|
|
@@ -13326,41 +13352,42 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13326
13352
|
}
|
|
13327
13353
|
async visitarExpressaoTipoDe(expressao) {
|
|
13328
13354
|
let valorTipoDe = expressao.valor;
|
|
13329
|
-
switch (valorTipoDe.constructor
|
|
13330
|
-
case
|
|
13331
|
-
case
|
|
13332
|
-
case
|
|
13333
|
-
case
|
|
13334
|
-
case
|
|
13335
|
-
case
|
|
13355
|
+
switch (valorTipoDe.constructor) {
|
|
13356
|
+
case construtos_1.AcessoIndiceVariavel:
|
|
13357
|
+
case construtos_1.Agrupamento:
|
|
13358
|
+
case construtos_1.Binario:
|
|
13359
|
+
case construtos_1.Chamada:
|
|
13360
|
+
case construtos_1.Dicionario:
|
|
13361
|
+
case construtos_1.Unario:
|
|
13336
13362
|
valorTipoDe = await this.avaliar(valorTipoDe);
|
|
13337
13363
|
if (valorTipoDe instanceof estruturas_1.ReferenciaMontao) {
|
|
13338
13364
|
valorTipoDe = this.montao.obterReferencia(this.hashArquivoDeclaracaoAtual, this.linhaDeclaracaoAtual, valorTipoDe.endereco);
|
|
13339
13365
|
}
|
|
13340
13366
|
return valorTipoDe.tipo || (0, inferenciador_1.inferirTipoVariavel)(valorTipoDe);
|
|
13341
|
-
case
|
|
13367
|
+
case construtos_1.AcessoMetodo:
|
|
13342
13368
|
const acessoMetodo = valorTipoDe;
|
|
13343
|
-
|
|
13344
|
-
|
|
13369
|
+
const tipoRetornoMetodoResolvido = acessoMetodo.tipoRetornoMetodo.replace('<T>', acessoMetodo.objeto.tipo);
|
|
13370
|
+
return `método<${tipoRetornoMetodoResolvido}>`;
|
|
13371
|
+
case construtos_1.AcessoPropriedade:
|
|
13345
13372
|
const acessoPropriedade = valorTipoDe;
|
|
13346
13373
|
return acessoPropriedade.tipoRetornoPropriedade;
|
|
13347
|
-
case
|
|
13374
|
+
case construtos_1.AcessoMetodoOuPropriedade:
|
|
13348
13375
|
// TODO: Deve ser removido mais futuramente.
|
|
13349
13376
|
// Apenas `AcessoMetodo` e `AcessoPropriedade` devem funcionar aqui.
|
|
13350
13377
|
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, 'Não deveria cair aqui.');
|
|
13351
|
-
case
|
|
13378
|
+
case declaracoes_1.Escreva:
|
|
13352
13379
|
return 'função<vazio>';
|
|
13353
|
-
case
|
|
13380
|
+
case construtos_1.Leia:
|
|
13354
13381
|
return 'função<texto>';
|
|
13355
|
-
case
|
|
13382
|
+
case construtos_1.Literal:
|
|
13356
13383
|
const tipoLiteral = valorTipoDe;
|
|
13357
13384
|
return tipoLiteral.tipo;
|
|
13358
|
-
case
|
|
13385
|
+
case construtos_1.TipoDe:
|
|
13359
13386
|
const alvoTipoDe = await this.avaliar(valorTipoDe);
|
|
13360
13387
|
return `tipo de<${alvoTipoDe}>`;
|
|
13361
|
-
case
|
|
13388
|
+
case construtos_1.Variavel:
|
|
13362
13389
|
return valorTipoDe.tipo;
|
|
13363
|
-
case
|
|
13390
|
+
case construtos_1.Vetor:
|
|
13364
13391
|
const vetor = valorTipoDe;
|
|
13365
13392
|
const apenasValores = vetor.valores.filter((v) => !['ComentarioComoConstruto', 'Separador'].includes(v.constructor.name));
|
|
13366
13393
|
return (0, inferenciador_1.inferirTipoVariavel)(apenasValores);
|
|
@@ -13442,7 +13469,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13442
13469
|
}
|
|
13443
13470
|
exports.Interpretador = Interpretador;
|
|
13444
13471
|
|
|
13445
|
-
},{"../bibliotecas/primitivas-dicionario":20,"../bibliotecas/primitivas-numero":21,"../bibliotecas/primitivas-texto":22,"../bibliotecas/primitivas-vetor":23,"../construtos":49,"../excecoes":106,"../inferenciador":112,"../quebras":176,"../tipos-de-dados/delegua":177,"../tipos-de-dados/primitivos":179,"./estruturas":145,"./interpretador-base":152,"./montao":154}],154:[function(require,module,exports){
|
|
13472
|
+
},{"../bibliotecas/primitivas-dicionario":20,"../bibliotecas/primitivas-numero":21,"../bibliotecas/primitivas-texto":22,"../bibliotecas/primitivas-vetor":23,"../construtos":49,"../declaracoes":93,"../excecoes":106,"../inferenciador":112,"../quebras":176,"../tipos-de-dados/delegua":177,"../tipos-de-dados/primitivos":179,"./estruturas":145,"./interpretador-base":152,"./montao":154}],154:[function(require,module,exports){
|
|
13446
13473
|
"use strict";
|
|
13447
13474
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13448
13475
|
exports.Montao = void 0;
|