@designliquido/delegua 1.16.3 → 1.17.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.
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts +2 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +87 -12
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts +4 -4
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +55 -20
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts +68 -11
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js +433 -62
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +9 -0
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js +30 -0
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
- package/bibliotecas/primitivas-dicionario.d.ts.map +1 -1
- package/bibliotecas/primitivas-dicionario.js +31 -0
- package/bibliotecas/primitivas-dicionario.js.map +1 -1
- package/bin/package.json +1 -1
- package/construtos/ajuda-como-construto.d.ts +2 -2
- package/construtos/ajuda-como-construto.d.ts.map +1 -1
- package/construtos/ajuda-como-construto.js.map +1 -1
- package/declaracoes/se.d.ts +4 -7
- package/declaracoes/se.d.ts.map +1 -1
- package/declaracoes/se.js.map +1 -1
- package/declaracoes/var.d.ts +2 -2
- package/declaracoes/var.d.ts.map +1 -1
- package/declaracoes/var.js.map +1 -1
- package/estilizador/quebrador-linha.d.ts.map +1 -1
- package/estilizador/quebrador-linha.js +13 -0
- package/estilizador/quebrador-linha.js.map +1 -1
- package/estilizador/regras/index.d.ts +1 -0
- package/estilizador/regras/index.d.ts.map +1 -1
- package/estilizador/regras/index.js +1 -0
- package/estilizador/regras/index.js.map +1 -1
- package/estilizador/regras/regra-convencao-nomenclatura.d.ts +3 -0
- package/estilizador/regras/regra-convencao-nomenclatura.d.ts.map +1 -1
- package/estilizador/regras/regra-convencao-nomenclatura.js +34 -14
- package/estilizador/regras/regra-convencao-nomenclatura.js.map +1 -1
- package/estilizador/regras/regra-explicitar-tipos-parametros.d.ts +16 -0
- package/estilizador/regras/regra-explicitar-tipos-parametros.d.ts.map +1 -0
- package/estilizador/regras/regra-explicitar-tipos-parametros.js +50 -0
- package/estilizador/regras/regra-explicitar-tipos-parametros.js.map +1 -0
- package/formatadores/formatador-delegua.d.ts +1 -0
- package/formatadores/formatador-delegua.d.ts.map +1 -1
- package/formatadores/formatador-delegua.js +9 -3
- package/formatadores/formatador-delegua.js.map +1 -1
- package/interfaces/declaracoes/caminho-se-senao-interface.d.ts +7 -0
- package/interfaces/declaracoes/caminho-se-senao-interface.d.ts.map +1 -0
- package/interfaces/declaracoes/caminho-se-senao-interface.js +3 -0
- package/interfaces/declaracoes/caminho-se-senao-interface.js.map +1 -0
- package/interfaces/declaracoes/index.d.ts +2 -0
- package/interfaces/declaracoes/index.d.ts.map +1 -0
- package/interfaces/declaracoes/index.js +18 -0
- package/interfaces/declaracoes/index.js.map +1 -0
- package/interfaces/interpretador-interface.d.ts +1 -1
- package/interfaces/interpretador-interface.d.ts.map +1 -1
- package/interpretador/argumento-interface.d.ts +1 -1
- package/interpretador/argumento-interface.d.ts.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +60 -107
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +435 -336
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
- package/interpretador/estruturas/chamavel.d.ts +1 -1
- package/interpretador/estruturas/chamavel.d.ts.map +1 -1
- package/interpretador/estruturas/chamavel.js +3 -0
- package/interpretador/estruturas/chamavel.js.map +1 -1
- package/interpretador/estruturas/delegua-funcao.d.ts +2 -2
- package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.js +2 -2
- package/interpretador/estruturas/delegua-funcao.js.map +1 -1
- package/interpretador/estruturas/funcao-padrao.d.ts +2 -2
- package/interpretador/estruturas/funcao-padrao.d.ts.map +1 -1
- package/interpretador/estruturas/funcao-padrao.js +4 -2
- package/interpretador/estruturas/funcao-padrao.js.map +1 -1
- package/interpretador/estruturas/metodo-polimorfico.d.ts +1 -1
- package/interpretador/estruturas/metodo-polimorfico.d.ts.map +1 -1
- package/interpretador/estruturas/metodo-polimorfico.js +2 -2
- package/interpretador/estruturas/metodo-polimorfico.js.map +1 -1
- package/interpretador/interpretador-base.d.ts +18 -11
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +116 -232
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts +2 -6
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +126 -11
- package/interpretador/interpretador.js.map +1 -1
- package/lexador/dialetos/lexador-portugol-ipt.d.ts.map +1 -1
- package/lexador/dialetos/lexador-portugol-ipt.js +71 -19
- package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
- package/lexador/dialetos/palavras-reservadas/portugol-ipt.d.ts +34 -6
- package/lexador/dialetos/palavras-reservadas/portugol-ipt.d.ts.map +1 -1
- package/lexador/dialetos/palavras-reservadas/portugol-ipt.js +44 -6
- package/lexador/dialetos/palavras-reservadas/portugol-ipt.js.map +1 -1
- package/lexador/lexador.d.ts.map +1 -1
- package/lexador/lexador.js +20 -1
- package/lexador/lexador.js.map +1 -1
- package/lexador/palavras-reservadas.d.ts +2 -86
- package/lexador/palavras-reservadas.d.ts.map +1 -1
- package/lexador/palavras-reservadas.js.map +1 -1
- package/package.json +1 -1
- package/tipos-de-simbolos/delegua.d.ts +1 -0
- package/tipos-de-simbolos/delegua.d.ts.map +1 -1
- package/tipos-de-simbolos/delegua.js +1 -0
- package/tipos-de-simbolos/delegua.js.map +1 -1
- package/tipos-de-simbolos/portugol-ipt.d.ts +43 -19
- package/tipos-de-simbolos/portugol-ipt.d.ts.map +1 -1
- package/tipos-de-simbolos/portugol-ipt.js +59 -19
- package/tipos-de-simbolos/portugol-ipt.js.map +1 -1
- package/tradutores/tradutor-assemblyscript.js +1 -1
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/tradutores/tradutor-javascript.js +1 -1
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-portugol-ipt.d.ts +34 -12
- package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
- package/tradutores/tradutor-portugol-ipt.js +309 -19
- package/tradutores/tradutor-portugol-ipt.js.map +1 -1
- package/umd/delegua.js +1748 -857
|
@@ -45,6 +45,14 @@ const primitivas_vetor_1 = __importDefault(require("../bibliotecas/primitivas-ve
|
|
|
45
45
|
class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBase {
|
|
46
46
|
constructor(performance = false) {
|
|
47
47
|
super();
|
|
48
|
+
this.pilhaDecoradores = [];
|
|
49
|
+
this.simbolos = [];
|
|
50
|
+
this.erros = [];
|
|
51
|
+
this.tiposDefinidosEmCodigo = {};
|
|
52
|
+
this.interfacesDeclaradas = {};
|
|
53
|
+
this.tiposDefinidosPorBibliotecas = {};
|
|
54
|
+
this.tiposDeFerramentasExternas = {};
|
|
55
|
+
this.primitivasConhecidas = {};
|
|
48
56
|
this.hashArquivo = 0;
|
|
49
57
|
this.atual = 0;
|
|
50
58
|
this.blocos = 0;
|
|
@@ -76,8 +84,33 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
76
84
|
if (!tipoElementarResolvido) {
|
|
77
85
|
throw this.erro(this.simbolos[this.atual], `Tipo de dados desconhecido: '${this.simbolos[this.atual].lexema}'.`);
|
|
78
86
|
}
|
|
87
|
+
if ((tipoElementarResolvido === 'funcao' || tipoElementarResolvido === 'função') &&
|
|
88
|
+
this.verificarTipoProximoSimbolo(delegua_2.default.MENOR)) {
|
|
89
|
+
this.avancarEDevolverAnterior(); // avança por 'funcao'
|
|
90
|
+
this.avancarEDevolverAnterior(); // avança por '<'
|
|
91
|
+
const tiposParametros = [];
|
|
92
|
+
do {
|
|
93
|
+
tiposParametros.push(this.simbolos[this.atual].lexema);
|
|
94
|
+
this.avancarEDevolverAnterior();
|
|
95
|
+
} while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
|
|
96
|
+
// this.atual aponta para '>'
|
|
97
|
+
const tipoFuncaoGenerico = `${tipoElementarResolvido}<${tiposParametros.join(', ')}>`;
|
|
98
|
+
if (this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_ESQUERDO)) {
|
|
99
|
+
this.avancarEDevolverAnterior(); // avança por '>'
|
|
100
|
+
// this.atual aponta para '['
|
|
101
|
+
if (!this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_DIREITO)) {
|
|
102
|
+
throw this.erro(this.simbolos[this.atual], `Esperado símbolo de fechamento do vetor: ']'. Atual: ${this.simbolos[this.atual].lexema}`);
|
|
103
|
+
}
|
|
104
|
+
this.avancarEDevolverAnterior(); // avança por '['
|
|
105
|
+
// this.atual aponta para ']'
|
|
106
|
+
return `${tipoFuncaoGenerico}[]`;
|
|
107
|
+
}
|
|
108
|
+
return tipoFuncaoGenerico;
|
|
109
|
+
}
|
|
79
110
|
if (this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_ESQUERDO)) {
|
|
80
111
|
const tiposVetores = [
|
|
112
|
+
'funcao[]',
|
|
113
|
+
'função[]',
|
|
81
114
|
'inteiro[]',
|
|
82
115
|
'numero[]',
|
|
83
116
|
'número[]',
|
|
@@ -295,7 +328,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
295
328
|
return new construtos_1.ListaCompreensao(Number(this.simbolos[this.atual]), this.hashArquivo, retornoExpressao, vetor, new construtos_1.ParaCadaComoConstruto(retornoExpressao.hashArquivo, retornoExpressao.linha, variavelIteracao, vetor, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
|
|
296
329
|
new declaracoes_1.Se(condicao, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
|
|
297
330
|
new declaracoes_1.Retorna(simboloVariavelIteracao, retornoExpressao),
|
|
298
|
-
]), [],
|
|
331
|
+
]), [], undefined),
|
|
299
332
|
])), retornoExpressao.tipo ? `${retornoExpressao.tipo}[]` : 'qualquer[]');
|
|
300
333
|
}
|
|
301
334
|
async primario() {
|
|
@@ -518,7 +551,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
518
551
|
construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaVetorSelecionada.tipoRetorno);
|
|
519
552
|
break;
|
|
520
553
|
default:
|
|
521
|
-
if (construtoTipado.tipo in this.tiposDefinidosEmCodigo) {
|
|
554
|
+
if (construtoTipado.tipo && construtoTipado.tipo in this.tiposDefinidosEmCodigo) {
|
|
522
555
|
const tipoCorrespondente = this.tiposDefinidosEmCodigo[construtoTipado.tipo];
|
|
523
556
|
const possivelMetodo = tipoCorrespondente.metodos.filter((m) => m.simbolo.lexema === construtoTipado.simbolo.lexema);
|
|
524
557
|
if (possivelMetodo.length > 0) {
|
|
@@ -1158,7 +1191,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1158
1191
|
if (Array.isArray(retornoDeclaracao)) {
|
|
1159
1192
|
declaracoes = declaracoes.concat(retornoDeclaracao);
|
|
1160
1193
|
}
|
|
1161
|
-
else if (retornoDeclaracao
|
|
1194
|
+
else if (retornoDeclaracao != null) {
|
|
1162
1195
|
declaracoes.push(retornoDeclaracao);
|
|
1163
1196
|
}
|
|
1164
1197
|
}
|
|
@@ -1219,7 +1252,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1219
1252
|
const caminhoCondicoes = [await this.expressao()];
|
|
1220
1253
|
this.consumir(delegua_2.default.DOIS_PONTOS, "Esperado ':' após o 'caso'.");
|
|
1221
1254
|
while (this.verificarTipoSimboloAtual(delegua_2.default.CASO)) {
|
|
1222
|
-
this.
|
|
1255
|
+
this.avancarEDevolverAnterior();
|
|
1223
1256
|
caminhoCondicoes.push(await this.expressao());
|
|
1224
1257
|
this.consumir(delegua_2.default.DOIS_PONTOS, "Esperado ':' após declaração do 'caso'.");
|
|
1225
1258
|
}
|
|
@@ -1348,6 +1381,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1348
1381
|
const identificadorModulo = this.avancarEDevolverAnterior();
|
|
1349
1382
|
construtoCaminhoModulo = new construtos_1.Literal(identificadorModulo.hashArquivo, Number(identificadorModulo.linha), identificadorModulo.lexema);
|
|
1350
1383
|
break;
|
|
1384
|
+
default:
|
|
1385
|
+
throw this.erro(this.simbolos[this.atual], "Esperado caminho do módulo como texto ou identificador em declaração de importação.");
|
|
1351
1386
|
}
|
|
1352
1387
|
const importar = new declaracoes_1.Importar(construtoCaminhoModulo);
|
|
1353
1388
|
if (identificadorDeTudo !== null) {
|
|
@@ -1518,7 +1553,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1518
1553
|
async declaracaoSe() {
|
|
1519
1554
|
const condicao = await this.expressao();
|
|
1520
1555
|
const caminhoEntao = (await this.resolverDeclaracao());
|
|
1521
|
-
let caminhoSenao =
|
|
1556
|
+
let caminhoSenao = undefined;
|
|
1522
1557
|
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.SENAO, delegua_2.default.SENÃO)) {
|
|
1523
1558
|
caminhoSenao = await this.resolverDeclaracao();
|
|
1524
1559
|
}
|
|
@@ -1635,7 +1670,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1635
1670
|
const inicializador = await this.expressao();
|
|
1636
1671
|
const retornos = [];
|
|
1637
1672
|
for (let identificador of identificadores) {
|
|
1638
|
-
this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, this.logicaComumInferenciaTiposVariaveisEConstantes(inicializador, 'qualquer')));
|
|
1673
|
+
this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, this.logicaComumInferenciaTiposVariaveisEConstantes(inicializador, 'qualquer') ?? 'qualquer'));
|
|
1639
1674
|
const declaracaoVar = new declaracoes_1.Var(identificador, new construtos_1.AcessoMetodoOuPropriedade(this.hashArquivo, inicializador, identificador));
|
|
1640
1675
|
declaracaoVar.decoradores = Array.from(this.pilhaDecoradores);
|
|
1641
1676
|
retornos.push(declaracaoVar);
|
|
@@ -1686,8 +1721,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1686
1721
|
if (entidadeChamadaAcessoIndiceVariavel.constructor === construtos_1.AcessoIndiceVariavel) {
|
|
1687
1722
|
return this.logicaComumInferenciaTiposVariaveisEConstantes(entidadeChamadaAcessoIndiceVariavel, tipo);
|
|
1688
1723
|
}
|
|
1689
|
-
|
|
1690
|
-
|
|
1724
|
+
const tipoEntidadeChamadaAcessoIndiceVariavel = entidadeChamadaAcessoIndiceVariavel.tipo;
|
|
1725
|
+
if (tipoEntidadeChamadaAcessoIndiceVariavel.endsWith('[]')) {
|
|
1726
|
+
return tipoEntidadeChamadaAcessoIndiceVariavel.slice(0, -2);
|
|
1691
1727
|
}
|
|
1692
1728
|
// Normalmente, `entidadeChamadaAcessoIndiceVariavel.tipo` aqui será 'vetor'.
|
|
1693
1729
|
return 'qualquer';
|
|
@@ -1790,7 +1826,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1790
1826
|
// Inicialização de variáveis sem valor.
|
|
1791
1827
|
for (let identificador of identificadores.values()) {
|
|
1792
1828
|
this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, tipo));
|
|
1793
|
-
retorno.push(new declaracoes_1.Var(identificador,
|
|
1829
|
+
retorno.push(new declaracoes_1.Var(identificador, undefined, tipo, tipoExplicito, Array.from(this.pilhaDecoradores)));
|
|
1794
1830
|
}
|
|
1795
1831
|
this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
|
|
1796
1832
|
this.pilhaDecoradores = [];
|
|
@@ -1805,7 +1841,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1805
1841
|
}
|
|
1806
1842
|
for (let [indice, identificador] of identificadores.entries()) {
|
|
1807
1843
|
const tipoOriginal = tipo; // Preserva o tipo antes da inferência
|
|
1808
|
-
tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo);
|
|
1844
|
+
tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo) ?? tipo;
|
|
1809
1845
|
if (tipo !== 'dicionário') {
|
|
1810
1846
|
this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, tipo));
|
|
1811
1847
|
}
|
|
@@ -1873,7 +1909,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1873
1909
|
let retorno = [];
|
|
1874
1910
|
for (let [indice, identificador] of identificadores.entries()) {
|
|
1875
1911
|
// Se tipo ainda não foi definido, infere.
|
|
1876
|
-
tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo);
|
|
1912
|
+
tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo) ?? tipo;
|
|
1877
1913
|
if (tipo !== 'dicionário') {
|
|
1878
1914
|
this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, tipo));
|
|
1879
1915
|
}
|
|
@@ -1913,8 +1949,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1913
1949
|
const parametros = [];
|
|
1914
1950
|
do {
|
|
1915
1951
|
const parametro = {};
|
|
1916
|
-
if (this.
|
|
1917
|
-
this.consumir(delegua_2.default.MULTIPLICACAO, null);
|
|
1952
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.RETICENCIAS)) {
|
|
1918
1953
|
parametro.abrangencia = 'multiplo';
|
|
1919
1954
|
}
|
|
1920
1955
|
else {
|
|
@@ -2111,7 +2146,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2111
2146
|
continue;
|
|
2112
2147
|
}
|
|
2113
2148
|
// Documentário (/** ... */)
|
|
2114
|
-
let docAtual =
|
|
2149
|
+
let docAtual = undefined;
|
|
2115
2150
|
if (this.simbolos[this.atual].tipo === delegua_2.default.DOCUMENTARIO) {
|
|
2116
2151
|
const simboloDoc = this.avancarEDevolverAnterior();
|
|
2117
2152
|
docAtual = new construtos_1.ComentarioComoConstruto(simboloDoc);
|
|
@@ -2514,10 +2549,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2514
2549
|
await this.resolverDecoradores();
|
|
2515
2550
|
}
|
|
2516
2551
|
// Documentário (/** ... */) antes de uma declaração de função.
|
|
2517
|
-
let
|
|
2552
|
+
let documentacaoTopo = undefined;
|
|
2518
2553
|
if (this.verificarTipoSimboloAtual(delegua_2.default.DOCUMENTARIO)) {
|
|
2519
2554
|
const simboloDoc = this.avancarEDevolverAnterior();
|
|
2520
|
-
|
|
2555
|
+
documentacaoTopo = new construtos_1.ComentarioComoConstruto(simboloDoc);
|
|
2521
2556
|
}
|
|
2522
2557
|
// Decoradores podem aparecer após um documentário.
|
|
2523
2558
|
while (this.verificarTipoSimboloAtual(delegua_2.default.ARROBA)) {
|
|
@@ -2534,13 +2569,13 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2534
2569
|
}
|
|
2535
2570
|
const declaracaoFuncao = (await this.funcao('funcao'));
|
|
2536
2571
|
declaracaoFuncao.eFuncaoDeDecorador = true;
|
|
2537
|
-
declaracaoFuncao.documentacao =
|
|
2572
|
+
declaracaoFuncao.documentacao = documentacaoTopo;
|
|
2538
2573
|
return declaracaoFuncao;
|
|
2539
2574
|
}
|
|
2540
2575
|
if (this.verificarTipoProximoSimbolo(delegua_2.default.IDENTIFICADOR)) {
|
|
2541
2576
|
this.avancarEDevolverAnterior();
|
|
2542
2577
|
const declaracaoFuncao = (await this.funcao('funcao'));
|
|
2543
|
-
declaracaoFuncao.documentacao =
|
|
2578
|
+
declaracaoFuncao.documentacao = documentacaoTopo;
|
|
2544
2579
|
return declaracaoFuncao;
|
|
2545
2580
|
}
|
|
2546
2581
|
}
|
|
@@ -2558,7 +2593,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2558
2593
|
catch (erro) {
|
|
2559
2594
|
this.sincronizar();
|
|
2560
2595
|
this.erros.push(erro);
|
|
2561
|
-
return
|
|
2596
|
+
return undefined;
|
|
2562
2597
|
}
|
|
2563
2598
|
}
|
|
2564
2599
|
/**
|
|
@@ -2873,7 +2908,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2873
2908
|
if (Array.isArray(retornoDeclaracao)) {
|
|
2874
2909
|
declaracoes = declaracoes.concat(retornoDeclaracao);
|
|
2875
2910
|
}
|
|
2876
|
-
else if (retornoDeclaracao
|
|
2911
|
+
else if (retornoDeclaracao != null) {
|
|
2877
2912
|
declaracoes.push(retornoDeclaracao);
|
|
2878
2913
|
}
|
|
2879
2914
|
}
|