@designliquido/delegua 1.10.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.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico.js +18 -9
- package/analisador-semantico/analisador-semantico.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +69 -6
- 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 +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/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/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.map +1 -1
- package/interpretador/interpretador-base.js +56 -14
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.js +1 -1
- package/interpretador/interpretador.js.map +1 -1
- package/lexador/palavras-reservadas.d.ts +1 -0
- package/lexador/palavras-reservadas.d.ts.map +1 -1
- package/lexador/palavras-reservadas.js +1 -0
- 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/umd/delegua.js +391 -91
package/umd/delegua.js
CHANGED
|
@@ -1282,13 +1282,22 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1282
1282
|
}
|
|
1283
1283
|
estaEmClasseOuSubclasse(nomeClasse) {
|
|
1284
1284
|
var _a;
|
|
1285
|
-
|
|
1286
|
-
|
|
1285
|
+
const visitados = new Set();
|
|
1286
|
+
const pilha = [this.classeAtualEmAnalise];
|
|
1287
|
+
while (pilha.length > 0) {
|
|
1288
|
+
const atual = pilha.pop();
|
|
1289
|
+
if (!atual)
|
|
1290
|
+
continue;
|
|
1291
|
+
if (visitados.has(atual.simbolo.lexema))
|
|
1292
|
+
continue;
|
|
1293
|
+
visitados.add(atual.simbolo.lexema);
|
|
1287
1294
|
if (atual.simbolo.lexema === nomeClasse)
|
|
1288
1295
|
return true;
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1296
|
+
for (const sc of atual.superClasses) {
|
|
1297
|
+
const pai = (_a = this.classesRegistradas.get(sc.simbolo.lexema)) !== null && _a !== void 0 ? _a : null;
|
|
1298
|
+
if (pai)
|
|
1299
|
+
pilha.push(pai);
|
|
1300
|
+
}
|
|
1292
1301
|
}
|
|
1293
1302
|
return false;
|
|
1294
1303
|
}
|
|
@@ -1316,13 +1325,13 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1316
1325
|
}
|
|
1317
1326
|
}
|
|
1318
1327
|
async visitarDeclaracaoClasse(declaracao) {
|
|
1319
|
-
|
|
1320
|
-
const nomeSuperclasse =
|
|
1328
|
+
for (const superClasseVariavel of declaracao.superClasses) {
|
|
1329
|
+
const nomeSuperclasse = superClasseVariavel.simbolo.lexema;
|
|
1321
1330
|
if (nomeSuperclasse === declaracao.simbolo.lexema) {
|
|
1322
|
-
this.erro(
|
|
1331
|
+
this.erro(superClasseVariavel.simbolo, `A classe '${declaracao.simbolo.lexema}' não pode herdar de si mesma.`);
|
|
1323
1332
|
}
|
|
1324
1333
|
else if (!this.classesDeclararadas.has(nomeSuperclasse)) {
|
|
1325
|
-
this.erro(
|
|
1334
|
+
this.erro(superClasseVariavel.simbolo, `Superclasse '${nomeSuperclasse}' não foi declarada.`);
|
|
1326
1335
|
}
|
|
1327
1336
|
}
|
|
1328
1337
|
this.classesDeclararadas.add(declaracao.simbolo.lexema);
|
|
@@ -1914,6 +1923,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1914
1923
|
if (this.simbolos[this.atual].lexema in this.tiposDefinidosEmCodigo) {
|
|
1915
1924
|
return this.simbolos[this.atual].lexema;
|
|
1916
1925
|
}
|
|
1926
|
+
if (this.simbolos[this.atual].lexema in this.interfacesDeclaradas) {
|
|
1927
|
+
return this.simbolos[this.atual].lexema;
|
|
1928
|
+
}
|
|
1917
1929
|
const lexemaElementar = this.simbolos[this.atual].lexema.toLowerCase();
|
|
1918
1930
|
const tipoElementarResolvido = tipos.find((tipo) => tipo === lexemaElementar);
|
|
1919
1931
|
if (!tipoElementarResolvido) {
|
|
@@ -3860,11 +3872,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
3860
3872
|
// como em `MinhaClasse.propriedadeEstatica` dentro de métodos.
|
|
3861
3873
|
this.tiposDefinidosEmCodigo[simbolo.lexema] = (_a = this.tiposDefinidosEmCodigo[simbolo.lexema]) !== null && _a !== void 0 ? _a : {};
|
|
3862
3874
|
const pilhaDecoradoresClasse = Array.from(this.pilhaDecoradores);
|
|
3863
|
-
|
|
3875
|
+
// Verificar `herda SuperclasseA, SuperclasseB`
|
|
3876
|
+
const superClasses = [];
|
|
3864
3877
|
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.HERDA)) {
|
|
3865
|
-
|
|
3866
|
-
|
|
3867
|
-
|
|
3878
|
+
do {
|
|
3879
|
+
const simboloSuperclasse = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
|
|
3880
|
+
if (superClasses.length === 0) {
|
|
3881
|
+
this.superclasseAtual = simboloSuperclasse.lexema;
|
|
3882
|
+
}
|
|
3883
|
+
superClasses.push(new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1], simboloSuperclasse.lexema));
|
|
3884
|
+
} while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
|
|
3868
3885
|
}
|
|
3869
3886
|
// Verificar `implementa InterfaceA, InterfaceB`
|
|
3870
3887
|
const implementaInterfaces = [];
|
|
@@ -3873,6 +3890,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
3873
3890
|
implementaInterfaces.push(this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome de interface após "implementa".'));
|
|
3874
3891
|
} while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
|
|
3875
3892
|
}
|
|
3893
|
+
// Verificar `mescla MisturávelA, MisturávelB`
|
|
3894
|
+
const mesclas = [];
|
|
3895
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.MESCLA)) {
|
|
3896
|
+
do {
|
|
3897
|
+
const simboloMisturavel = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome de classe após "mescla".');
|
|
3898
|
+
mesclas.push(new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1], simboloMisturavel.lexema));
|
|
3899
|
+
} while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
|
|
3900
|
+
}
|
|
3876
3901
|
this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo da classe.");
|
|
3877
3902
|
this.pilhaDecoradores = [];
|
|
3878
3903
|
const metodos = [];
|
|
@@ -4035,7 +4060,13 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4035
4060
|
const nomePropriedade = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado identificador para nome de propriedade.');
|
|
4036
4061
|
this.consumir(delegua_2.default.DOIS_PONTOS, 'Esperado dois-pontos após nome de propriedade.');
|
|
4037
4062
|
const tipoPropriedade = this.avancarEDevolverAnterior();
|
|
4038
|
-
|
|
4063
|
+
let nomeTipoPropriedade = tipoPropriedade.lexema;
|
|
4064
|
+
if (this.verificarTipoSimboloAtual(delegua_2.default.COLCHETE_ESQUERDO)) {
|
|
4065
|
+
this.avancarEDevolverAnterior(); // consume '['
|
|
4066
|
+
this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após '[' na definição do tipo de propriedade.");
|
|
4067
|
+
nomeTipoPropriedade = `${nomeTipoPropriedade}[]`;
|
|
4068
|
+
}
|
|
4069
|
+
const prop = new declaracoes_1.PropriedadeClasse(nomePropriedade, nomeTipoPropriedade, Array.from(this.pilhaDecoradores), modificadorAcesso, ehEstatico);
|
|
4039
4070
|
prop.documentacao = docAtual;
|
|
4040
4071
|
// Auto-propriedade: `nome: tipo { obter; definir; }`
|
|
4041
4072
|
// Ou corpo personalizado: `nome: tipo { obter() { ... } definir(valor) { ... } }`
|
|
@@ -4142,7 +4173,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4142
4173
|
}
|
|
4143
4174
|
}
|
|
4144
4175
|
}
|
|
4145
|
-
const definicaoClasse = new declaracoes_1.Classe(simbolo,
|
|
4176
|
+
const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasses, metodos, propriedades, pilhaDecoradoresClasse, ehAbstrata, ehEstatica, implementaInterfaces, mesclas);
|
|
4146
4177
|
this.tiposDefinidosEmCodigo[definicaoClasse.simbolo.lexema] = definicaoClasse;
|
|
4147
4178
|
this.superclasseAtual = undefined;
|
|
4148
4179
|
return definicaoClasse;
|
|
@@ -4412,10 +4443,15 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4412
4443
|
this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
|
|
4413
4444
|
// Funções nativas de Delégua
|
|
4414
4445
|
this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio', 'número'));
|
|
4446
|
+
this.pilhaEscopos.definirInformacoesVariavel('aleatório', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatório', 'número'));
|
|
4415
4447
|
this.pilhaEscopos.definirInformacoesVariavel('aleatorioEntre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorioEntre', 'número', true, [
|
|
4416
4448
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
|
|
4417
4449
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
|
|
4418
4450
|
]));
|
|
4451
|
+
this.pilhaEscopos.definirInformacoesVariavel('aleatórioEntre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatórioEntre', 'número', true, [
|
|
4452
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
|
|
4453
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
|
|
4454
|
+
]));
|
|
4419
4455
|
this.pilhaEscopos.definirInformacoesVariavel('algum', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('algum', 'lógico', true, [
|
|
4420
4456
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4421
4457
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
@@ -4431,14 +4467,26 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4431
4467
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4432
4468
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
4433
4469
|
]));
|
|
4470
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrarÍndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarÍndice', 'inteiro', true, [
|
|
4471
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4472
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
4473
|
+
]));
|
|
4434
4474
|
this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarUltimo', 'inteiro', true, [
|
|
4435
4475
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4436
4476
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
4437
4477
|
]));
|
|
4478
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrarÚltimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarÚltimo', 'inteiro', true, [
|
|
4479
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4480
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
4481
|
+
]));
|
|
4438
4482
|
this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimoIndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarUltimoIndice', 'inteiro', true, [
|
|
4439
4483
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4440
4484
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
4441
4485
|
]));
|
|
4486
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrarÚltimoÍndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarÚltimoÍndice', 'inteiro', true, [
|
|
4487
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4488
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
4489
|
+
]));
|
|
4442
4490
|
this.pilhaEscopos.definirInformacoesVariavel('filtrarPor', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('filtrarPor', 'qualquer[]', true, [
|
|
4443
4491
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4444
4492
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
@@ -4447,6 +4495,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4447
4495
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4448
4496
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
|
|
4449
4497
|
]));
|
|
4498
|
+
this.pilhaEscopos.definirInformacoesVariavel('incluído', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('incluído', 'lógico', true, [
|
|
4499
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4500
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
|
|
4501
|
+
]));
|
|
4450
4502
|
this.pilhaEscopos.definirInformacoesVariavel('inteiro', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('inteiro', 'inteiro', true, [
|
|
4451
4503
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
|
|
4452
4504
|
]));
|
|
@@ -4462,6 +4514,18 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4462
4514
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4463
4515
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoMapeamento', 'função'),
|
|
4464
4516
|
]));
|
|
4517
|
+
this.pilhaEscopos.definirInformacoesVariavel('maximo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'qualquer', true, [
|
|
4518
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4519
|
+
]));
|
|
4520
|
+
this.pilhaEscopos.definirInformacoesVariavel('máximo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('máximo', 'qualquer', true, [
|
|
4521
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4522
|
+
]));
|
|
4523
|
+
this.pilhaEscopos.definirInformacoesVariavel('minimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'qualquer', true, [
|
|
4524
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4525
|
+
]));
|
|
4526
|
+
this.pilhaEscopos.definirInformacoesVariavel('mínimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('mínimo', 'qualquer', true, [
|
|
4527
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4528
|
+
]));
|
|
4465
4529
|
this.pilhaEscopos.definirInformacoesVariavel('numero', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('número', 'número', true, [
|
|
4466
4530
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
|
|
4467
4531
|
]));
|
|
@@ -4480,6 +4544,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4480
4544
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4481
4545
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
4482
4546
|
]));
|
|
4547
|
+
this.pilhaEscopos.definirInformacoesVariavel('primeiroEmCondição', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('primeiroEmCondição', 'qualquer', true, [
|
|
4548
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4549
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
4550
|
+
]));
|
|
4483
4551
|
this.pilhaEscopos.definirInformacoesVariavel('real', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('real', 'número', true, [
|
|
4484
4552
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
|
|
4485
4553
|
]));
|
|
@@ -4501,6 +4569,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4501
4569
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
4502
4570
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoCondicional', 'função'),
|
|
4503
4571
|
]));
|
|
4572
|
+
this.pilhaEscopos.definirInformacoesVariavel('todosEmCondição', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todosEmCondição', 'lógico', true, [
|
|
4573
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
4574
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoCondicional', 'função'),
|
|
4575
|
+
]));
|
|
4504
4576
|
this.pilhaEscopos.definirInformacoesVariavel('tupla', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tupla', 'tupla', true, [
|
|
4505
4577
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
4506
4578
|
]));
|
|
@@ -5276,7 +5348,7 @@ class AvaliadorSintaticoEguaClassico {
|
|
|
5276
5348
|
}
|
|
5277
5349
|
this.consumir(egua_classico_1.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
|
|
5278
5350
|
this.superclasseAtual = undefined;
|
|
5279
|
-
return new declaracoes_1.Classe(nome, superClasse, metodos);
|
|
5351
|
+
return new declaracoes_1.Classe(nome, superClasse ? [superClasse] : [], metodos);
|
|
5280
5352
|
}
|
|
5281
5353
|
resolverDeclaracaoForaDeBloco() {
|
|
5282
5354
|
try {
|
|
@@ -6651,7 +6723,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
6651
6723
|
}
|
|
6652
6724
|
}
|
|
6653
6725
|
this.superclasseAtual = undefined;
|
|
6654
|
-
const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse, metodos, propriedades);
|
|
6726
|
+
const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse ? [superClasse] : [], metodos, propriedades);
|
|
6655
6727
|
if (possivelDocumentacao) {
|
|
6656
6728
|
definicaoClasse.documentacao = possivelDocumentacao;
|
|
6657
6729
|
}
|
|
@@ -7829,7 +7901,7 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
7829
7901
|
}
|
|
7830
7902
|
this.consumir(prisma_1.default.CHAVE_DIREITA, "Esperado '}' após métodos da classe.");
|
|
7831
7903
|
this.superclasseAtual = undefined;
|
|
7832
|
-
const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse, metodos);
|
|
7904
|
+
const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse ? [superClasse] : [], metodos);
|
|
7833
7905
|
this.tiposDefinidosEmCodigo[definicaoClasse.simbolo.lexema] = definicaoClasse;
|
|
7834
7906
|
return definicaoClasse;
|
|
7835
7907
|
}
|
|
@@ -11295,6 +11367,75 @@ exports.default = {
|
|
|
11295
11367
|
'\n\n ### Formas de uso \n',
|
|
11296
11368
|
exemploCodigo: 'texto.tudoMinusculo()',
|
|
11297
11369
|
},
|
|
11370
|
+
apararInício: {
|
|
11371
|
+
tipoRetorno: 'texto',
|
|
11372
|
+
argumentos: [],
|
|
11373
|
+
implementacao: (interpretador, texto) => Promise.resolve(texto.trimStart()),
|
|
11374
|
+
assinaturaFormato: 'texto.apararInício()',
|
|
11375
|
+
documentacao: '# `texto.apararInício()` \n \n' +
|
|
11376
|
+
'Remover espaços em branco no início e no fim de um texto.' +
|
|
11377
|
+
'\n\n ## Exemplo de Código\n' +
|
|
11378
|
+
'\n\n```delegua\nvar t = " meu texto com espaços no início e no fim "\n' +
|
|
11379
|
+
'escreva("|" + t.apararInício() + "|") // "|meu texto com espaços no início e no fim |"\n```' +
|
|
11380
|
+
'\n\n ### Formas de uso \n',
|
|
11381
|
+
exemploCodigo: 'texto.apararInício()',
|
|
11382
|
+
},
|
|
11383
|
+
maiúsculo: {
|
|
11384
|
+
tipoRetorno: 'texto',
|
|
11385
|
+
argumentos: [],
|
|
11386
|
+
implementacao: (interpretador, texto) => Promise.resolve(texto.toUpperCase()),
|
|
11387
|
+
assinaturaFormato: 'texto.maiúsculo()',
|
|
11388
|
+
documentacao: '# `texto.maiúsculo()` \n \n' +
|
|
11389
|
+
'Converte todos os caracteres alfabéticos para suas respectivas formas em maiúsculo.' +
|
|
11390
|
+
'\n\n ## Exemplo de Código\n' +
|
|
11391
|
+
'\n\n```delegua\nvar t = "tudo em minúsculo"\n' +
|
|
11392
|
+
'escreva(t.maiúsculo()) // "TUDO EM MINÚSCULO"\n```' +
|
|
11393
|
+
'\n\n ### Formas de uso \n',
|
|
11394
|
+
exemploCodigo: 'texto.maiúsculo()',
|
|
11395
|
+
},
|
|
11396
|
+
minúsculo: {
|
|
11397
|
+
tipoRetorno: 'texto',
|
|
11398
|
+
argumentos: [],
|
|
11399
|
+
implementacao: (interpretador, texto) => Promise.resolve(texto.toLowerCase()),
|
|
11400
|
+
assinaturaFormato: 'texto.minúsculo()',
|
|
11401
|
+
documentacao: '# `texto.minúsculo()` \n \n' +
|
|
11402
|
+
'Converte todos os caracteres alfabéticos para suas respectivas formas em minúsculo.' +
|
|
11403
|
+
'\n\n ## Exemplo de Código\n' +
|
|
11404
|
+
'\n\n```delegua\nvar t = "TUDO EM MAIÚSCULO"\n' +
|
|
11405
|
+
'escreva(t.minúsculo()) // "tudo em maiúsculo"\n```' +
|
|
11406
|
+
'\n\n ### Formas de uso \n',
|
|
11407
|
+
exemploCodigo: 'texto.minúsculo()',
|
|
11408
|
+
},
|
|
11409
|
+
tudoMaiúsculo: {
|
|
11410
|
+
tipoRetorno: 'lógico',
|
|
11411
|
+
argumentos: [],
|
|
11412
|
+
implementacao: (interpretador, texto) => Promise.resolve(texto === texto.toUpperCase()),
|
|
11413
|
+
assinaturaFormato: 'texto.tudoMaiúsculo()',
|
|
11414
|
+
documentacao: '# `texto.tudoMaiúsculo()` \n\n' +
|
|
11415
|
+
'Devolve verdadeiro se todos os caracteres alfabéticos do texto estão em maiúsculo, e falso em caso contrário.' +
|
|
11416
|
+
'\n\n ## Exemplo de Código\n' +
|
|
11417
|
+
'\n\n```delegua\nvar t1 = "TUDO EM MAIÚSCULO"\n' +
|
|
11418
|
+
'var t2 = "Tudo em Maiúsculo"\n' +
|
|
11419
|
+
't1.tudoMaiúsculo() // verdadeiro\n' +
|
|
11420
|
+
't2.tudoMaiúsculo() // falso\n```' +
|
|
11421
|
+
'\n\n ### Formas de uso \n',
|
|
11422
|
+
exemploCodigo: 'texto.tudoMaiúsculo()',
|
|
11423
|
+
},
|
|
11424
|
+
tudoMinúsculo: {
|
|
11425
|
+
tipoRetorno: 'lógico',
|
|
11426
|
+
argumentos: [],
|
|
11427
|
+
implementacao: (interpretador, texto) => Promise.resolve(texto === texto.toLowerCase()),
|
|
11428
|
+
assinaturaFormato: 'texto.tudoMinúsculo()',
|
|
11429
|
+
documentacao: '# `texto.tudoMinúsculo()` \n\n' +
|
|
11430
|
+
'Devolve verdadeiro se todos os caracteres alfabéticos do texto estão em minúsculo, e falso em caso contrário.' +
|
|
11431
|
+
'\n\n ## Exemplo de Código\n' +
|
|
11432
|
+
'\n\n```delegua\nvar t1 = "tudo em minúsculo"\n' +
|
|
11433
|
+
'var t2 = "Tudo em Minúsculo"\n' +
|
|
11434
|
+
't1.tudoMinúsculo() // verdadeiro\n' +
|
|
11435
|
+
't2.tudoMinúsculo() // falso\n```' +
|
|
11436
|
+
'\n\n ### Formas de uso \n',
|
|
11437
|
+
exemploCodigo: 'texto.tudoMinúsculo()',
|
|
11438
|
+
},
|
|
11298
11439
|
};
|
|
11299
11440
|
|
|
11300
11441
|
},{"../construtos":62,"../excecoes":131,"../informacao-elemento-sintatico":138}],32:[function(require,module,exports){
|
|
@@ -11660,6 +11801,24 @@ exports.default = {
|
|
|
11660
11801
|
'\n\n ### Formas de uso \n',
|
|
11661
11802
|
exemploCodigo: 'vetor.removerUltimo()',
|
|
11662
11803
|
},
|
|
11804
|
+
removerÚltimo: {
|
|
11805
|
+
tipoRetorno: 'qualquer',
|
|
11806
|
+
argumentos: [],
|
|
11807
|
+
implementacao: (interpretador, vetor) => {
|
|
11808
|
+
let elemento = vetor.pop();
|
|
11809
|
+
return Promise.resolve(elemento);
|
|
11810
|
+
},
|
|
11811
|
+
assinaturaFormato: 'vetor.removerÚltimo()',
|
|
11812
|
+
documentacao: '# `vetor.removerÚltimo()` \n \n' +
|
|
11813
|
+
'Remove o último elemento do vetor caso o elemento exista no vetor.\n' +
|
|
11814
|
+
'\n\n ## Exemplo de Código\n' +
|
|
11815
|
+
'\n\n```delegua\nvar vetor = [1, 2, 3]\n' +
|
|
11816
|
+
'var ultimoElemento = vetor.removerÚltimo()\n' +
|
|
11817
|
+
'escreva(ultimoElemento) // 3\n' +
|
|
11818
|
+
'escreva(vetor) // [1, 2]\n```' +
|
|
11819
|
+
'\n\n ### Formas de uso \n',
|
|
11820
|
+
exemploCodigo: 'vetor.removerÚltimo()',
|
|
11821
|
+
},
|
|
11663
11822
|
somar: {
|
|
11664
11823
|
tipoRetorno: 'qualquer',
|
|
11665
11824
|
argumentos: [],
|
|
@@ -13522,10 +13681,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13522
13681
|
exports.Classe = void 0;
|
|
13523
13682
|
const declaracao_1 = require("./declaracao");
|
|
13524
13683
|
class Classe extends declaracao_1.Declaracao {
|
|
13525
|
-
|
|
13684
|
+
/** Compat com tradutores e analisador semântico que ainda usam .superClasse */
|
|
13685
|
+
get superClasse() {
|
|
13686
|
+
var _a;
|
|
13687
|
+
return (_a = this.superClasses[0]) !== null && _a !== void 0 ? _a : null;
|
|
13688
|
+
}
|
|
13689
|
+
constructor(simbolo, superClasses = [], metodos, propriedades = [], decoradores = [], abstrata = false, classeEstatica = false, implementa = [], mesclas = []) {
|
|
13526
13690
|
super(Number(simbolo.linha), simbolo.hashArquivo);
|
|
13527
13691
|
this.simbolo = simbolo;
|
|
13528
|
-
this.
|
|
13692
|
+
this.superClasses = superClasses;
|
|
13693
|
+
this.mesclas = mesclas;
|
|
13529
13694
|
this.metodos = metodos;
|
|
13530
13695
|
this.propriedades = propriedades;
|
|
13531
13696
|
this.decoradores = decoradores;
|
|
@@ -13538,8 +13703,11 @@ class Classe extends declaracao_1.Declaracao {
|
|
|
13538
13703
|
}
|
|
13539
13704
|
paraTexto() {
|
|
13540
13705
|
let resultado = `<classe nome=${this.simbolo.lexema} `;
|
|
13541
|
-
if (this.
|
|
13542
|
-
resultado += `herda=${this.
|
|
13706
|
+
if (this.superClasses.length > 0) {
|
|
13707
|
+
resultado += `herda=${this.superClasses.map((s) => { var _a, _b; return (_b = (_a = s === null || s === void 0 ? void 0 : s.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) !== null && _b !== void 0 ? _b : s; }).join(', ')} `;
|
|
13708
|
+
}
|
|
13709
|
+
if (this.mesclas.length > 0) {
|
|
13710
|
+
resultado += `mescla=${this.mesclas.map((m) => { var _a, _b; return (_b = (_a = m === null || m === void 0 ? void 0 : m.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) !== null && _b !== void 0 ? _b : m; }).join(', ')} `;
|
|
13543
13711
|
}
|
|
13544
13712
|
resultado += '>';
|
|
13545
13713
|
for (const propriedade of this.propriedades) {
|
|
@@ -16606,27 +16774,36 @@ const bibliotecaGlobal = __importStar(require("../bibliotecas/biblioteca-global"
|
|
|
16606
16774
|
const construtos_1 = require("../construtos");
|
|
16607
16775
|
function carregarBibliotecasGlobais(pilhaEscoposExecucao) {
|
|
16608
16776
|
pilhaEscoposExecucao.definirVariavel('aleatorio', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
|
|
16777
|
+
pilhaEscoposExecucao.definirVariavel('aleatório', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
|
|
16609
16778
|
pilhaEscoposExecucao.definirVariavel('aleatorioEntre', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.aleatorioEntre));
|
|
16779
|
+
pilhaEscoposExecucao.definirVariavel('aleatórioEntre', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.aleatorioEntre));
|
|
16610
16780
|
pilhaEscoposExecucao.definirVariavel('algum', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.algum));
|
|
16611
16781
|
pilhaEscoposExecucao.definirVariavel('arredondar', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.arredondar));
|
|
16612
16782
|
pilhaEscoposExecucao.definirVariavel('clonar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.clonar));
|
|
16613
16783
|
pilhaEscoposExecucao.definirVariavel('encontrar', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrar));
|
|
16614
16784
|
pilhaEscoposExecucao.definirVariavel('encontrarIndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarIndice));
|
|
16785
|
+
pilhaEscoposExecucao.definirVariavel('encontrarÍndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarIndice));
|
|
16615
16786
|
pilhaEscoposExecucao.definirVariavel('encontrarUltimo', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimo));
|
|
16787
|
+
pilhaEscoposExecucao.definirVariavel('encontrarÚltimo', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimo));
|
|
16616
16788
|
pilhaEscoposExecucao.definirVariavel('encontrarUltimoIndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimoIndice));
|
|
16789
|
+
pilhaEscoposExecucao.definirVariavel('encontrarÚltimoÍndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimoIndice));
|
|
16617
16790
|
pilhaEscoposExecucao.definirVariavel('filtrarPor', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.filtrarPor));
|
|
16618
16791
|
pilhaEscoposExecucao.definirVariavel('incluido', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.incluido));
|
|
16792
|
+
pilhaEscoposExecucao.definirVariavel('incluído', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.incluido));
|
|
16619
16793
|
pilhaEscoposExecucao.definirVariavel('inteiro', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.inteiro));
|
|
16620
16794
|
pilhaEscoposExecucao.definirVariavel('longo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.longo));
|
|
16621
16795
|
pilhaEscoposExecucao.definirVariavel('intervalo', new funcao_padrao_1.FuncaoPadrao(3, bibliotecaGlobal.intervalo));
|
|
16622
16796
|
pilhaEscoposExecucao.definirVariavel('mapear', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.mapear));
|
|
16623
16797
|
pilhaEscoposExecucao.definirVariavel('maximo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.maximo));
|
|
16798
|
+
pilhaEscoposExecucao.definirVariavel('máximo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.maximo));
|
|
16624
16799
|
pilhaEscoposExecucao.definirVariavel('minimo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.minimo));
|
|
16800
|
+
pilhaEscoposExecucao.definirVariavel('mínimo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.minimo));
|
|
16625
16801
|
pilhaEscoposExecucao.definirVariavel('numero', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.numero));
|
|
16626
16802
|
pilhaEscoposExecucao.definirVariavel('número', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.numero));
|
|
16627
16803
|
pilhaEscoposExecucao.definirVariavel('ordenar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.ordenar));
|
|
16628
16804
|
pilhaEscoposExecucao.definirVariavel('paraCada', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.paraCada));
|
|
16629
16805
|
pilhaEscoposExecucao.definirVariavel('primeiroEmCondicao', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.primeiroEmCondicao));
|
|
16806
|
+
pilhaEscoposExecucao.definirVariavel('primeiroEmCondição', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.primeiroEmCondicao));
|
|
16630
16807
|
pilhaEscoposExecucao.definirVariavel('real', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.real));
|
|
16631
16808
|
pilhaEscoposExecucao.definirVariavel('reduzir', new funcao_padrao_1.FuncaoPadrao(3, bibliotecaGlobal.reduzir));
|
|
16632
16809
|
pilhaEscoposExecucao.definirVariavel('somar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.somar));
|
|
@@ -16634,6 +16811,7 @@ function carregarBibliotecasGlobais(pilhaEscoposExecucao) {
|
|
|
16634
16811
|
pilhaEscoposExecucao.definirVariavel('texto', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.texto));
|
|
16635
16812
|
pilhaEscoposExecucao.definirVariavel('todos', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.todos));
|
|
16636
16813
|
pilhaEscoposExecucao.definirVariavel('todosEmCondicao', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.todosEmCondicao));
|
|
16814
|
+
pilhaEscoposExecucao.definirVariavel('todosEmCondição', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.todosEmCondicao));
|
|
16637
16815
|
pilhaEscoposExecucao.definirVariavel('tupla', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.tupla));
|
|
16638
16816
|
pilhaEscoposExecucao.definirVariavel('vetor', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.vetor));
|
|
16639
16817
|
}
|
|
@@ -17362,10 +17540,28 @@ function assinaturasIguais(a, b) {
|
|
|
17362
17540
|
* de classe é criada, a referência para a instância é implementada aqui.
|
|
17363
17541
|
*/
|
|
17364
17542
|
class DescritorTipoClasse extends chamavel_1.Chamavel {
|
|
17365
|
-
|
|
17543
|
+
/** Obtenedor de compat: primeiro pai direto (usado por tradutores e partes do interpretador). */
|
|
17544
|
+
get superClasse() {
|
|
17545
|
+
var _a;
|
|
17546
|
+
return (_a = this.superClasses[0]) !== null && _a !== void 0 ? _a : null;
|
|
17547
|
+
}
|
|
17548
|
+
/** Definidor de compat: atribui um único pai direto (usado pela atribuição implícita de OBJETO_BASE). */
|
|
17549
|
+
set superClasse(v) {
|
|
17550
|
+
this.superClasses = v ? [v] : [];
|
|
17551
|
+
}
|
|
17552
|
+
constructor(simboloOriginal, superClasses, metodos, propriedades) {
|
|
17366
17553
|
super();
|
|
17367
17554
|
this.simboloOriginal = simboloOriginal;
|
|
17368
|
-
|
|
17555
|
+
if (Array.isArray(superClasses)) {
|
|
17556
|
+
this.superClasses = superClasses;
|
|
17557
|
+
}
|
|
17558
|
+
else if (superClasses) {
|
|
17559
|
+
this.superClasses = [superClasses];
|
|
17560
|
+
}
|
|
17561
|
+
else {
|
|
17562
|
+
this.superClasses = [];
|
|
17563
|
+
}
|
|
17564
|
+
this.orem = [this];
|
|
17369
17565
|
this.metodos = metodos || {};
|
|
17370
17566
|
this.metodosEstaticos = {};
|
|
17371
17567
|
this.membrosEstaticos = {};
|
|
@@ -17381,6 +17577,44 @@ class DescritorTipoClasse extends chamavel_1.Chamavel {
|
|
|
17381
17577
|
this.acessoMetodos = {};
|
|
17382
17578
|
this.acessoPropriedades = {};
|
|
17383
17579
|
}
|
|
17580
|
+
// ─── C3 OReM ──────────────────────────────────────────────────────────────
|
|
17581
|
+
static mesclaC3(listas) {
|
|
17582
|
+
const resultado = [];
|
|
17583
|
+
while (true) {
|
|
17584
|
+
const listasNaoVazias = listas.filter((l) => l.length > 0);
|
|
17585
|
+
if (listasNaoVazias.length === 0)
|
|
17586
|
+
break;
|
|
17587
|
+
let candidato = null;
|
|
17588
|
+
for (const lista of listasNaoVazias) {
|
|
17589
|
+
const cabeca = lista[0];
|
|
17590
|
+
const naCauda = listasNaoVazias.some((l) => l.slice(1).indexOf(cabeca) >= 0);
|
|
17591
|
+
if (!naCauda) {
|
|
17592
|
+
candidato = cabeca;
|
|
17593
|
+
break;
|
|
17594
|
+
}
|
|
17595
|
+
}
|
|
17596
|
+
if (candidato === null) {
|
|
17597
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(null, 'Hierarquia de classes inconsistente: não foi possível calcular o OReM (C3).');
|
|
17598
|
+
}
|
|
17599
|
+
resultado.push(candidato);
|
|
17600
|
+
for (const lista of listas) {
|
|
17601
|
+
const idx = lista.indexOf(candidato);
|
|
17602
|
+
if (idx === 0)
|
|
17603
|
+
lista.shift();
|
|
17604
|
+
}
|
|
17605
|
+
}
|
|
17606
|
+
return resultado;
|
|
17607
|
+
}
|
|
17608
|
+
/** Calcula e armazena o OReM (linearização C3) para esta classe e retorna a lista resultante. */
|
|
17609
|
+
static computarOReM(cls) {
|
|
17610
|
+
if (cls.superClasses.length === 0) {
|
|
17611
|
+
return [cls];
|
|
17612
|
+
}
|
|
17613
|
+
const oremsDePais = cls.superClasses.map((p) => DescritorTipoClasse.computarOReM(p));
|
|
17614
|
+
const listas = [...oremsDePais.map((m) => [...m]), [...cls.superClasses]];
|
|
17615
|
+
return [cls, ...DescritorTipoClasse.mesclaC3(listas)];
|
|
17616
|
+
}
|
|
17617
|
+
// ─── Verificação abstrata ─────────────────────────────────────────────────
|
|
17384
17618
|
/**
|
|
17385
17619
|
* Verifica se todos os métodos abstratos da superclasse estão implementados
|
|
17386
17620
|
* na subclasse fornecida. Lança erro em tempo de execução se algum faltar.
|
|
@@ -17395,13 +17629,17 @@ class DescritorTipoClasse extends chamavel_1.Chamavel {
|
|
|
17395
17629
|
}
|
|
17396
17630
|
}
|
|
17397
17631
|
}
|
|
17632
|
+
// ─── Obtenedores e definidores ────────────────────────────────────────────
|
|
17398
17633
|
encontrarObtenedor(nome, estatico = false) {
|
|
17399
17634
|
const mapa = estatico ? this.obtenedoresEstaticos : this.obtenedores;
|
|
17400
17635
|
if (Object.prototype.hasOwnProperty.call(mapa, nome)) {
|
|
17401
17636
|
return mapa[nome];
|
|
17402
17637
|
}
|
|
17403
|
-
|
|
17404
|
-
|
|
17638
|
+
for (const ancestral of this.orem.slice(1)) {
|
|
17639
|
+
const mapaAnc = estatico ? ancestral.obtenedoresEstaticos : ancestral.obtenedores;
|
|
17640
|
+
if (Object.prototype.hasOwnProperty.call(mapaAnc, nome)) {
|
|
17641
|
+
return mapaAnc[nome];
|
|
17642
|
+
}
|
|
17405
17643
|
}
|
|
17406
17644
|
return undefined;
|
|
17407
17645
|
}
|
|
@@ -17410,11 +17648,15 @@ class DescritorTipoClasse extends chamavel_1.Chamavel {
|
|
|
17410
17648
|
if (Object.prototype.hasOwnProperty.call(mapa, nome)) {
|
|
17411
17649
|
return mapa[nome];
|
|
17412
17650
|
}
|
|
17413
|
-
|
|
17414
|
-
|
|
17651
|
+
for (const ancestral of this.orem.slice(1)) {
|
|
17652
|
+
const mapaAnc = estatico ? ancestral.definidoresEstaticos : ancestral.definidores;
|
|
17653
|
+
if (Object.prototype.hasOwnProperty.call(mapaAnc, nome)) {
|
|
17654
|
+
return mapaAnc[nome];
|
|
17655
|
+
}
|
|
17415
17656
|
}
|
|
17416
17657
|
return undefined;
|
|
17417
17658
|
}
|
|
17659
|
+
// ─── Membros estáticos ────────────────────────────────────────────────────
|
|
17418
17660
|
async obterEstatico(nome, visitante) {
|
|
17419
17661
|
var _a;
|
|
17420
17662
|
const obtenedor = this.encontrarObtenedor(nome, true);
|
|
@@ -17443,9 +17685,10 @@ class DescritorTipoClasse extends chamavel_1.Chamavel {
|
|
|
17443
17685
|
}
|
|
17444
17686
|
this.membrosEstaticos[nome] = valor;
|
|
17445
17687
|
}
|
|
17688
|
+
// ─── Resolução de métodos via OReM ─────────────────────────────────────────
|
|
17446
17689
|
/**
|
|
17447
|
-
* Mescla sobrecargas da classe atual com as
|
|
17448
|
-
* Sobrecargas da subclasse com mesma assinatura substituem as
|
|
17690
|
+
* Mescla sobrecargas da classe atual com as de ancestrais (respeitando MRO).
|
|
17691
|
+
* Sobrecargas da subclasse com mesma assinatura substituem as do ancestral.
|
|
17449
17692
|
*/
|
|
17450
17693
|
mesclarComSuperclasse(metodosAtuais, metodosSuperclasse) {
|
|
17451
17694
|
const resultado = [...metodosAtuais];
|
|
@@ -17458,28 +17701,20 @@ class DescritorTipoClasse extends chamavel_1.Chamavel {
|
|
|
17458
17701
|
return resultado;
|
|
17459
17702
|
}
|
|
17460
17703
|
obterSobrecargasDaSuperclasse(nome) {
|
|
17461
|
-
|
|
17462
|
-
|
|
17463
|
-
const
|
|
17464
|
-
|
|
17465
|
-
|
|
17466
|
-
|
|
17467
|
-
|
|
17468
|
-
|
|
17469
|
-
|
|
17470
|
-
|
|
17471
|
-
const sobrecargasAncestral = this.superClasse.obterSobrecargasDaSuperclasse(nome);
|
|
17472
|
-
if (sobrecargasAncestral.length > 0) {
|
|
17473
|
-
const resultado = [...sobrecargasSuper];
|
|
17474
|
-
for (const metodoAnc of sobrecargasAncestral) {
|
|
17475
|
-
const jaSobrescrito = resultado.some((m) => assinaturasIguais(m, metodoAnc));
|
|
17476
|
-
if (!jaSobrescrito) {
|
|
17477
|
-
resultado.push(metodoAnc);
|
|
17704
|
+
let sobrecarga = [];
|
|
17705
|
+
// Percorre a OReM[1:] na ordem do OReM — o primeiro ancestral vence
|
|
17706
|
+
for (const ancestral of this.orem.slice(1)) {
|
|
17707
|
+
if (!ancestral.metodos.hasOwnProperty(nome))
|
|
17708
|
+
continue;
|
|
17709
|
+
const metodo = ancestral.metodos[nome];
|
|
17710
|
+
const novos = Array.isArray(metodo) ? metodo : [metodo];
|
|
17711
|
+
for (const m of novos) {
|
|
17712
|
+
if (!sobrecarga.some((s) => assinaturasIguais(s, m))) {
|
|
17713
|
+
sobrecarga.push(m);
|
|
17478
17714
|
}
|
|
17479
17715
|
}
|
|
17480
|
-
sobrecargasSuper = resultado;
|
|
17481
17716
|
}
|
|
17482
|
-
return
|
|
17717
|
+
return sobrecarga;
|
|
17483
17718
|
}
|
|
17484
17719
|
encontrarMetodo(nome) {
|
|
17485
17720
|
let metodosAtuais = [];
|
|
@@ -17510,14 +17745,17 @@ class DescritorTipoClasse extends chamavel_1.Chamavel {
|
|
|
17510
17745
|
if (nome in this.propriedades) {
|
|
17511
17746
|
return this.propriedades[nome];
|
|
17512
17747
|
}
|
|
17513
|
-
|
|
17514
|
-
|
|
17748
|
+
for (const ancestral of this.orem.slice(1)) {
|
|
17749
|
+
if (nome in ancestral.propriedades) {
|
|
17750
|
+
return ancestral.propriedades[nome];
|
|
17751
|
+
}
|
|
17515
17752
|
}
|
|
17516
17753
|
if (this.dialetoRequerDeclaracaoPropriedades) {
|
|
17517
17754
|
throw new excecoes_1.ErroEmTempoDeExecucao(this.simboloOriginal, `Propriedade "${nome}" não declarada na classe ${this.simboloOriginal.lexema}.`);
|
|
17518
17755
|
}
|
|
17519
17756
|
return undefined;
|
|
17520
17757
|
}
|
|
17758
|
+
// ─── Representação textual ────────────────────────────────────────────────
|
|
17521
17759
|
/**
|
|
17522
17760
|
* Método utilizado por Delégua para representar esta classe quando impressa.
|
|
17523
17761
|
* @returns {string} A representação da classe como texto.
|
|
@@ -17926,7 +18164,7 @@ function criarDescritorObjeto() {
|
|
|
17926
18164
|
descritor.metodos['igual'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('igual', 1, (instancia, args) => {
|
|
17927
18165
|
return instancia === args[0];
|
|
17928
18166
|
});
|
|
17929
|
-
|
|
18167
|
+
const implementacaoEInstanciaDe = (instancia, args) => {
|
|
17930
18168
|
if (!instancia)
|
|
17931
18169
|
return false;
|
|
17932
18170
|
const classeAlvo = args[0];
|
|
@@ -17939,8 +18177,10 @@ function criarDescritorObjeto() {
|
|
|
17939
18177
|
cls = cls.superClasse;
|
|
17940
18178
|
}
|
|
17941
18179
|
return false;
|
|
17942
|
-
}
|
|
17943
|
-
descritor.metodos['
|
|
18180
|
+
};
|
|
18181
|
+
descritor.metodos['eInstanciaDe'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('eInstanciaDe', 1, implementacaoEInstanciaDe);
|
|
18182
|
+
descritor.metodos['éInstânciaDe'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('éInstânciaDe', 1, implementacaoEInstanciaDe);
|
|
18183
|
+
const implementacaoMetodos = (instancia) => {
|
|
17944
18184
|
if (!instancia)
|
|
17945
18185
|
return [];
|
|
17946
18186
|
const nomes = [];
|
|
@@ -17953,7 +18193,9 @@ function criarDescritorObjeto() {
|
|
|
17953
18193
|
cls = cls.superClasse;
|
|
17954
18194
|
}
|
|
17955
18195
|
return nomes;
|
|
17956
|
-
}
|
|
18196
|
+
};
|
|
18197
|
+
descritor.metodos['metodos'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('metodos', 0, implementacaoMetodos);
|
|
18198
|
+
descritor.metodos['métodos'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('métodos', 0, implementacaoMetodos);
|
|
17957
18199
|
descritor.metodos['propriedades'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('propriedades', 0, (instancia) => {
|
|
17958
18200
|
if (!instancia)
|
|
17959
18201
|
return [];
|
|
@@ -17980,55 +18222,69 @@ const excecoes_1 = require("../../excecoes");
|
|
|
17980
18222
|
* Métodos são extraídos do descritor da classe, uma `DeleguaClasse`.
|
|
17981
18223
|
*/
|
|
17982
18224
|
class ObjetoDeleguaClasse {
|
|
18225
|
+
valorPadraoParaTipo(tipo) {
|
|
18226
|
+
switch (tipo) {
|
|
18227
|
+
case 'numero': return 0;
|
|
18228
|
+
case 'texto': return '';
|
|
18229
|
+
case 'logico': return false;
|
|
18230
|
+
default: return undefined;
|
|
18231
|
+
}
|
|
18232
|
+
}
|
|
17983
18233
|
constructor(classe) {
|
|
17984
18234
|
this.classe = classe;
|
|
17985
18235
|
this.propriedades = {};
|
|
17986
|
-
|
|
17987
|
-
|
|
18236
|
+
// Inicializar propriedades herdadas do OReM (do mais genérico ao mais específico)
|
|
18237
|
+
// para que ancestrais mais próximos sobrescrevam os mais distantes.
|
|
18238
|
+
const ancestrais = classe.orem.slice(1).reverse();
|
|
18239
|
+
for (const ancestral of ancestrais) {
|
|
18240
|
+
for (const propriedade of ancestral.propriedades) {
|
|
17988
18241
|
if (propriedade.estatico)
|
|
17989
18242
|
continue;
|
|
17990
18243
|
if (propriedade.autoObter || propriedade.autoDefinir) {
|
|
17991
|
-
this.propriedades['_' + propriedade.nome.lexema] =
|
|
18244
|
+
this.propriedades['_' + propriedade.nome.lexema] = this.valorPadraoParaTipo(propriedade.tipo);
|
|
17992
18245
|
}
|
|
17993
18246
|
else {
|
|
17994
|
-
this.propriedades[propriedade.nome.lexema] =
|
|
18247
|
+
this.propriedades[propriedade.nome.lexema] = this.valorPadraoParaTipo(propriedade.tipo);
|
|
17995
18248
|
}
|
|
17996
18249
|
}
|
|
17997
18250
|
}
|
|
17998
|
-
|
|
18251
|
+
// Propriedades da própria classe (têm prioridade máxima no valor padrão)
|
|
18252
|
+
for (const propriedade of classe.propriedades) {
|
|
17999
18253
|
if (propriedade.estatico)
|
|
18000
18254
|
continue;
|
|
18001
18255
|
if (propriedade.autoObter || propriedade.autoDefinir) {
|
|
18002
|
-
this.propriedades['_' + propriedade.nome.lexema] =
|
|
18256
|
+
this.propriedades['_' + propriedade.nome.lexema] = this.valorPadraoParaTipo(propriedade.tipo);
|
|
18003
18257
|
}
|
|
18004
18258
|
else {
|
|
18005
|
-
this.propriedades[propriedade.nome.lexema] =
|
|
18259
|
+
this.propriedades[propriedade.nome.lexema] = this.valorPadraoParaTipo(propriedade.tipo);
|
|
18006
18260
|
}
|
|
18007
18261
|
}
|
|
18008
18262
|
}
|
|
18009
18263
|
verificarAcessoLeitura(nome, simbolo, visitante) {
|
|
18010
|
-
var _a, _b, _c, _d, _e;
|
|
18011
|
-
|
|
18264
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
18265
|
+
// Percorre o OReM para encontrar a classe que declarou o membro com um modificador de acesso.
|
|
18266
|
+
let declaradorClasse = undefined;
|
|
18267
|
+
let acesso = undefined;
|
|
18268
|
+
for (const cls of this.classe.orem) {
|
|
18269
|
+
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];
|
|
18270
|
+
if (acessoCls) {
|
|
18271
|
+
acesso = acessoCls;
|
|
18272
|
+
declaradorClasse = cls;
|
|
18273
|
+
break;
|
|
18274
|
+
}
|
|
18275
|
+
}
|
|
18012
18276
|
if (!acesso || acesso === 'publico')
|
|
18013
18277
|
return;
|
|
18014
18278
|
const classeAtual = visitante === null || visitante === void 0 ? void 0 : visitante.classeAtualEmExecucao;
|
|
18015
18279
|
if (acesso === 'privado') {
|
|
18016
|
-
if (classeAtual !==
|
|
18017
|
-
throw new excecoes_1.ErroEmTempoDeExecucao(simbolo, `Membro '${nome}' é privado e não pode ser acessado fora da classe '${(_d =
|
|
18280
|
+
if (classeAtual !== declaradorClasse) {
|
|
18281
|
+
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}'.`);
|
|
18018
18282
|
}
|
|
18019
18283
|
}
|
|
18020
18284
|
else if (acesso === 'protegido') {
|
|
18021
|
-
|
|
18022
|
-
let eAcessivel = false;
|
|
18023
|
-
while (cls) {
|
|
18024
|
-
if (cls === this.classe) {
|
|
18025
|
-
eAcessivel = true;
|
|
18026
|
-
break;
|
|
18027
|
-
}
|
|
18028
|
-
cls = cls.superClasse;
|
|
18029
|
-
}
|
|
18285
|
+
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;
|
|
18030
18286
|
if (!eAcessivel) {
|
|
18031
|
-
throw new excecoes_1.ErroEmTempoDeExecucao(simbolo, `Membro '${nome}' é protegido e não pode ser acessado fora da hierarquia da classe '${(
|
|
18287
|
+
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}'.`);
|
|
18032
18288
|
}
|
|
18033
18289
|
}
|
|
18034
18290
|
}
|
|
@@ -19735,18 +19991,30 @@ class InterpretadorBase {
|
|
|
19735
19991
|
* @returns Sempre retorna nulo, por ser requerido pelo contrato de visita.
|
|
19736
19992
|
*/
|
|
19737
19993
|
async visitarDeclaracaoClasse(declaracao) {
|
|
19738
|
-
|
|
19739
|
-
|
|
19740
|
-
|
|
19741
|
-
|
|
19994
|
+
// Resolver cada superclasse listada em `herda A, B, ...`
|
|
19995
|
+
const superClassesResolvidas = [];
|
|
19996
|
+
for (const superClasseVariavel of declaracao.superClasses) {
|
|
19997
|
+
const variavelSuperClasse = await this.avaliar(superClasseVariavel);
|
|
19998
|
+
const superClasse = variavelSuperClasse.valor;
|
|
19742
19999
|
if (!(superClasse instanceof estruturas_1.DescritorTipoClasse)) {
|
|
19743
|
-
throw new excecoes_1.ErroEmTempoDeExecucao(
|
|
20000
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(superClasseVariavel.nome, 'Superclasse precisa ser uma classe.', declaracao.linha);
|
|
20001
|
+
}
|
|
20002
|
+
superClassesResolvidas.push(superClasse);
|
|
20003
|
+
}
|
|
20004
|
+
// Resolver cada misturável listado em `mescla X, Y, ...`
|
|
20005
|
+
const mesclaResolvidas = [];
|
|
20006
|
+
for (const mesclaVariavel of declaracao.mesclas) {
|
|
20007
|
+
const variavelMisturavel = await this.avaliar(mesclaVariavel);
|
|
20008
|
+
const misturável = variavelMisturavel.valor;
|
|
20009
|
+
if (!(misturável instanceof estruturas_1.DescritorTipoClasse)) {
|
|
20010
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(mesclaVariavel.nome, 'Misturável precisa ser uma classe.', declaracao.linha);
|
|
19744
20011
|
}
|
|
20012
|
+
mesclaResolvidas.push(misturável);
|
|
19745
20013
|
}
|
|
19746
20014
|
// TODO: Precisamos disso?
|
|
19747
20015
|
this.pilhaEscoposExecucao.definirVariavel(declaracao.simbolo.lexema, declaracao);
|
|
19748
|
-
if (
|
|
19749
|
-
this.pilhaEscoposExecucao.definirVariavel('super',
|
|
20016
|
+
if (superClassesResolvidas.length > 0) {
|
|
20017
|
+
this.pilhaEscoposExecucao.definirVariavel('super', superClassesResolvidas[0]);
|
|
19750
20018
|
}
|
|
19751
20019
|
const metodos = {};
|
|
19752
20020
|
const metodosEstaticos = {};
|
|
@@ -19817,7 +20085,7 @@ class InterpretadorBase {
|
|
|
19817
20085
|
acessoPropriedades[prop.nome.lexema] = prop.acesso;
|
|
19818
20086
|
}
|
|
19819
20087
|
}
|
|
19820
|
-
const descritorTipoClasse = new estruturas_1.DescritorTipoClasse(declaracao.simbolo,
|
|
20088
|
+
const descritorTipoClasse = new estruturas_1.DescritorTipoClasse(declaracao.simbolo, superClassesResolvidas, metodos, declaracao.propriedades);
|
|
19821
20089
|
descritorTipoClasse.metodosEstaticos = metodosEstaticos;
|
|
19822
20090
|
descritorTipoClasse.membrosEstaticos = membrosEstaticos;
|
|
19823
20091
|
descritorTipoClasse.obtenedores = obtenedores;
|
|
@@ -19832,13 +20100,43 @@ class InterpretadorBase {
|
|
|
19832
20100
|
// Toda classe sem superclasse explícita herda implicitamente de `Objeto`.
|
|
19833
20101
|
// Isso só deve acontecer quando OBJETO_BASE já estiver inicializado e a classe
|
|
19834
20102
|
// atual não for o próprio OBJETO_BASE, para evitar cadeias de herança recursivas.
|
|
19835
|
-
if (
|
|
19836
|
-
descritorTipoClasse.
|
|
20103
|
+
if (descritorTipoClasse.superClasses.length === 0 && estruturas_1.OBJETO_BASE && descritorTipoClasse !== estruturas_1.OBJETO_BASE) {
|
|
20104
|
+
descritorTipoClasse.superClasses = [estruturas_1.OBJETO_BASE];
|
|
20105
|
+
}
|
|
20106
|
+
// Calcular o OReM (linearização C3) após os pais estarem definidos.
|
|
20107
|
+
descritorTipoClasse.orem = estruturas_1.DescritorTipoClasse.computarOReM(descritorTipoClasse);
|
|
20108
|
+
// Mesclar métodos e propriedades dos misturávels (primeiro misturável ganha se não definido na classe).
|
|
20109
|
+
for (const misturável of mesclaResolvidas) {
|
|
20110
|
+
for (const [nome, funcao] of Object.entries(misturável.metodos)) {
|
|
20111
|
+
if (!descritorTipoClasse.metodos.hasOwnProperty(nome)) {
|
|
20112
|
+
descritorTipoClasse.metodos[nome] = funcao;
|
|
20113
|
+
}
|
|
20114
|
+
}
|
|
20115
|
+
for (const [nome, funcao] of Object.entries(misturável.obtenedores)) {
|
|
20116
|
+
if (!descritorTipoClasse.obtenedores.hasOwnProperty(nome)) {
|
|
20117
|
+
descritorTipoClasse.obtenedores[nome] = funcao;
|
|
20118
|
+
}
|
|
20119
|
+
}
|
|
20120
|
+
for (const [nome, funcao] of Object.entries(misturável.definidores)) {
|
|
20121
|
+
if (!descritorTipoClasse.definidores.hasOwnProperty(nome)) {
|
|
20122
|
+
descritorTipoClasse.definidores[nome] = funcao;
|
|
20123
|
+
}
|
|
20124
|
+
}
|
|
20125
|
+
for (const prop of misturável.propriedades) {
|
|
20126
|
+
const jaDeclarada = descritorTipoClasse.propriedades.some((p) => p.nome.lexema === prop.nome.lexema);
|
|
20127
|
+
if (!jaDeclarada) {
|
|
20128
|
+
descritorTipoClasse.propriedades.push(prop);
|
|
20129
|
+
}
|
|
20130
|
+
}
|
|
19837
20131
|
}
|
|
19838
20132
|
// Verifica se a subclasse concreta implementa todos os métodos abstratos
|
|
19839
|
-
// da superclasse abstrata.
|
|
19840
|
-
if (!declaracao.abstrata
|
|
19841
|
-
superClasse
|
|
20133
|
+
// da(s) superclasse(s) abstrata(s).
|
|
20134
|
+
if (!declaracao.abstrata) {
|
|
20135
|
+
for (const superClasse of superClassesResolvidas) {
|
|
20136
|
+
if (superClasse.abstrata) {
|
|
20137
|
+
superClasse.verificarImplementacaoAbstrata(descritorTipoClasse);
|
|
20138
|
+
}
|
|
20139
|
+
}
|
|
19842
20140
|
}
|
|
19843
20141
|
// TODO: Até então, a única exceção a isso é Égua Clássico.
|
|
19844
20142
|
// Por enquanto, tudo bem deixar isso aqui.
|
|
@@ -20201,7 +20499,7 @@ class InterpretadorBase {
|
|
|
20201
20499
|
return objeto.valor.paraTexto();
|
|
20202
20500
|
if (objeto instanceof construtos_1.Literal)
|
|
20203
20501
|
return this.paraTexto(objeto.valor);
|
|
20204
|
-
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse || objeto instanceof estruturas_1.DeleguaFuncao)
|
|
20502
|
+
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse || objeto instanceof estruturas_1.DeleguaFuncao || objeto instanceof estruturas_1.DescritorTipoClasse)
|
|
20205
20503
|
return objeto.paraTexto();
|
|
20206
20504
|
if (objeto instanceof quebras_1.RetornoQuebra) {
|
|
20207
20505
|
if (typeof objeto.valor === 'boolean')
|
|
@@ -20484,7 +20782,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
20484
20782
|
return objeto.valor.paraTexto();
|
|
20485
20783
|
if (objeto instanceof construtos_1.Literal || objeto instanceof construtos_1.Tupla)
|
|
20486
20784
|
return objeto.paraTextoSaida();
|
|
20487
|
-
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse || objeto instanceof estruturas_1.DeleguaFuncao)
|
|
20785
|
+
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse || objeto instanceof estruturas_1.DeleguaFuncao || objeto instanceof estruturas_1.DescritorTipoClasse)
|
|
20488
20786
|
return objeto.paraTexto();
|
|
20489
20787
|
if (objeto instanceof quebras_1.RetornoQuebra) {
|
|
20490
20788
|
if (typeof objeto.valor === 'boolean')
|
|
@@ -26017,6 +26315,7 @@ exports.palavrasReservadasDelegua = {
|
|
|
26017
26315
|
função: delegua_1.default.FUNÇÃO,
|
|
26018
26316
|
herda: delegua_1.default.HERDA,
|
|
26019
26317
|
implementa: delegua_1.default.IMPLEMENTA,
|
|
26318
|
+
mescla: delegua_1.default.MESCLA,
|
|
26020
26319
|
importar: delegua_1.default.IMPORTAR,
|
|
26021
26320
|
importe: delegua_1.default.IMPORTAR,
|
|
26022
26321
|
interface: delegua_1.default.INTERFACE,
|
|
@@ -26318,6 +26617,7 @@ exports.default = {
|
|
|
26318
26617
|
HERDA: 'HERDA',
|
|
26319
26618
|
IDENTIFICADOR: 'IDENTIFICADOR',
|
|
26320
26619
|
IMPLEMENTA: 'IMPLEMENTA',
|
|
26620
|
+
MESCLA: 'MESCLA',
|
|
26321
26621
|
INTERFACE: 'INTERFACE',
|
|
26322
26622
|
IGUAL: 'IGUAL',
|
|
26323
26623
|
IGUAL_IGUAL: 'IGUAL_IGUAL',
|