@designliquido/delegua 0.11.13 → 0.12.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/bin/package.json +1 -1
- package/execucao.js +13 -5
- package/execucao.js.map +1 -1
- package/fontes/construtos/atribuir.js +1 -1
- package/fontes/construtos/atribuir.js.map +1 -1
- package/fontes/construtos/chamada.d.ts +2 -0
- package/fontes/construtos/chamada.js +20 -0
- package/fontes/construtos/chamada.js.map +1 -1
- package/fontes/declaracoes/classe.js +1 -1
- package/fontes/declaracoes/classe.js.map +1 -1
- package/fontes/declaracoes/enquanto.js +1 -1
- package/fontes/declaracoes/enquanto.js.map +1 -1
- package/fontes/declaracoes/escolha.js +1 -1
- package/fontes/declaracoes/escolha.js.map +1 -1
- package/fontes/declaracoes/escreva.js +1 -1
- package/fontes/declaracoes/escreva.js.map +1 -1
- package/fontes/declaracoes/fazer.js +1 -1
- package/fontes/declaracoes/fazer.js.map +1 -1
- package/fontes/declaracoes/funcao.js +1 -1
- package/fontes/declaracoes/funcao.js.map +1 -1
- package/fontes/declaracoes/importar.js +1 -1
- package/fontes/declaracoes/importar.js.map +1 -1
- package/fontes/declaracoes/para.js +1 -1
- package/fontes/declaracoes/para.js.map +1 -1
- package/fontes/declaracoes/se.js +1 -1
- package/fontes/declaracoes/se.js.map +1 -1
- package/fontes/declaracoes/tente.js +1 -1
- package/fontes/declaracoes/tente.js.map +1 -1
- package/fontes/declaracoes/var.js +1 -1
- package/fontes/declaracoes/var.js.map +1 -1
- package/fontes/delegua.d.ts +1 -0
- package/fontes/delegua.js +13 -0
- package/fontes/delegua.js.map +1 -1
- package/fontes/depuracao/servidor-depuracao.d.ts +2 -1
- package/fontes/depuracao/servidor-depuracao.js +43 -13
- package/fontes/depuracao/servidor-depuracao.js.map +1 -1
- package/fontes/espaco-variaveis.d.ts +12 -0
- package/fontes/espaco-variaveis.js +10 -0
- package/fontes/espaco-variaveis.js.map +1 -1
- package/fontes/estruturas/delegua-funcao.d.ts +3 -0
- package/fontes/estruturas/delegua-funcao.js +3 -0
- package/fontes/estruturas/delegua-funcao.js.map +1 -1
- package/fontes/interfaces/escopo-execucao.d.ts +4 -0
- package/fontes/interfaces/interpretador-com-depuracao-interface.d.ts +7 -5
- package/fontes/interfaces/interpretador-interface.d.ts +12 -18
- package/fontes/interfaces/pilha-escopos-execucao-interface.d.ts +2 -1
- package/fontes/interfaces/resolvedor-interface.d.ts +0 -12
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +12 -12
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +19 -13
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +12 -12
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +12 -12
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
- package/fontes/interpretador/dialetos/visualg.d.ts +1 -1
- package/fontes/interpretador/dialetos/visualg.js +1 -1
- package/fontes/interpretador/dialetos/visualg.js.map +1 -1
- package/fontes/interpretador/interpretador-com-depuracao.d.ts +83 -12
- package/fontes/interpretador/interpretador-com-depuracao.js +238 -111
- package/fontes/interpretador/interpretador-com-depuracao.js.map +1 -1
- package/fontes/interpretador/interpretador.d.ts +25 -24
- package/fontes/interpretador/interpretador.js +35 -21
- package/fontes/interpretador/interpretador.js.map +1 -1
- package/fontes/interpretador/pilha-escopos-execucao.d.ts +2 -1
- package/fontes/interpretador/pilha-escopos-execucao.js +10 -1
- package/fontes/interpretador/pilha-escopos-execucao.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,6 +4,8 @@ exports.InterpretadorComDepuracao = void 0;
|
|
|
4
4
|
const espaco_variaveis_1 = require("../espaco-variaveis");
|
|
5
5
|
const quebras_1 = require("../quebras");
|
|
6
6
|
const interpretador_1 = require("./interpretador");
|
|
7
|
+
const construtos_1 = require("../construtos");
|
|
8
|
+
const inferenciador_1 = require("./inferenciador");
|
|
7
9
|
/**
|
|
8
10
|
* Implementação do Interpretador com suporte a depuração.
|
|
9
11
|
* Herda o Interpretador padrão de Delégua e implementa métodos a mais, que são
|
|
@@ -30,8 +32,101 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
30
32
|
this.pontosParada = [];
|
|
31
33
|
this.pontoDeParadaAtivo = false;
|
|
32
34
|
this.escopoAtual = 0;
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
+
this.executandoChamada = false;
|
|
36
|
+
this.passos = 0;
|
|
37
|
+
}
|
|
38
|
+
async gerarIdResolucaoChamada(expressao) {
|
|
39
|
+
const argumentosResolvidos = [];
|
|
40
|
+
for (let argumento of expressao.argumentos) {
|
|
41
|
+
argumentosResolvidos.push(await this.avaliar(argumento));
|
|
42
|
+
}
|
|
43
|
+
return argumentosResolvidos.reduce((acumulador, argumento) => acumulador += `,${argumento.hasOwnProperty('valor') ? argumento.valor : argumento}`, expressao.id);
|
|
44
|
+
}
|
|
45
|
+
async visitarExpressaoDeChamada(expressao) {
|
|
46
|
+
const _idChamadaComArgumentos = await this.gerarIdResolucaoChamada(expressao);
|
|
47
|
+
// Usado na abertura do bloco de escopo da chamada.
|
|
48
|
+
this.idChamadaAtual = _idChamadaComArgumentos;
|
|
49
|
+
this.executandoChamada = true;
|
|
50
|
+
this.proximoEscopo = 'funcao';
|
|
51
|
+
const retorno = await super.visitarExpressaoDeChamada(expressao);
|
|
52
|
+
this.executandoChamada = false;
|
|
53
|
+
const escopoAtual = this.pilhaEscoposExecucao.topoDaPilha();
|
|
54
|
+
escopoAtual.ambiente.resolucoesChamadas[_idChamadaComArgumentos] = retorno;
|
|
55
|
+
return retorno;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A execução de uma atribuição de variável no interpretador com depuração pode ser em duas etapas.
|
|
59
|
+
* O desenvolvedor pode inspecionar o lado direito e ir parando a execução usando
|
|
60
|
+
* F10, por exemplo. Neste caso, a instrução aqui é executada duas vezes:
|
|
61
|
+
* A primeira para armazenar o valor do lado direito em `this.valorRetornoEscopoAnterior`, e a
|
|
62
|
+
* segunda para efetivamente atribuir o valor da variável.
|
|
63
|
+
* @param expressao
|
|
64
|
+
* @returns
|
|
65
|
+
*/
|
|
66
|
+
async visitarDeclaracaoDeAtribuicao(expressao) {
|
|
67
|
+
if (expressao.valor instanceof construtos_1.Chamada) {
|
|
68
|
+
const escopoAtual = this.pilhaEscoposExecucao.topoDaPilha();
|
|
69
|
+
const idChamadaComArgumentos = await this.gerarIdResolucaoChamada(expressao.valor);
|
|
70
|
+
if (escopoAtual.ambiente.resolucoesChamadas.hasOwnProperty(idChamadaComArgumentos)) {
|
|
71
|
+
const retornar = escopoAtual.ambiente.resolucoesChamadas[idChamadaComArgumentos];
|
|
72
|
+
this.pilhaEscoposExecucao.atribuirVariavel(expressao.simbolo, retornar);
|
|
73
|
+
delete escopoAtual.ambiente.resolucoesChamadas[idChamadaComArgumentos];
|
|
74
|
+
return retornar;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const valor = await this.avaliar(expressao.valor);
|
|
78
|
+
this.pilhaEscoposExecucao.atribuirVariavel(expressao.simbolo, valor);
|
|
79
|
+
return valor;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A execução de `var` no interpretador com depuração pode ser em duas etapas.
|
|
83
|
+
* O desenvolvedor pode inspecionar o lado direito e ir parando a execução usando
|
|
84
|
+
* F10, por exemplo. Neste caso, a instrução aqui é executada duas vezes:
|
|
85
|
+
* A primeira para armazenar o valor do lado direito em `this.valorRetornoEscopoAnterior`, e a
|
|
86
|
+
* segunda para efetivamente atribuir o valor da variável.
|
|
87
|
+
* @param declaracao A declaração Var
|
|
88
|
+
* @returns O valor do resultado resolvido, se a declaração resolveu.
|
|
89
|
+
* Nulo ou indefinido em caso contrário.
|
|
90
|
+
*/
|
|
91
|
+
async visitarDeclaracaoVar(declaracao) {
|
|
92
|
+
if (declaracao.inicializador instanceof construtos_1.Chamada) {
|
|
93
|
+
const escopoAtual = this.pilhaEscoposExecucao.topoDaPilha();
|
|
94
|
+
const idChamadaComArgumentos = await this.gerarIdResolucaoChamada(declaracao.inicializador);
|
|
95
|
+
if (escopoAtual.ambiente.resolucoesChamadas.hasOwnProperty(idChamadaComArgumentos)) {
|
|
96
|
+
const retornar = escopoAtual.ambiente.resolucoesChamadas[idChamadaComArgumentos];
|
|
97
|
+
this.pilhaEscoposExecucao.definirVariavel(declaracao.simbolo.lexema, retornar);
|
|
98
|
+
delete escopoAtual.ambiente.resolucoesChamadas[idChamadaComArgumentos];
|
|
99
|
+
return retornar;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const valorFinal = await this.avaliacaoDeclaracaoVar(declaracao);
|
|
103
|
+
if (valorFinal !== null && valorFinal !== undefined) {
|
|
104
|
+
this.pilhaEscoposExecucao.definirVariavel(declaracao.simbolo.lexema, valorFinal);
|
|
105
|
+
}
|
|
106
|
+
return valorFinal;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Ao executar um retorno, manter o valor retornado no Interpretador para
|
|
110
|
+
* uso por linhas que foram executadas com o comando `próximo` do depurador.
|
|
111
|
+
* @param declaracao Uma declaracao Retorna
|
|
112
|
+
* @returns O resultado da execução da visita.
|
|
113
|
+
*/
|
|
114
|
+
async visitarExpressaoRetornar(declaracao) {
|
|
115
|
+
const retorno = await super.visitarExpressaoRetornar(declaracao);
|
|
116
|
+
// O escopo atual é marcado como finalizado, para notificar a
|
|
117
|
+
// instrução de que deve ser descartado.
|
|
118
|
+
const escopoAtual = this.pilhaEscoposExecucao.topoDaPilha();
|
|
119
|
+
escopoAtual.finalizado = true;
|
|
120
|
+
// Acha o primeiro escopo de função.
|
|
121
|
+
const escopoFuncao = this.pilhaEscoposExecucao.obterEscopoPorTipo('funcao');
|
|
122
|
+
if (escopoFuncao === undefined) {
|
|
123
|
+
return Promise.reject('retorna() chamado fora de execução de função.');
|
|
124
|
+
}
|
|
125
|
+
if (escopoFuncao.idChamada !== undefined) {
|
|
126
|
+
escopoAtual.ambiente.resolucoesChamadas[escopoFuncao.idChamada] =
|
|
127
|
+
retorno && retorno.hasOwnProperty('valor') ? retorno.valor : retorno;
|
|
128
|
+
}
|
|
129
|
+
return retorno;
|
|
35
130
|
}
|
|
36
131
|
/**
|
|
37
132
|
* Se bloco de execução já foi instanciado antes (por exemplo, quando há um ponto de parada e a
|
|
@@ -44,6 +139,7 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
44
139
|
* @param ambiente O ambiente de execução quando houver, como parâmetros, argumentos, etc.
|
|
45
140
|
*/
|
|
46
141
|
async executarBloco(declaracoes, ambiente) {
|
|
142
|
+
// Se o escopo atual não é o último.
|
|
47
143
|
if (this.escopoAtual < this.pilhaEscoposExecucao.elementos() - 1) {
|
|
48
144
|
this.escopoAtual++;
|
|
49
145
|
const proximoEscopo = this.pilhaEscoposExecucao.naPosicao(this.escopoAtual);
|
|
@@ -59,25 +155,26 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
59
155
|
break;
|
|
60
156
|
}
|
|
61
157
|
retornoExecucao = await this.executar(proximoEscopo.declaracoes[proximoEscopo.declaracaoAtual]);
|
|
158
|
+
// Um ponto de parada ativo pode ter vindo de um escopo mais interno.
|
|
159
|
+
// Por isso verificamos outra parada aqui para evitar que
|
|
160
|
+
// `this.declaracaoAtual` seja incrementado.
|
|
161
|
+
if (this.pontoDeParadaAtivo) {
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
62
164
|
}
|
|
63
165
|
this.pilhaEscoposExecucao.removerUltimo();
|
|
64
166
|
this.escopoAtual--;
|
|
65
167
|
return retornoExecucao;
|
|
66
168
|
}
|
|
67
169
|
else {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this.pilhaEscoposExecucao.empilhar(escopoExecucao);
|
|
74
|
-
this.escopoAtual++;
|
|
75
|
-
if (this.comandoProximo) {
|
|
76
|
-
// Quando o comando for 'próximo', não executa.
|
|
77
|
-
// Aguarda o usuário com a próxima instrução vinda do depurador.
|
|
78
|
-
return null;
|
|
170
|
+
this.abrirNovoBlocoEscopo(declaracoes, ambiente, this.proximoEscopo || 'outro');
|
|
171
|
+
const ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
|
|
172
|
+
if (this.idChamadaAtual) {
|
|
173
|
+
ultimoEscopo.idChamada = this.idChamadaAtual;
|
|
174
|
+
this.idChamadaAtual = undefined;
|
|
79
175
|
}
|
|
80
|
-
|
|
176
|
+
this.proximoEscopo = undefined;
|
|
177
|
+
if (this.comando !== 'adentrarEscopo') {
|
|
81
178
|
return await this.executarUltimoEscopo();
|
|
82
179
|
}
|
|
83
180
|
}
|
|
@@ -91,11 +188,68 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
91
188
|
const buscaPontoParada = this.pontosParada.filter((p) => p.hashArquivo === declaracao.hashArquivo &&
|
|
92
189
|
p.linha === declaracao.linha);
|
|
93
190
|
if (buscaPontoParada.length > 0) {
|
|
94
|
-
console.log(
|
|
191
|
+
console.log(`Ponto de parada encontrado. Linha: ${declaracao.linha}.`);
|
|
95
192
|
return true;
|
|
96
193
|
}
|
|
97
194
|
return false;
|
|
98
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* No interpretador com depuração, este método é dividido em dois outros métodos privados:
|
|
198
|
+
* - `this.executarUmPassoNoEscopo`, que executa apenas uma instrução e nada mais;
|
|
199
|
+
* - `this.executarUltimoEscopoComandoContinuar`, que é a execução trivial de um escopo inteiro,
|
|
200
|
+
* ou com todas as instruções, ou até encontrar um ponto de parada.
|
|
201
|
+
* @param manterAmbiente Se verdadeiro, junta elementos do último escopo com o escopo
|
|
202
|
+
* imediatamente abaixo.
|
|
203
|
+
* @param naoVerificarPrimeiraExecucao Booleano que pede ao Interpretador para não
|
|
204
|
+
* verificar o ponto de parada na primeira execução.
|
|
205
|
+
* Normalmente usado pelo Servidor de Depuração para continuar uma linha.
|
|
206
|
+
* @returns O retorno da execução.
|
|
207
|
+
*/
|
|
208
|
+
async executarUltimoEscopo(manterAmbiente = false, naoVerificarPrimeiraExecucao = false) {
|
|
209
|
+
switch (this.comando) {
|
|
210
|
+
case 'adentrarEscopo':
|
|
211
|
+
case 'proximo':
|
|
212
|
+
if (!this.executandoChamada) {
|
|
213
|
+
return this.executarUmPassoNoEscopo();
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
return this.executarUltimoEscopoComandoContinuar(manterAmbiente, naoVerificarPrimeiraExecucao);
|
|
217
|
+
}
|
|
218
|
+
default:
|
|
219
|
+
return this.executarUltimoEscopoComandoContinuar(manterAmbiente, naoVerificarPrimeiraExecucao);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async executarUmPassoNoEscopo() {
|
|
223
|
+
const ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
|
|
224
|
+
let retornoExecucao;
|
|
225
|
+
if (this.passos > 0) {
|
|
226
|
+
this.passos--;
|
|
227
|
+
retornoExecucao = await this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
|
|
228
|
+
if (!this.pontoDeParadaAtivo) {
|
|
229
|
+
ultimoEscopo.declaracaoAtual++;
|
|
230
|
+
}
|
|
231
|
+
if (ultimoEscopo.declaracaoAtual >= ultimoEscopo.declaracoes.length || ultimoEscopo.finalizado) {
|
|
232
|
+
let outroEscopo = this.pilhaEscoposExecucao.topoDaPilha();
|
|
233
|
+
if (retornoExecucao instanceof quebras_1.RetornoQuebra) {
|
|
234
|
+
while (outroEscopo.tipo !== 'funcao') {
|
|
235
|
+
this.pilhaEscoposExecucao.removerUltimo();
|
|
236
|
+
const escopoAnterior = this.pilhaEscoposExecucao.topoDaPilha();
|
|
237
|
+
escopoAnterior.ambiente.resolucoesChamadas = Object.assign(escopoAnterior.ambiente.resolucoesChamadas, outroEscopo.ambiente.resolucoesChamadas);
|
|
238
|
+
this.escopoAtual--;
|
|
239
|
+
outroEscopo = this.pilhaEscoposExecucao.topoDaPilha();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
this.pilhaEscoposExecucao.removerUltimo();
|
|
243
|
+
const escopoAnterior = this.pilhaEscoposExecucao.topoDaPilha();
|
|
244
|
+
escopoAnterior.ambiente.resolucoesChamadas = Object.assign(escopoAnterior.ambiente.resolucoesChamadas, outroEscopo.ambiente.resolucoesChamadas);
|
|
245
|
+
this.escopoAtual--;
|
|
246
|
+
}
|
|
247
|
+
if (this.pilhaEscoposExecucao.elementos() === 1) {
|
|
248
|
+
this.finalizacaoDaExecucao();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return retornoExecucao;
|
|
252
|
+
}
|
|
99
253
|
/**
|
|
100
254
|
* Continua a interpretação parcial do último ponto em que parou.
|
|
101
255
|
* Pode ser tanto o começo da execução inteira, ou pós comando do depurador
|
|
@@ -107,10 +261,10 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
107
261
|
* Normalmente usado pelo Servidor de Depuração para continuar uma linha.
|
|
108
262
|
* @returns Um objeto de retorno, com erros encontrados se houverem.
|
|
109
263
|
*/
|
|
110
|
-
async
|
|
264
|
+
async executarUltimoEscopoComandoContinuar(manterAmbiente = false, naoVerificarPrimeiraExecucao = false) {
|
|
111
265
|
const ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
|
|
266
|
+
let retornoExecucao;
|
|
112
267
|
try {
|
|
113
|
-
let retornoExecucao;
|
|
114
268
|
for (; !(retornoExecucao instanceof quebras_1.Quebra) &&
|
|
115
269
|
ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
|
|
116
270
|
if (naoVerificarPrimeiraExecucao) {
|
|
@@ -123,14 +277,21 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
123
277
|
}
|
|
124
278
|
}
|
|
125
279
|
retornoExecucao = await this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
|
|
280
|
+
// Um ponto de parada ativo pode ter vindo de um escopo mais interno.
|
|
281
|
+
// Por isso verificamos outra parada aqui para evitar que
|
|
282
|
+
// `this.declaracaoAtual` seja incrementado.
|
|
283
|
+
if (this.pontoDeParadaAtivo) {
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
126
286
|
}
|
|
127
287
|
return retornoExecucao;
|
|
128
288
|
}
|
|
129
289
|
finally {
|
|
130
|
-
if (!this.pontoDeParadaAtivo) {
|
|
290
|
+
if (!this.pontoDeParadaAtivo && this.comando !== 'adentrarEscopo') {
|
|
131
291
|
this.pilhaEscoposExecucao.removerUltimo();
|
|
292
|
+
const escopoAnterior = this.pilhaEscoposExecucao.topoDaPilha();
|
|
293
|
+
escopoAnterior.ambiente.resolucoesChamadas = Object.assign(escopoAnterior.ambiente.resolucoesChamadas, ultimoEscopo.ambiente.resolucoesChamadas);
|
|
132
294
|
if (manterAmbiente) {
|
|
133
|
-
const escopoAnterior = this.pilhaEscoposExecucao.topoDaPilha();
|
|
134
295
|
escopoAnterior.ambiente.valores = Object.assign(escopoAnterior.ambiente.valores, ultimoEscopo.ambiente.valores);
|
|
135
296
|
}
|
|
136
297
|
this.escopoAtual--;
|
|
@@ -148,45 +309,15 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
148
309
|
* Diferentemente de `executarUltimoEscopo`, este método descarta apenas um escopo (o que foi chamado).
|
|
149
310
|
* @see executarBloco
|
|
150
311
|
*/
|
|
151
|
-
async
|
|
152
|
-
this.
|
|
153
|
-
const primeiroEscopo = this.pilhaEscoposExecucao.naPosicao(1);
|
|
154
|
-
let retornoExecucao;
|
|
155
|
-
// Primeira execução sempre ocorre, independente de pontos de parada.
|
|
156
|
-
retornoExecucao = await this.executar(primeiroEscopo.declaracoes[primeiroEscopo.declaracaoAtual]);
|
|
157
|
-
primeiroEscopo.declaracaoAtual++;
|
|
158
|
-
for (; !(retornoExecucao instanceof quebras_1.Quebra) &&
|
|
159
|
-
primeiroEscopo.declaracaoAtual < primeiroEscopo.declaracoes.length; primeiroEscopo.declaracaoAtual++) {
|
|
160
|
-
this.pontoDeParadaAtivo = this.verificarPontoParada(primeiroEscopo.declaracoes[primeiroEscopo.declaracaoAtual]);
|
|
161
|
-
if (this.pontoDeParadaAtivo) {
|
|
162
|
-
break;
|
|
163
|
-
}
|
|
164
|
-
retornoExecucao = await this.executar(primeiroEscopo.declaracoes[primeiroEscopo.declaracaoAtual]);
|
|
165
|
-
}
|
|
166
|
-
if (primeiroEscopo.declaracaoAtual >= primeiroEscopo.declaracoes.length) {
|
|
167
|
-
this.pilhaEscoposExecucao.removerUltimo();
|
|
168
|
-
}
|
|
169
|
-
if (this.pilhaEscoposExecucao.elementos() === 1) {
|
|
170
|
-
this.finalizacaoDaExecucao();
|
|
171
|
-
}
|
|
312
|
+
async instrucaoContinuarInterpretacao() {
|
|
313
|
+
this.executarUltimoEscopoComandoContinuar(false, true);
|
|
172
314
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
numeroEscopo == this.pilhaEscoposExecucao.pilha.length - 1) {
|
|
180
|
-
let numeroEscopoAtual = numeroEscopo;
|
|
181
|
-
while (numeroEscopoAtual > 0) {
|
|
182
|
-
const escopo = this.pilhaEscoposExecucao.pilha[numeroEscopoAtual];
|
|
183
|
-
if (escopo.declaracoes.length == escopo.declaracaoAtual) {
|
|
184
|
-
this.pilhaEscoposExecucao.removerUltimo();
|
|
185
|
-
this.escopoAtual--;
|
|
186
|
-
}
|
|
187
|
-
numeroEscopoAtual--;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
315
|
+
/**
|
|
316
|
+
* Empilha um escopo se for possível.
|
|
317
|
+
* Se não for, apenas executa a instrução corrente.
|
|
318
|
+
*/
|
|
319
|
+
async adentrarEscopo() {
|
|
320
|
+
throw new Error('Método não implementado.');
|
|
190
321
|
}
|
|
191
322
|
/**
|
|
192
323
|
* Interpreta apenas uma instrução a partir do ponto de parada ativo, conforme comando do depurador.
|
|
@@ -194,28 +325,20 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
194
325
|
* primeiro escopo, subindo até o último elemento executado do último escopo.
|
|
195
326
|
* @param escopo Indica o escopo a ser visitado. Usado para construir uma pilha de chamadas do lado JS.
|
|
196
327
|
*/
|
|
197
|
-
async
|
|
328
|
+
async instrucaoPasso(escopo = 1) {
|
|
329
|
+
this.passos = 1;
|
|
198
330
|
const escopoVisitado = this.pilhaEscoposExecucao.naPosicao(escopo);
|
|
331
|
+
if (escopoVisitado.declaracaoAtual >= escopoVisitado.declaracoes.length || escopoVisitado.finalizado) {
|
|
332
|
+
this.pilhaEscoposExecucao.removerUltimo();
|
|
333
|
+
}
|
|
334
|
+
if (this.pilhaEscoposExecucao.elementos() === 1) {
|
|
335
|
+
return this.finalizacaoDaExecucao();
|
|
336
|
+
}
|
|
199
337
|
if (escopo < this.escopoAtual) {
|
|
200
|
-
this.
|
|
338
|
+
this.instrucaoPasso(escopo + 1);
|
|
201
339
|
}
|
|
202
340
|
else {
|
|
203
|
-
|
|
204
|
-
await this.executar(declaracaoAtual);
|
|
205
|
-
if (this.comandoAdentrarEscopo) {
|
|
206
|
-
// Depurador comandou instrução 'adentrar-escopo', ou bloco de escopo
|
|
207
|
-
// não é de uma função.
|
|
208
|
-
// Instrução só foi realmente executada se não abriu novo bloco de escopo.
|
|
209
|
-
// Por isso, `declaracaoAtual` não deve ser incrementada aqui.
|
|
210
|
-
this.comandoAdentrarEscopo = false;
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
escopoVisitado.declaracaoAtual++;
|
|
214
|
-
}
|
|
215
|
-
this.descartarEscoposFinalizados(escopo, escopoVisitado);
|
|
216
|
-
}
|
|
217
|
-
if (this.pilhaEscoposExecucao.elementos() === 1) {
|
|
218
|
-
this.finalizacaoDaExecucao();
|
|
341
|
+
await this.executarUmPassoNoEscopo();
|
|
219
342
|
}
|
|
220
343
|
}
|
|
221
344
|
/**
|
|
@@ -223,30 +346,8 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
223
346
|
* Se houver outros pontos de parada no mesmo escopo à frente da instrução atual, todos são ignorados.
|
|
224
347
|
* @param escopo Indica o escopo a ser visitado. Usado para construir uma pilha de chamadas do lado JS.
|
|
225
348
|
*/
|
|
226
|
-
async
|
|
227
|
-
|
|
228
|
-
if (escopo < this.escopoAtual - 1) {
|
|
229
|
-
this.proximoESair(escopo + 1);
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
const ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
|
|
233
|
-
let retornoExecucao;
|
|
234
|
-
for (; !(retornoExecucao instanceof quebras_1.Quebra) &&
|
|
235
|
-
ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
|
|
236
|
-
retornoExecucao = await this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
|
|
237
|
-
}
|
|
238
|
-
this.pilhaEscoposExecucao.removerUltimo();
|
|
239
|
-
this.escopoAtual--;
|
|
240
|
-
escopoVisitado.declaracaoAtual++;
|
|
241
|
-
}
|
|
242
|
-
// Se última instrução do escopo atual foi executada, descartar escopo.
|
|
243
|
-
if (escopoVisitado.declaracoes.length <= escopoVisitado.declaracaoAtual) {
|
|
244
|
-
this.pilhaEscoposExecucao.removerUltimo();
|
|
245
|
-
this.escopoAtual--;
|
|
246
|
-
}
|
|
247
|
-
if (this.pilhaEscoposExecucao.elementos() === 1) {
|
|
248
|
-
this.finalizacaoDaExecucao();
|
|
249
|
-
}
|
|
349
|
+
async instrucaoProximoESair() {
|
|
350
|
+
this.executarUltimoEscopoComandoContinuar(false, true);
|
|
250
351
|
}
|
|
251
352
|
/**
|
|
252
353
|
* Prepara a pilha de escopos para uma situação de depuração.
|
|
@@ -255,17 +356,31 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
255
356
|
*/
|
|
256
357
|
prepararParaDepuracao(declaracoes) {
|
|
257
358
|
this.declaracoes = declaracoes;
|
|
359
|
+
this.abrirNovoBlocoEscopo(declaracoes);
|
|
360
|
+
}
|
|
361
|
+
abrirNovoBlocoEscopo(declaracoes, ambiente, tipoEscopo = 'outro') {
|
|
258
362
|
const escopoExecucao = {
|
|
259
363
|
declaracoes: declaracoes,
|
|
260
364
|
declaracaoAtual: 0,
|
|
261
|
-
ambiente: new espaco_variaveis_1.EspacoVariaveis(),
|
|
365
|
+
ambiente: ambiente || new espaco_variaveis_1.EspacoVariaveis(),
|
|
366
|
+
finalizado: false,
|
|
367
|
+
tipo: tipoEscopo
|
|
262
368
|
};
|
|
263
369
|
this.pilhaEscoposExecucao.empilhar(escopoExecucao);
|
|
264
370
|
this.escopoAtual++;
|
|
265
371
|
}
|
|
266
372
|
/**
|
|
267
|
-
*
|
|
268
|
-
*
|
|
373
|
+
* Reimplementando este método aqui porque a execução por depuração não requer
|
|
374
|
+
* mostrar o resultado em momento algum, ou lidar com o retorno.
|
|
375
|
+
* @param declaracao A declaracao a ser executada.
|
|
376
|
+
* @param mostrarResultado Sempre falso.
|
|
377
|
+
* @returns O resultado da execução.
|
|
378
|
+
*/
|
|
379
|
+
async executar(declaracao, mostrarResultado = false) {
|
|
380
|
+
return await declaracao.aceitar(this);
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Interpretação utilizada pelo depurador para avaliar valores de variáveis.
|
|
269
384
|
* Diferentemente da interpretação tradicional, não possui indicadores
|
|
270
385
|
* de performance porque eles não fazem sentido aqui.
|
|
271
386
|
* @param declaracoes Um vetor de declarações.
|
|
@@ -274,21 +389,33 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
|
|
|
274
389
|
async interpretar(declaracoes, manterAmbiente = false) {
|
|
275
390
|
this.erros = [];
|
|
276
391
|
this.declaracoes = declaracoes;
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
};
|
|
282
|
-
this.pilhaEscoposExecucao.empilhar(escopoExecucao);
|
|
283
|
-
this.escopoAtual++;
|
|
284
|
-
await this.executarUltimoEscopo(manterAmbiente);
|
|
392
|
+
this.abrirNovoBlocoEscopo(declaracoes);
|
|
393
|
+
const resultado = await super.executarUltimoEscopo(manterAmbiente);
|
|
394
|
+
// Corrigir contador de escopos
|
|
395
|
+
this.escopoAtual--;
|
|
285
396
|
const retorno = {
|
|
286
397
|
erros: this.erros,
|
|
287
|
-
resultado: this.resultadoInterpretador
|
|
398
|
+
// resultado: this.resultadoInterpretador // Removido para simplificar `this.executar()`.
|
|
399
|
+
resultado: [resultado]
|
|
288
400
|
};
|
|
289
401
|
this.resultadoInterpretador = [];
|
|
290
402
|
return retorno;
|
|
291
403
|
}
|
|
404
|
+
/**
|
|
405
|
+
* Obtém o valor de uma variável por nome.
|
|
406
|
+
* Em versões anteriores, o mecanismo de avaliação fazia toda a avaliação tradicional,
|
|
407
|
+
* passando por Lexador, Avaliador Sintático e Interpretador.
|
|
408
|
+
* Isso tem sua cota de problemas, sobretudo porque a avaliação insere e descarta escopos,
|
|
409
|
+
* entrando em condição de corrida com a interpretação com depuração.
|
|
410
|
+
* @param nome O nome da variável.
|
|
411
|
+
*/
|
|
412
|
+
obterVariavel(nome) {
|
|
413
|
+
const valorOuVariavel = this.pilhaEscoposExecucao.obterValorVariavel({ lexema: nome });
|
|
414
|
+
return valorOuVariavel.hasOwnProperty('valor') ? valorOuVariavel : {
|
|
415
|
+
valor: valorOuVariavel,
|
|
416
|
+
tipo: (0, inferenciador_1.inferirTipoVariavel)(valorOuVariavel)
|
|
417
|
+
};
|
|
418
|
+
}
|
|
292
419
|
}
|
|
293
420
|
exports.InterpretadorComDepuracao = InterpretadorComDepuracao;
|
|
294
421
|
//# sourceMappingURL=interpretador-com-depuracao.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpretador-com-depuracao.js","sourceRoot":"","sources":["../../../fontes/interpretador/interpretador-com-depuracao.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"interpretador-com-depuracao.js","sourceRoot":"","sources":["../../../fontes/interpretador/interpretador-com-depuracao.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { EspacoVariaveis } from '../espaco-variaveis';
|
|
|
4
4
|
import { InterpretadorInterface, SimboloInterface, VariavelInterface } from '../interfaces';
|
|
5
5
|
import { Bloco, Classe, Continua, Declaracao, Enquanto, Escolha, Escreva, EscrevaMesmaLinha, Expressao, Fazer, FuncaoDeclaracao, Importar, Leia, Para, Retorna, Se, Tente, Var } from '../declaracoes';
|
|
6
6
|
import { DeleguaFuncao } from '../estruturas';
|
|
7
|
-
import { AcessoIndiceVariavel, Atribuir, Construto, FormatacaoEscrita, Literal, Super, Variavel } from '../construtos';
|
|
7
|
+
import { AcessoIndiceVariavel, Agrupamento, Atribuir, Construto, FormatacaoEscrita, Literal, Logico, Super, Unario, Variavel } from '../construtos';
|
|
8
8
|
import { ErroInterpretador } from './erro-interpretador';
|
|
9
9
|
import { RetornoInterpretador } from '../interfaces/retornos/retorno-interpretador';
|
|
10
10
|
import { ImportadorInterface } from '../interfaces/importador-interface';
|
|
@@ -40,21 +40,21 @@ export declare class Interpretador implements InterpretadorInterface {
|
|
|
40
40
|
* @param {any[]} variaveis A lista de variaveis interpoladas
|
|
41
41
|
* @returns O texto com o valor das variaveis.
|
|
42
42
|
*/
|
|
43
|
-
retirarInterpolacao
|
|
43
|
+
private retirarInterpolacao;
|
|
44
44
|
/**
|
|
45
45
|
* Busca variáveis interpoladas.
|
|
46
46
|
* @param {texto} textoOriginal O texto original com as variáveis interpoladas.
|
|
47
47
|
* @returns Uma lista de variáveis interpoladas.
|
|
48
48
|
*/
|
|
49
|
-
buscarVariaveisInterpolacao
|
|
49
|
+
private buscarVariaveisInterpolacao;
|
|
50
50
|
visitarExpressaoLiteral(expressao: Literal): any;
|
|
51
51
|
avaliar(expressao: Construto): Promise<any>;
|
|
52
|
-
visitarExpressaoAgrupamento(expressao:
|
|
53
|
-
eVerdadeiro(objeto: any): boolean;
|
|
54
|
-
verificarOperandoNumero(operador: SimboloInterface, operando: any): void;
|
|
55
|
-
visitarExpressaoUnaria(expressao:
|
|
52
|
+
visitarExpressaoAgrupamento(expressao: Agrupamento): Promise<any>;
|
|
53
|
+
protected eVerdadeiro(objeto: any): boolean;
|
|
54
|
+
protected verificarOperandoNumero(operador: SimboloInterface, operando: any): void;
|
|
55
|
+
visitarExpressaoUnaria(expressao: Unario): Promise<any>;
|
|
56
56
|
visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita): Promise<string>;
|
|
57
|
-
eIgual(esquerda: VariavelInterface | any, direita: VariavelInterface | any): boolean;
|
|
57
|
+
protected eIgual(esquerda: VariavelInterface | any, direita: VariavelInterface | any): boolean;
|
|
58
58
|
/**
|
|
59
59
|
* Verifica se operandos são números, que podem ser tanto variáveis puras do JavaScript
|
|
60
60
|
* (neste caso, `number`), ou podem ser variáveis de Delégua com inferência (`VariavelInterface`).
|
|
@@ -63,7 +63,7 @@ export declare class Interpretador implements InterpretadorInterface {
|
|
|
63
63
|
* @param esquerda O operando esquerdo.
|
|
64
64
|
* @returns Se ambos os operandos são números ou não.
|
|
65
65
|
*/
|
|
66
|
-
verificarOperandosNumeros(operador: SimboloInterface, direita: VariavelInterface | any, esquerda: VariavelInterface | any): void;
|
|
66
|
+
protected verificarOperandosNumeros(operador: SimboloInterface, direita: VariavelInterface | any, esquerda: VariavelInterface | any): void;
|
|
67
67
|
visitarExpressaoBinaria(expressao: any): Promise<any>;
|
|
68
68
|
/**
|
|
69
69
|
* Executa uma chamada de função, método ou classe.
|
|
@@ -76,28 +76,28 @@ export declare class Interpretador implements InterpretadorInterface {
|
|
|
76
76
|
* @param expressao A expressão.
|
|
77
77
|
* @returns O valor atribuído.
|
|
78
78
|
*/
|
|
79
|
-
|
|
80
|
-
procurarVariavel(simbolo: SimboloInterface): any;
|
|
79
|
+
visitarDeclaracaoDeAtribuicao(expressao: Atribuir): Promise<any>;
|
|
80
|
+
protected procurarVariavel(simbolo: SimboloInterface): any;
|
|
81
81
|
visitarExpressaoDeVariavel(expressao: Variavel): any;
|
|
82
82
|
visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
|
|
83
|
-
visitarExpressaoLogica(expressao:
|
|
83
|
+
visitarExpressaoLogica(expressao: Logico): Promise<any>;
|
|
84
84
|
/**
|
|
85
85
|
* Executa uma expressão Se, que tem uma condição, pode ter um bloco
|
|
86
86
|
* Senão, e múltiplos blocos Senão-se.
|
|
87
87
|
* @param declaracao A declaração Se.
|
|
88
88
|
* @returns O resultado da avaliação do bloco cuja condição é verdadeira.
|
|
89
89
|
*/
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
visitarDeclaracaoSe(declaracao: Se): Promise<any>;
|
|
91
|
+
visitarDeclaracaoPara(declaracao: Para): Promise<any>;
|
|
92
|
+
visitarDeclaracaoFazer(declaracao: Fazer): Promise<any>;
|
|
93
|
+
visitarDeclaracaoEscolha(declaracao: Escolha): Promise<any>;
|
|
94
94
|
/**
|
|
95
95
|
* Interpretação de uma declaração `tente`.
|
|
96
96
|
* @param declaracao O objeto da declaração.
|
|
97
97
|
*/
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
visitarDeclaracaoTente(declaracao: Tente): Promise<any>;
|
|
99
|
+
visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<any>;
|
|
100
|
+
visitarDeclaracaoImportar(declaracao: Importar): Promise<any>;
|
|
101
101
|
private avaliarArgumentosEscreva;
|
|
102
102
|
/**
|
|
103
103
|
* Execução de uma escrita na saída padrão, sem quebras de linha.
|
|
@@ -112,7 +112,7 @@ export declare class Interpretador implements InterpretadorInterface {
|
|
|
112
112
|
* @param declaracao A declaração.
|
|
113
113
|
* @returns Sempre nulo, por convenção de visita.
|
|
114
114
|
*/
|
|
115
|
-
|
|
115
|
+
visitarDeclaracaoEscreva(declaracao: Escreva): Promise<any>;
|
|
116
116
|
/**
|
|
117
117
|
* Empilha declarações na pilha de escopos de execução, cria um novo ambiente e
|
|
118
118
|
* executa as declarações empilhadas.
|
|
@@ -124,26 +124,27 @@ export declare class Interpretador implements InterpretadorInterface {
|
|
|
124
124
|
*/
|
|
125
125
|
executarBloco(declaracoes: Declaracao[], ambiente?: EspacoVariaveis): Promise<any>;
|
|
126
126
|
visitarExpressaoBloco(declaracao: Bloco): Promise<any>;
|
|
127
|
+
protected avaliacaoDeclaracaoVar(declaracao: Var): Promise<any>;
|
|
127
128
|
/**
|
|
128
129
|
* Executa expressão de definição de variável.
|
|
129
130
|
* @param declaracao A declaração Var
|
|
130
131
|
* @returns Sempre retorna nulo.
|
|
131
132
|
*/
|
|
132
|
-
|
|
133
|
+
visitarDeclaracaoVar(declaracao: Var): Promise<any>;
|
|
133
134
|
visitarExpressaoContinua(declaracao?: Continua): ContinuarQuebra;
|
|
134
135
|
visitarExpressaoSustar(declaracao?: any): SustarQuebra;
|
|
135
136
|
visitarExpressaoRetornar(declaracao: Retorna): Promise<RetornoQuebra>;
|
|
136
|
-
visitarExpressaoDeleguaFuncao(
|
|
137
|
+
visitarExpressaoDeleguaFuncao(declaracao: any): DeleguaFuncao;
|
|
137
138
|
visitarExpressaoAtribuicaoSobrescrita(expressao: any): Promise<any>;
|
|
138
139
|
visitarExpressaoAcessoIndiceVariavel(expressao: AcessoIndiceVariavel | any): Promise<any>;
|
|
139
140
|
visitarExpressaoDefinirValor(expressao: any): Promise<any>;
|
|
140
|
-
|
|
141
|
+
visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): void;
|
|
141
142
|
/**
|
|
142
143
|
* Executa uma declaração de classe.
|
|
143
144
|
* @param declaracao A declaração de classe.
|
|
144
145
|
* @returns Sempre retorna nulo, por ser requerido pelo contrato de visita.
|
|
145
146
|
*/
|
|
146
|
-
|
|
147
|
+
visitarDeclaracaoClasse(declaracao: Classe): Promise<any>;
|
|
147
148
|
/**
|
|
148
149
|
* Executa um acesso a método, normalmente de um objeto de classe.
|
|
149
150
|
* @param expressao A expressão de acesso.
|