@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.
Files changed (66) hide show
  1. package/bin/package.json +1 -1
  2. package/execucao.js +13 -5
  3. package/execucao.js.map +1 -1
  4. package/fontes/construtos/atribuir.js +1 -1
  5. package/fontes/construtos/atribuir.js.map +1 -1
  6. package/fontes/construtos/chamada.d.ts +2 -0
  7. package/fontes/construtos/chamada.js +20 -0
  8. package/fontes/construtos/chamada.js.map +1 -1
  9. package/fontes/declaracoes/classe.js +1 -1
  10. package/fontes/declaracoes/classe.js.map +1 -1
  11. package/fontes/declaracoes/enquanto.js +1 -1
  12. package/fontes/declaracoes/enquanto.js.map +1 -1
  13. package/fontes/declaracoes/escolha.js +1 -1
  14. package/fontes/declaracoes/escolha.js.map +1 -1
  15. package/fontes/declaracoes/escreva.js +1 -1
  16. package/fontes/declaracoes/escreva.js.map +1 -1
  17. package/fontes/declaracoes/fazer.js +1 -1
  18. package/fontes/declaracoes/fazer.js.map +1 -1
  19. package/fontes/declaracoes/funcao.js +1 -1
  20. package/fontes/declaracoes/funcao.js.map +1 -1
  21. package/fontes/declaracoes/importar.js +1 -1
  22. package/fontes/declaracoes/importar.js.map +1 -1
  23. package/fontes/declaracoes/para.js +1 -1
  24. package/fontes/declaracoes/para.js.map +1 -1
  25. package/fontes/declaracoes/se.js +1 -1
  26. package/fontes/declaracoes/se.js.map +1 -1
  27. package/fontes/declaracoes/tente.js +1 -1
  28. package/fontes/declaracoes/tente.js.map +1 -1
  29. package/fontes/declaracoes/var.js +1 -1
  30. package/fontes/declaracoes/var.js.map +1 -1
  31. package/fontes/delegua.d.ts +1 -0
  32. package/fontes/delegua.js +13 -0
  33. package/fontes/delegua.js.map +1 -1
  34. package/fontes/depuracao/servidor-depuracao.d.ts +2 -1
  35. package/fontes/depuracao/servidor-depuracao.js +43 -13
  36. package/fontes/depuracao/servidor-depuracao.js.map +1 -1
  37. package/fontes/espaco-variaveis.d.ts +12 -0
  38. package/fontes/espaco-variaveis.js +10 -0
  39. package/fontes/espaco-variaveis.js.map +1 -1
  40. package/fontes/estruturas/delegua-funcao.d.ts +3 -0
  41. package/fontes/estruturas/delegua-funcao.js +3 -0
  42. package/fontes/estruturas/delegua-funcao.js.map +1 -1
  43. package/fontes/interfaces/escopo-execucao.d.ts +4 -0
  44. package/fontes/interfaces/interpretador-com-depuracao-interface.d.ts +7 -5
  45. package/fontes/interfaces/interpretador-interface.d.ts +12 -18
  46. package/fontes/interfaces/pilha-escopos-execucao-interface.d.ts +2 -1
  47. package/fontes/interfaces/resolvedor-interface.d.ts +0 -12
  48. package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +12 -12
  49. package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +19 -13
  50. package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  51. package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +12 -12
  52. package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +12 -12
  53. package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  54. package/fontes/interpretador/dialetos/visualg.d.ts +1 -1
  55. package/fontes/interpretador/dialetos/visualg.js +1 -1
  56. package/fontes/interpretador/dialetos/visualg.js.map +1 -1
  57. package/fontes/interpretador/interpretador-com-depuracao.d.ts +83 -12
  58. package/fontes/interpretador/interpretador-com-depuracao.js +238 -111
  59. package/fontes/interpretador/interpretador-com-depuracao.js.map +1 -1
  60. package/fontes/interpretador/interpretador.d.ts +25 -24
  61. package/fontes/interpretador/interpretador.js +35 -21
  62. package/fontes/interpretador/interpretador.js.map +1 -1
  63. package/fontes/interpretador/pilha-escopos-execucao.d.ts +2 -1
  64. package/fontes/interpretador/pilha-escopos-execucao.js +10 -1
  65. package/fontes/interpretador/pilha-escopos-execucao.js.map +1 -1
  66. 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.comandoAdentrarEscopo = false;
34
- this.comandoProximo = false;
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
- const escopoExecucao = {
69
- declaracoes: declaracoes,
70
- declaracaoAtual: 0,
71
- ambiente: ambiente || new espaco_variaveis_1.EspacoVariaveis(),
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
- if (!this.comandoAdentrarEscopo) {
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('Ponto de parada encontrado.');
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 executarUltimoEscopo(manterAmbiente = false, naoVerificarPrimeiraExecucao = false) {
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 continuarInterpretacao() {
152
- this.escopoAtual = 1;
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
- descartarEscoposFinalizados(numeroEscopo, escopoVisitado) {
174
- // Se última instrução do escopo atual foi executada, e
175
- // escopos adicionais não foram criados com a última execução,
176
- // descartar este e todos os escopos abaixo deste que também estejam na última instrução.
177
- if (escopoVisitado.declaracoes.length ==
178
- escopoVisitado.declaracaoAtual &&
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 interpretarApenasUmaInstrucao(escopo = 1) {
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.interpretarApenasUmaInstrucao(escopo + 1);
338
+ this.instrucaoPasso(escopo + 1);
201
339
  }
202
340
  else {
203
- const declaracaoAtual = escopoVisitado.declaracoes[escopoVisitado.declaracaoAtual];
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 proximoESair(escopo = 1) {
227
- const escopoVisitado = this.pilhaEscoposExecucao.naPosicao(escopo);
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
- * Interpretação utilizada pelo depurador. Pode encerrar ao encontrar um
268
- * ponto de parada ou não.
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
- const escopoExecucao = {
278
- declaracoes: declaracoes,
279
- declaracaoAtual: 0,
280
- ambiente: new espaco_variaveis_1.EspacoVariaveis(),
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(texto: string, variaveis: any[]): string;
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(textoOriginal: string): any[];
49
+ private buscarVariaveisInterpolacao;
50
50
  visitarExpressaoLiteral(expressao: Literal): any;
51
51
  avaliar(expressao: Construto): Promise<any>;
52
- visitarExpressaoAgrupamento(expressao: any): Promise<any>;
53
- eVerdadeiro(objeto: any): boolean;
54
- verificarOperandoNumero(operador: SimboloInterface, operando: any): void;
55
- visitarExpressaoUnaria(expressao: any): Promise<any>;
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
- visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<any>;
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: any): Promise<any>;
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
- visitarExpressaoSe(declaracao: Se): Promise<any>;
91
- visitarExpressaoPara(declaracao: Para): Promise<any>;
92
- visitarExpressaoFazer(declaracao: Fazer): Promise<any>;
93
- visitarExpressaoEscolha(declaracao: Escolha): Promise<any>;
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
- visitarExpressaoTente(declaracao: Tente): Promise<any>;
99
- visitarExpressaoEnquanto(declaracao: Enquanto): Promise<any>;
100
- visitarExpressaoImportar(declaracao: Importar): Promise<any>;
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
- visitarExpressaoEscreva(declaracao: Escreva): Promise<any>;
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
- visitarExpressaoVar(declaracao: Var): Promise<any>;
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(expressao: any): DeleguaFuncao;
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
- visitarExpressaoFuncao(declaracao: FuncaoDeclaracao): void;
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
- visitarExpressaoClasse(declaracao: Classe): Promise<any>;
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.