@designliquido/delegua 1.9.0 → 1.11.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.map +1 -1
- package/analisador-semantico/analisador-semantico-base.js +6 -0
- package/analisador-semantico/analisador-semantico-base.js.map +1 -1
- package/analisador-semantico/analisador-semantico.d.ts +11 -3
- package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico.js +109 -8
- package/analisador-semantico/analisador-semantico.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts +8 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +274 -115
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
- package/bibliotecas/primitivas-texto.d.ts.map +1 -1
- package/bibliotecas/primitivas-texto.js +69 -0
- package/bibliotecas/primitivas-texto.js.map +1 -1
- package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/primitivas-vetor.js +18 -0
- package/bibliotecas/primitivas-vetor.js.map +1 -1
- package/bin/package.json +2 -2
- package/construtos/isto.d.ts +1 -0
- package/construtos/isto.d.ts.map +1 -1
- package/construtos/isto.js +1 -0
- package/construtos/isto.js.map +1 -1
- package/declaracoes/classe.d.ts +5 -2
- package/declaracoes/classe.d.ts.map +1 -1
- package/declaracoes/classe.js +13 -4
- package/declaracoes/classe.js.map +1 -1
- package/declaracoes/extensao.d.ts +13 -0
- package/declaracoes/extensao.d.ts.map +1 -0
- package/declaracoes/extensao.js +26 -0
- package/declaracoes/extensao.js.map +1 -0
- package/declaracoes/index.d.ts +1 -0
- package/declaracoes/index.d.ts.map +1 -1
- package/declaracoes/index.js +1 -0
- package/declaracoes/index.js.map +1 -1
- package/interfaces/visitante-delegua-interface.d.ts +2 -1
- package/interfaces/visitante-delegua-interface.d.ts.map +1 -1
- package/interpretador/comum.d.ts.map +1 -1
- package/interpretador/comum.js +10 -0
- package/interpretador/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 -0
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/interpretador/estruturas/delegua-funcao.d.ts +3 -2
- package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.js +26 -2
- package/interpretador/estruturas/delegua-funcao.js.map +1 -1
- package/interpretador/estruturas/descritor-tipo-classe.d.ts +14 -4
- package/interpretador/estruturas/descritor-tipo-classe.d.ts.map +1 -1
- package/interpretador/estruturas/descritor-tipo-classe.js +89 -29
- package/interpretador/estruturas/descritor-tipo-classe.js.map +1 -1
- package/interpretador/estruturas/objeto-base.d.ts.map +1 -1
- package/interpretador/estruturas/objeto-base.js +8 -4
- package/interpretador/estruturas/objeto-base.js.map +1 -1
- package/interpretador/estruturas/objeto-delegua-classe.d.ts +1 -0
- package/interpretador/estruturas/objeto-delegua-classe.d.ts.map +1 -1
- package/interpretador/estruturas/objeto-delegua-classe.js +35 -21
- package/interpretador/estruturas/objeto-delegua-classe.js.map +1 -1
- package/interpretador/interpretador-base.d.ts +13 -1
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +146 -29
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +77 -15
- package/interpretador/interpretador.js.map +1 -1
- package/lexador/palavras-reservadas.d.ts +3 -0
- package/lexador/palavras-reservadas.d.ts.map +1 -1
- package/lexador/palavras-reservadas.js +3 -0
- package/lexador/palavras-reservadas.js.map +1 -1
- package/package.json +2 -2
- package/tipos-de-simbolos/delegua.d.ts +2 -0
- package/tipos-de-simbolos/delegua.d.ts.map +1 -1
- package/tipos-de-simbolos/delegua.js +2 -0
- package/tipos-de-simbolos/delegua.js.map +1 -1
- package/umd/delegua.js +1296 -609
|
@@ -8,55 +8,69 @@ const excecoes_1 = require("../../excecoes");
|
|
|
8
8
|
* Métodos são extraídos do descritor da classe, uma `DeleguaClasse`.
|
|
9
9
|
*/
|
|
10
10
|
class ObjetoDeleguaClasse {
|
|
11
|
+
valorPadraoParaTipo(tipo) {
|
|
12
|
+
switch (tipo) {
|
|
13
|
+
case 'numero': return 0;
|
|
14
|
+
case 'texto': return '';
|
|
15
|
+
case 'logico': return false;
|
|
16
|
+
default: return undefined;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
11
19
|
constructor(classe) {
|
|
12
20
|
this.classe = classe;
|
|
13
21
|
this.propriedades = {};
|
|
14
|
-
|
|
15
|
-
|
|
22
|
+
// Inicializar propriedades herdadas do OReM (do mais genérico ao mais específico)
|
|
23
|
+
// para que ancestrais mais próximos sobrescrevam os mais distantes.
|
|
24
|
+
const ancestrais = classe.orem.slice(1).reverse();
|
|
25
|
+
for (const ancestral of ancestrais) {
|
|
26
|
+
for (const propriedade of ancestral.propriedades) {
|
|
16
27
|
if (propriedade.estatico)
|
|
17
28
|
continue;
|
|
18
29
|
if (propriedade.autoObter || propriedade.autoDefinir) {
|
|
19
|
-
this.propriedades['_' + propriedade.nome.lexema] =
|
|
30
|
+
this.propriedades['_' + propriedade.nome.lexema] = this.valorPadraoParaTipo(propriedade.tipo);
|
|
20
31
|
}
|
|
21
32
|
else {
|
|
22
|
-
this.propriedades[propriedade.nome.lexema] =
|
|
33
|
+
this.propriedades[propriedade.nome.lexema] = this.valorPadraoParaTipo(propriedade.tipo);
|
|
23
34
|
}
|
|
24
35
|
}
|
|
25
36
|
}
|
|
26
|
-
|
|
37
|
+
// Propriedades da própria classe (têm prioridade máxima no valor padrão)
|
|
38
|
+
for (const propriedade of classe.propriedades) {
|
|
27
39
|
if (propriedade.estatico)
|
|
28
40
|
continue;
|
|
29
41
|
if (propriedade.autoObter || propriedade.autoDefinir) {
|
|
30
|
-
this.propriedades['_' + propriedade.nome.lexema] =
|
|
42
|
+
this.propriedades['_' + propriedade.nome.lexema] = this.valorPadraoParaTipo(propriedade.tipo);
|
|
31
43
|
}
|
|
32
44
|
else {
|
|
33
|
-
this.propriedades[propriedade.nome.lexema] =
|
|
45
|
+
this.propriedades[propriedade.nome.lexema] = this.valorPadraoParaTipo(propriedade.tipo);
|
|
34
46
|
}
|
|
35
47
|
}
|
|
36
48
|
}
|
|
37
49
|
verificarAcessoLeitura(nome, simbolo, visitante) {
|
|
38
|
-
var _a, _b, _c, _d, _e;
|
|
39
|
-
|
|
50
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
51
|
+
// Percorre o OReM para encontrar a classe que declarou o membro com um modificador de acesso.
|
|
52
|
+
let declaradorClasse = undefined;
|
|
53
|
+
let acesso = undefined;
|
|
54
|
+
for (const cls of this.classe.orem) {
|
|
55
|
+
const acessoCls = (_b = (_a = cls.acessoPropriedades) === null || _a === void 0 ? void 0 : _a[nome]) !== null && _b !== void 0 ? _b : (_c = cls.acessoMetodos) === null || _c === void 0 ? void 0 : _c[nome];
|
|
56
|
+
if (acessoCls) {
|
|
57
|
+
acesso = acessoCls;
|
|
58
|
+
declaradorClasse = cls;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
40
62
|
if (!acesso || acesso === 'publico')
|
|
41
63
|
return;
|
|
42
64
|
const classeAtual = visitante === null || visitante === void 0 ? void 0 : visitante.classeAtualEmExecucao;
|
|
43
65
|
if (acesso === 'privado') {
|
|
44
|
-
if (classeAtual !==
|
|
45
|
-
throw new excecoes_1.ErroEmTempoDeExecucao(simbolo, `Membro '${nome}' é privado e não pode ser acessado fora da classe '${(_d =
|
|
66
|
+
if (classeAtual !== declaradorClasse) {
|
|
67
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(simbolo, `Membro '${nome}' é privado e não pode ser acessado fora da classe '${(_d = declaradorClasse.simboloOriginal) === null || _d === void 0 ? void 0 : _d.lexema}'.`);
|
|
46
68
|
}
|
|
47
69
|
}
|
|
48
70
|
else if (acesso === 'protegido') {
|
|
49
|
-
|
|
50
|
-
let eAcessivel = false;
|
|
51
|
-
while (cls) {
|
|
52
|
-
if (cls === this.classe) {
|
|
53
|
-
eAcessivel = true;
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
cls = cls.superClasse;
|
|
57
|
-
}
|
|
71
|
+
const eAcessivel = (_f = (_e = classeAtual === null || classeAtual === void 0 ? void 0 : classeAtual.orem) === null || _e === void 0 ? void 0 : _e.includes(declaradorClasse)) !== null && _f !== void 0 ? _f : false;
|
|
58
72
|
if (!eAcessivel) {
|
|
59
|
-
throw new excecoes_1.ErroEmTempoDeExecucao(simbolo, `Membro '${nome}' é protegido e não pode ser acessado fora da hierarquia da classe '${(
|
|
73
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(simbolo, `Membro '${nome}' é protegido e não pode ser acessado fora da hierarquia da classe '${(_g = declaradorClasse.simboloOriginal) === null || _g === void 0 ? void 0 : _g.lexema}'.`);
|
|
60
74
|
}
|
|
61
75
|
}
|
|
62
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objeto-delegua-classe.js","sourceRoot":"","sources":["../../../fontes/interpretador/estruturas/objeto-delegua-classe.ts"],"names":[],"mappings":";;;AAAA,6CAAuD;AAIvD;;;;GAIG;AACH,MAAa,mBAAmB;
|
|
1
|
+
{"version":3,"file":"objeto-delegua-classe.js","sourceRoot":"","sources":["../../../fontes/interpretador/estruturas/objeto-delegua-classe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Bloco, CabecalhoPrograma, Classe, Comentario, Const, ConstMultiplo, Continua, Declaracao, Enquanto, Escolha, Escreva, EscrevaMesmaLinha, Expressao, Falhar, Fazer, FuncaoDeclaracao, Importar, InicioAlgoritmo, InterfaceDeclaracao, Para, ParaCada, Retorna, Se, TendoComo, Tente, TextoDocumentacao, Var, VarMultiplo } from '../declaracoes';
|
|
1
|
+
import { Bloco, CabecalhoPrograma, Classe, Comentario, Const, ConstMultiplo, Continua, Declaracao, Enquanto, Escolha, Escreva, EscrevaMesmaLinha, Expressao, Extensao, Falhar, Fazer, FuncaoDeclaracao, Importar, InicioAlgoritmo, InterfaceDeclaracao, Para, ParaCada, Retorna, Se, TendoComo, Tente, TextoDocumentacao, Var, VarMultiplo } from '../declaracoes';
|
|
2
2
|
import { DescritorTipoClasse, DeleguaFuncao, DeleguaModulo } from './estruturas';
|
|
3
3
|
import { AcessoIndiceVariavel, AcessoIntervaloVariavel, AcessoMetodo, AcessoMetodoOuPropriedade, AcessoPropriedade, Agrupamento, ArgumentoReferenciaFuncao, AtribuicaoPorIndice, Atribuir, Chamada, ComentarioComoConstruto, Construto, DefinirValor, Dicionario, ExpressaoRegular, FimPara, FormatacaoEscrita, FuncaoConstruto, Leia, Literal, Logico, ReferenciaFuncao, Separador, Super, TipoDe, Tupla, TuplaN, Unario, Variavel, Vetor, Isto, Binario } from '../construtos';
|
|
4
4
|
import { ErroInterpretadorInterface } from '../interfaces/erros/erro-interpretador-interface';
|
|
@@ -37,6 +37,8 @@ export declare class InterpretadorBase implements InterpretadorInterface {
|
|
|
37
37
|
interfaceEntradaSaida: any;
|
|
38
38
|
emDeclaracaoTente: boolean;
|
|
39
39
|
pilhaEscoposExecucao: PilhaEscoposExecucaoInterface;
|
|
40
|
+
extensoesGlobais: Map<string, Map<string, DeleguaFuncao>>;
|
|
41
|
+
extensoesModulo: Map<number, Map<string, Map<string, DeleguaFuncao>>>;
|
|
40
42
|
microLexador: MicroLexador;
|
|
41
43
|
microAvaliadorSintatico: MicroAvaliadorSintaticoBase;
|
|
42
44
|
regexInterpolacao: RegExp;
|
|
@@ -271,6 +273,16 @@ export declare class InterpretadorBase implements InterpretadorInterface {
|
|
|
271
273
|
* o nome para possíveis verificações futuras (ex: `eInstanciaDe`).
|
|
272
274
|
*/
|
|
273
275
|
visitarDeclaracaoInterface(_declaracao: InterfaceDeclaracao): Promise<void>;
|
|
276
|
+
/**
|
|
277
|
+
* Procura um método de extensão nos registros de módulo e global,
|
|
278
|
+
* percorrendo os tipos na ordem indicada (específico antes de base).
|
|
279
|
+
*/
|
|
280
|
+
encontrarMetodoExtensao(tiposParaVerificar: string[], nomeMetodo: string, hashArquivo: number): DeleguaFuncao | undefined;
|
|
281
|
+
/**
|
|
282
|
+
* Registra os métodos de uma declaração de extensão nos registros
|
|
283
|
+
* de extensão do interpretador.
|
|
284
|
+
*/
|
|
285
|
+
visitarDeclaracaoExtensao(declaracao: Extensao): Promise<void>;
|
|
274
286
|
/**
|
|
275
287
|
* Executa um acesso a método, normalmente de um objeto de classe.
|
|
276
288
|
* @param {AcessoMetodoOuPropriedade} expressao A expressão de acesso.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpretador-base.d.ts","sourceRoot":"","sources":["../../fontes/interpretador/interpretador-base.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,EACL,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,KAAK,EACL,aAAa,EACb,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,EAAE,EACF,SAAS,EACT,KAAK,EACL,iBAAiB,EACjB,GAAG,EACH,WAAW,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEH,mBAAmB,EACnB,aAAa,EAGb,aAAa,EAIhB,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,oBAAoB,EACpB,uBAAuB,EACvB,YAAY,EACZ,yBAAyB,EACzB,iBAAiB,EACjB,WAAW,EACX,yBAAyB,EACzB,mBAAmB,EACnB,QAAQ,EACR,OAAO,EACP,uBAAuB,EAEvB,SAAS,EACT,YAAY,EACZ,UAAU,EAEV,gBAAgB,EAChB,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,IAAI,EACJ,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EACR,KAAK,EAEL,IAAI,EACJ,OAAO,EACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,wDAAwD,CAAC;AAGvG,OAAO,EAAE,eAAe,EAAU,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAC;AAE/F,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AAEpG,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EACH,sBAAsB,EACtB,sCAAsC,EACtC,gBAAgB,EAChB,iBAAiB,EACpB,MAAM,eAAe,CAAC;AASvB;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,YAAW,sBAAsB;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,0BAA0B,EAAE,CAAC;IACpC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,sBAAsB,EAAE,sCAAsC,EAAE,CAAM;IACtE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,0BAA0B,EAAE,MAAM,CAAC;IACnC,qBAAqB,EAAE,GAAG,CAAQ;IAMlC,4CAA4C,EAAE,OAAO,CAAC;IAMtD,4BAA4B,EAAE,OAAO,CAAC;IAEtC,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,QAAQ,CAAQ;IACjC,yBAAyB,EAAE,QAAQ,CAAQ;IAC3C,kBAAkB,EAAE,GAAG,CAAQ;IAC/B,qBAAqB,EAAE,GAAG,CAAQ;IAClC,iBAAiB,EAAE,OAAO,CAAS;IAEnC,oBAAoB,EAAE,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"interpretador-base.d.ts","sourceRoot":"","sources":["../../fontes/interpretador/interpretador-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,10 @@ class InterpretadorBase {
|
|
|
38
38
|
this.interfaceDeEntrada = null; // Originalmente é `readline.Interface`
|
|
39
39
|
this.interfaceEntradaSaida = null;
|
|
40
40
|
this.emDeclaracaoTente = false;
|
|
41
|
+
// typeName → methodName → DeleguaFuncao
|
|
42
|
+
this.extensoesGlobais = new Map();
|
|
43
|
+
// hashArquivo → typeName → methodName → DeleguaFuncao
|
|
44
|
+
this.extensoesModulo = new Map();
|
|
41
45
|
this.microLexador = new lexador_1.MicroLexador();
|
|
42
46
|
this.microAvaliadorSintatico = new avaliador_sintatico_1.MicroAvaliadorSintatico();
|
|
43
47
|
this.regexInterpolacao = /\${(.*?)}/g;
|
|
@@ -327,22 +331,43 @@ class InterpretadorBase {
|
|
|
327
331
|
*/
|
|
328
332
|
async resolverInterpolacoes(textoOriginal, linha) {
|
|
329
333
|
const variaveis = textoOriginal.match(this.regexInterpolacao);
|
|
330
|
-
|
|
334
|
+
return await Promise.all(variaveis.map(async (s) => {
|
|
335
|
+
var _a, _b, _c, _d;
|
|
331
336
|
const expressaoInterpolacao = s.replace(/[\$\{\}]*/gm, '');
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
resultadoMicroAvaliadorSintatico
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
337
|
+
const microLexador = this.microLexador.mapear(expressaoInterpolacao);
|
|
338
|
+
let declaracoes = [];
|
|
339
|
+
try {
|
|
340
|
+
const resultadoMicroAvaliadorSintatico = this.microAvaliadorSintatico.analisar(microLexador, linha);
|
|
341
|
+
for (const erro of resultadoMicroAvaliadorSintatico.erros) {
|
|
342
|
+
this.erros.push({
|
|
343
|
+
erroInterno: erro,
|
|
344
|
+
linha: (_a = erro.linha) !== null && _a !== void 0 ? _a : linha,
|
|
345
|
+
hashArquivo: (_b = erro.hashArquivo) !== null && _b !== void 0 ? _b : -1,
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
declaracoes = resultadoMicroAvaliadorSintatico.declaracoes;
|
|
349
|
+
}
|
|
350
|
+
catch (erroAvaliador) {
|
|
351
|
+
this.erros.push({
|
|
352
|
+
erroInterno: erroAvaliador,
|
|
353
|
+
linha: (_c = erroAvaliador.linha) !== null && _c !== void 0 ? _c : linha,
|
|
354
|
+
hashArquivo: (_d = erroAvaliador.hashArquivo) !== null && _d !== void 0 ? _d : -1,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
let valor = declaracoes.length > 0 ? await this.avaliar(declaracoes[0]) : '';
|
|
358
|
+
const instancia = valor instanceof estruturas_1.ObjetoDeleguaClasse
|
|
359
|
+
? valor
|
|
360
|
+
: (valor === null || valor === void 0 ? void 0 : valor.valor) instanceof estruturas_1.ObjetoDeleguaClasse
|
|
361
|
+
? valor.valor
|
|
362
|
+
: null;
|
|
363
|
+
if (instancia) {
|
|
364
|
+
const metodoParaTexto = instancia.classe.encontrarMetodo('paraTexto');
|
|
365
|
+
if (metodoParaTexto) {
|
|
366
|
+
const funcaoBound = metodoParaTexto.funcaoPorMetodoDeClasse(instancia);
|
|
367
|
+
valor = await funcaoBound.chamar(this, []);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return { expressaoInterpolacao, valor };
|
|
346
371
|
}));
|
|
347
372
|
}
|
|
348
373
|
async visitarExpressaoLiteral(expressao) {
|
|
@@ -1498,18 +1523,30 @@ class InterpretadorBase {
|
|
|
1498
1523
|
* @returns Sempre retorna nulo, por ser requerido pelo contrato de visita.
|
|
1499
1524
|
*/
|
|
1500
1525
|
async visitarDeclaracaoClasse(declaracao) {
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1526
|
+
// Resolver cada superclasse listada em `herda A, B, ...`
|
|
1527
|
+
const superClassesResolvidas = [];
|
|
1528
|
+
for (const superClasseVariavel of declaracao.superClasses) {
|
|
1529
|
+
const variavelSuperClasse = await this.avaliar(superClasseVariavel);
|
|
1530
|
+
const superClasse = variavelSuperClasse.valor;
|
|
1505
1531
|
if (!(superClasse instanceof estruturas_1.DescritorTipoClasse)) {
|
|
1506
|
-
throw new excecoes_1.ErroEmTempoDeExecucao(
|
|
1532
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(superClasseVariavel.nome, 'Superclasse precisa ser uma classe.', declaracao.linha);
|
|
1507
1533
|
}
|
|
1534
|
+
superClassesResolvidas.push(superClasse);
|
|
1535
|
+
}
|
|
1536
|
+
// Resolver cada misturável listado em `mescla X, Y, ...`
|
|
1537
|
+
const mesclaResolvidas = [];
|
|
1538
|
+
for (const mesclaVariavel of declaracao.mesclas) {
|
|
1539
|
+
const variavelMisturavel = await this.avaliar(mesclaVariavel);
|
|
1540
|
+
const misturável = variavelMisturavel.valor;
|
|
1541
|
+
if (!(misturável instanceof estruturas_1.DescritorTipoClasse)) {
|
|
1542
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(mesclaVariavel.nome, 'Misturável precisa ser uma classe.', declaracao.linha);
|
|
1543
|
+
}
|
|
1544
|
+
mesclaResolvidas.push(misturável);
|
|
1508
1545
|
}
|
|
1509
1546
|
// TODO: Precisamos disso?
|
|
1510
1547
|
this.pilhaEscoposExecucao.definirVariavel(declaracao.simbolo.lexema, declaracao);
|
|
1511
|
-
if (
|
|
1512
|
-
this.pilhaEscoposExecucao.definirVariavel('super',
|
|
1548
|
+
if (superClassesResolvidas.length > 0) {
|
|
1549
|
+
this.pilhaEscoposExecucao.definirVariavel('super', superClassesResolvidas[0]);
|
|
1513
1550
|
}
|
|
1514
1551
|
const metodos = {};
|
|
1515
1552
|
const metodosEstaticos = {};
|
|
@@ -1580,7 +1617,7 @@ class InterpretadorBase {
|
|
|
1580
1617
|
acessoPropriedades[prop.nome.lexema] = prop.acesso;
|
|
1581
1618
|
}
|
|
1582
1619
|
}
|
|
1583
|
-
const descritorTipoClasse = new estruturas_1.DescritorTipoClasse(declaracao.simbolo,
|
|
1620
|
+
const descritorTipoClasse = new estruturas_1.DescritorTipoClasse(declaracao.simbolo, superClassesResolvidas, metodos, declaracao.propriedades);
|
|
1584
1621
|
descritorTipoClasse.metodosEstaticos = metodosEstaticos;
|
|
1585
1622
|
descritorTipoClasse.membrosEstaticos = membrosEstaticos;
|
|
1586
1623
|
descritorTipoClasse.obtenedores = obtenedores;
|
|
@@ -1595,13 +1632,43 @@ class InterpretadorBase {
|
|
|
1595
1632
|
// Toda classe sem superclasse explícita herda implicitamente de `Objeto`.
|
|
1596
1633
|
// Isso só deve acontecer quando OBJETO_BASE já estiver inicializado e a classe
|
|
1597
1634
|
// atual não for o próprio OBJETO_BASE, para evitar cadeias de herança recursivas.
|
|
1598
|
-
if (
|
|
1599
|
-
descritorTipoClasse.
|
|
1635
|
+
if (descritorTipoClasse.superClasses.length === 0 && estruturas_1.OBJETO_BASE && descritorTipoClasse !== estruturas_1.OBJETO_BASE) {
|
|
1636
|
+
descritorTipoClasse.superClasses = [estruturas_1.OBJETO_BASE];
|
|
1637
|
+
}
|
|
1638
|
+
// Calcular o OReM (linearização C3) após os pais estarem definidos.
|
|
1639
|
+
descritorTipoClasse.orem = estruturas_1.DescritorTipoClasse.computarOReM(descritorTipoClasse);
|
|
1640
|
+
// Mesclar métodos e propriedades dos misturávels (primeiro misturável ganha se não definido na classe).
|
|
1641
|
+
for (const misturável of mesclaResolvidas) {
|
|
1642
|
+
for (const [nome, funcao] of Object.entries(misturável.metodos)) {
|
|
1643
|
+
if (!descritorTipoClasse.metodos.hasOwnProperty(nome)) {
|
|
1644
|
+
descritorTipoClasse.metodos[nome] = funcao;
|
|
1645
|
+
}
|
|
1646
|
+
}
|
|
1647
|
+
for (const [nome, funcao] of Object.entries(misturável.obtenedores)) {
|
|
1648
|
+
if (!descritorTipoClasse.obtenedores.hasOwnProperty(nome)) {
|
|
1649
|
+
descritorTipoClasse.obtenedores[nome] = funcao;
|
|
1650
|
+
}
|
|
1651
|
+
}
|
|
1652
|
+
for (const [nome, funcao] of Object.entries(misturável.definidores)) {
|
|
1653
|
+
if (!descritorTipoClasse.definidores.hasOwnProperty(nome)) {
|
|
1654
|
+
descritorTipoClasse.definidores[nome] = funcao;
|
|
1655
|
+
}
|
|
1656
|
+
}
|
|
1657
|
+
for (const prop of misturável.propriedades) {
|
|
1658
|
+
const jaDeclarada = descritorTipoClasse.propriedades.some((p) => p.nome.lexema === prop.nome.lexema);
|
|
1659
|
+
if (!jaDeclarada) {
|
|
1660
|
+
descritorTipoClasse.propriedades.push(prop);
|
|
1661
|
+
}
|
|
1662
|
+
}
|
|
1600
1663
|
}
|
|
1601
1664
|
// Verifica se a subclasse concreta implementa todos os métodos abstratos
|
|
1602
|
-
// da superclasse abstrata.
|
|
1603
|
-
if (!declaracao.abstrata
|
|
1604
|
-
superClasse
|
|
1665
|
+
// da(s) superclasse(s) abstrata(s).
|
|
1666
|
+
if (!declaracao.abstrata) {
|
|
1667
|
+
for (const superClasse of superClassesResolvidas) {
|
|
1668
|
+
if (superClasse.abstrata) {
|
|
1669
|
+
superClasse.verificarImplementacaoAbstrata(descritorTipoClasse);
|
|
1670
|
+
}
|
|
1671
|
+
}
|
|
1605
1672
|
}
|
|
1606
1673
|
// TODO: Até então, a única exceção a isso é Égua Clássico.
|
|
1607
1674
|
// Por enquanto, tudo bem deixar isso aqui.
|
|
@@ -1619,6 +1686,56 @@ class InterpretadorBase {
|
|
|
1619
1686
|
// São contratos verificados em tempo de análise sintática.
|
|
1620
1687
|
return Promise.resolve();
|
|
1621
1688
|
}
|
|
1689
|
+
/**
|
|
1690
|
+
* Procura um método de extensão nos registros de módulo e global,
|
|
1691
|
+
* percorrendo os tipos na ordem indicada (específico antes de base).
|
|
1692
|
+
*/
|
|
1693
|
+
encontrarMetodoExtensao(tiposParaVerificar, nomeMetodo, hashArquivo) {
|
|
1694
|
+
var _a, _b;
|
|
1695
|
+
// Extensões module-scoped têm prioridade sobre as globais.
|
|
1696
|
+
const extensoesDoModulo = this.extensoesModulo.get(hashArquivo);
|
|
1697
|
+
if (extensoesDoModulo) {
|
|
1698
|
+
for (const tipo of tiposParaVerificar) {
|
|
1699
|
+
const metodo = (_a = extensoesDoModulo.get(tipo)) === null || _a === void 0 ? void 0 : _a.get(nomeMetodo);
|
|
1700
|
+
if (metodo)
|
|
1701
|
+
return metodo;
|
|
1702
|
+
}
|
|
1703
|
+
}
|
|
1704
|
+
for (const tipo of tiposParaVerificar) {
|
|
1705
|
+
const metodo = (_b = this.extensoesGlobais.get(tipo)) === null || _b === void 0 ? void 0 : _b.get(nomeMetodo);
|
|
1706
|
+
if (metodo)
|
|
1707
|
+
return metodo;
|
|
1708
|
+
}
|
|
1709
|
+
return undefined;
|
|
1710
|
+
}
|
|
1711
|
+
/**
|
|
1712
|
+
* Registra os métodos de uma declaração de extensão nos registros
|
|
1713
|
+
* de extensão do interpretador.
|
|
1714
|
+
*/
|
|
1715
|
+
async visitarDeclaracaoExtensao(declaracao) {
|
|
1716
|
+
const tipoNome = declaracao.simboloTipo.lexema;
|
|
1717
|
+
for (const metodoDeclarado of declaracao.metodos) {
|
|
1718
|
+
const nomeMetodo = metodoDeclarado.simbolo.lexema;
|
|
1719
|
+
const funcao = new estruturas_1.DeleguaFuncao(nomeMetodo, metodoDeclarado.funcao);
|
|
1720
|
+
if (declaracao.ehGlobal) {
|
|
1721
|
+
if (!this.extensoesGlobais.has(tipoNome)) {
|
|
1722
|
+
this.extensoesGlobais.set(tipoNome, new Map());
|
|
1723
|
+
}
|
|
1724
|
+
this.extensoesGlobais.get(tipoNome).set(nomeMetodo, funcao);
|
|
1725
|
+
}
|
|
1726
|
+
else {
|
|
1727
|
+
const hash = declaracao.hashArquivo;
|
|
1728
|
+
if (!this.extensoesModulo.has(hash)) {
|
|
1729
|
+
this.extensoesModulo.set(hash, new Map());
|
|
1730
|
+
}
|
|
1731
|
+
const mapa = this.extensoesModulo.get(hash);
|
|
1732
|
+
if (!mapa.has(tipoNome)) {
|
|
1733
|
+
mapa.set(tipoNome, new Map());
|
|
1734
|
+
}
|
|
1735
|
+
mapa.get(tipoNome).set(nomeMetodo, funcao);
|
|
1736
|
+
}
|
|
1737
|
+
}
|
|
1738
|
+
}
|
|
1622
1739
|
/**
|
|
1623
1740
|
* Executa um acesso a método, normalmente de um objeto de classe.
|
|
1624
1741
|
* @param {AcessoMetodoOuPropriedade} expressao A expressão de acesso.
|
|
@@ -1914,7 +2031,7 @@ class InterpretadorBase {
|
|
|
1914
2031
|
return objeto.valor.paraTexto();
|
|
1915
2032
|
if (objeto instanceof construtos_1.Literal)
|
|
1916
2033
|
return this.paraTexto(objeto.valor);
|
|
1917
|
-
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse || objeto instanceof estruturas_1.DeleguaFuncao)
|
|
2034
|
+
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse || objeto instanceof estruturas_1.DeleguaFuncao || objeto instanceof estruturas_1.DescritorTipoClasse)
|
|
1918
2035
|
return objeto.paraTexto();
|
|
1919
2036
|
if (objeto instanceof quebras_1.RetornoQuebra) {
|
|
1920
2037
|
if (typeof objeto.valor === 'boolean')
|