@designliquido/delegua 0.43.5 → 0.44.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/bin/package.json +1 -1
  2. package/interfaces/interpretador-com-depuracao-interface.d.ts +6 -1
  3. package/interfaces/interpretador-com-depuracao-interface.d.ts.map +1 -1
  4. package/interfaces/interpretador-interface.d.ts +1 -1
  5. package/interfaces/interpretador-interface.d.ts.map +1 -1
  6. package/interpretador/depuracao/comum.d.ts +88 -0
  7. package/interpretador/depuracao/comum.d.ts.map +1 -0
  8. package/interpretador/depuracao/comum.js +509 -0
  9. package/interpretador/depuracao/comum.js.map +1 -0
  10. package/interpretador/depuracao/index.d.ts +3 -0
  11. package/interpretador/depuracao/index.d.ts.map +1 -0
  12. package/interpretador/depuracao/index.js +19 -0
  13. package/interpretador/depuracao/index.js.map +1 -0
  14. package/interpretador/depuracao/interpretador-base-com-depuracao.d.ts +124 -0
  15. package/interpretador/depuracao/interpretador-base-com-depuracao.d.ts.map +1 -0
  16. package/interpretador/depuracao/interpretador-base-com-depuracao.js +206 -0
  17. package/interpretador/depuracao/interpretador-base-com-depuracao.js.map +1 -0
  18. package/interpretador/{interpretador-com-depuracao.d.ts → depuracao/interpretador-com-depuracao.d.ts} +9 -54
  19. package/interpretador/depuracao/interpretador-com-depuracao.d.ts.map +1 -0
  20. package/interpretador/depuracao/interpretador-com-depuracao.js +226 -0
  21. package/interpretador/depuracao/interpretador-com-depuracao.js.map +1 -0
  22. package/interpretador/index.d.ts +0 -1
  23. package/interpretador/index.d.ts.map +1 -1
  24. package/interpretador/index.js +0 -1
  25. package/interpretador/index.js.map +1 -1
  26. package/package.json +1 -1
  27. package/umd/delegua.js +301 -18095
  28. package/interpretador/interpretador-com-depuracao.d.ts.map +0 -1
  29. package/interpretador/interpretador-com-depuracao.js +0 -579
  30. package/interpretador/interpretador-com-depuracao.js.map +0 -1
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.InterpretadorComDepuracao = void 0;
37
+ const interpretador_1 = require("../interpretador");
38
+ const comum = __importStar(require("./comum"));
39
+ /**
40
+ * Implementação do Interpretador com suporte a depuração.
41
+ * Herda o Interpretador padrão de Delégua e implementa métodos a mais, que são
42
+ * usados pelo servidor de depuração.
43
+ * Alguns métodos do Interpretador original, como `executarBloco` e `interpretar`,
44
+ * são reimplementados aqui.
45
+ *
46
+ * A separação entre `Interpretador` e `InterpretadorComDepuracao` se faz
47
+ * necessária por uma série de motivos.
48
+ * O primeiro deles é o desempenho. A depuração torna o desempenho do
49
+ * Interpretador com depuração inferior ao Interpretador original pelas
50
+ * várias verificações de controle que precisam ser feitas para a
51
+ * funcionalidade do suporte a depuração, como verificar pontos de parada,
52
+ * estados da pilha de execução e variáveis.
53
+ * O segundo deles é manter o Interpretador original tão simples quanto possível.
54
+ * Uma implementação mais simples normalmente é mais robusta.
55
+ * O terceiro deles é o uso de memória. O Interpretador original não possui
56
+ * uma série de variáveis implementadas aqui, o que o torna mais econômico em
57
+ * recursos de máquina.
58
+ */
59
+ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
60
+ constructor(diretorioBase, funcaoDeRetorno, funcaoDeRetornoMesmaLinha) {
61
+ super(diretorioBase, false, funcaoDeRetorno, funcaoDeRetornoMesmaLinha);
62
+ this.pontosParada = [];
63
+ this.pontoDeParadaAtivo = false;
64
+ this.avisoPontoParadaAtivado = () => console.log('Aviso: Ponto de parada ativado.');
65
+ this.escopoAtual = 0;
66
+ this.executandoChamada = false;
67
+ this.passos = 0;
68
+ }
69
+ /**
70
+ * Quando um construto ou declaração possui id, significa que o interpretador
71
+ * deve resolver a avaliação e guardar seu valor até o final do escopo.
72
+ * Isso serve para quando a linguagem está em modo de depuração, e o contexto
73
+ * da execução deixa de existir com um ponto de parada, por exemplo.
74
+ * @param expressao A expressão a ser avaliada.
75
+ * @returns O resultado da avaliação.
76
+ */
77
+ async avaliar(expressao) {
78
+ return await comum.avaliar(this, expressao);
79
+ }
80
+ async visitarExpressaoDeChamada(expressao) {
81
+ return await comum.visitarExpressaoDeChamada(this, super.visitarExpressaoDeChamada.bind(this), expressao);
82
+ }
83
+ async visitarDeclaracaoEnquanto(declaracao) {
84
+ return await comum.visitarDeclaracaoEnquanto(this, declaracao);
85
+ }
86
+ async avaliarArgumentosEscreva(argumentos) {
87
+ let formatoTexto = '';
88
+ for (const argumento of argumentos) {
89
+ const resultadoAvaliacao = await this.avaliar(argumento);
90
+ let valor = (resultadoAvaliacao === null || resultadoAvaliacao === void 0 ? void 0 : resultadoAvaliacao.hasOwnProperty('valor'))
91
+ ? resultadoAvaliacao.valor
92
+ : resultadoAvaliacao;
93
+ formatoTexto += `${this.paraTexto(valor)} `;
94
+ }
95
+ return formatoTexto.trimEnd();
96
+ }
97
+ /**
98
+ * Execução de uma escrita na saída configurada, que pode ser `console` (padrão) ou
99
+ * alguma função para escrever numa página Web.
100
+ * Se ponto de parada foi ativado durante a avaliação de argumentos, não escreve.
101
+ * @param declaracao A declaração.
102
+ * @returns Sempre nulo, por convenção de visita.
103
+ */
104
+ async visitarDeclaracaoEscreva(declaracao) {
105
+ return await comum.visitarDeclaracaoEscreva(this, declaracao);
106
+ }
107
+ async visitarDeclaracaoPara(declaracao) {
108
+ return await comum.visitarDeclaracaoPara(this, declaracao);
109
+ }
110
+ /**
111
+ * Ao executar um retorno, manter o valor retornado no Interpretador para
112
+ * uso por linhas que foram executadas com o comando `próximo` do depurador.
113
+ * @param declaracao Uma declaracao Retorna
114
+ * @returns O resultado da execução da visita.
115
+ */
116
+ async visitarExpressaoRetornar(declaracao) {
117
+ return await comum.visitarExpressaoRetornar(this, super.visitarExpressaoRetornar.bind(this), declaracao);
118
+ }
119
+ /**
120
+ * Se bloco de execução já foi instanciado antes (por exemplo, quando há um ponto de parada e a
121
+ * execução do código é retomada pelo depurador), retoma a execução do bloco do ponto em que havia parado.
122
+ * Se bloco de execução ainda não foi instanciado, empilha declarações na pilha de escopos de execução,
123
+ * cria um novo ambiente e executa as declarações empilhadas.
124
+ * Se depurador comandou uma instrução 'adentrar-escopo', execução do bloco não ocorre, mas
125
+ * ponteiros de escopo e execução são atualizados.
126
+ * @param declaracoes Um vetor de declaracoes a ser executado.
127
+ * @param ambiente O ambiente de execução quando houver, como parâmetros, argumentos, etc.
128
+ */
129
+ async executarBloco(declaracoes, ambiente) {
130
+ return await comum.executarBloco(this, declaracoes);
131
+ }
132
+ /**
133
+ * No interpretador com depuração, este método é dividido em dois outros métodos privados:
134
+ * - `this.executarUmPassoNoEscopo`, que executa apenas uma instrução e nada mais;
135
+ * - `this.executarUltimoEscopoComandoContinuar`, que é a execução trivial de um escopo inteiro,
136
+ * ou com todas as instruções, ou até encontrar um ponto de parada.
137
+ * @param manterAmbiente Se verdadeiro, junta elementos do último escopo com o escopo
138
+ * imediatamente abaixo.
139
+ * @param naoVerificarPrimeiraExecucao Booleano que pede ao Interpretador para não
140
+ * verificar o ponto de parada na primeira execução.
141
+ * Normalmente usado pelo Servidor de Depuração para continuar uma linha.
142
+ * @returns O retorno da execução.
143
+ */
144
+ async executarUltimoEscopo(manterAmbiente = false, naoVerificarPrimeiraExecucao = false) {
145
+ return await comum.executarUltimoEscopo(this, manterAmbiente, naoVerificarPrimeiraExecucao);
146
+ }
147
+ /**
148
+ * Continua a interpretação, conforme comando do depurador.
149
+ * Quando um ponto de parada é ativado, a pilha de execução do TypeScript é perdida.
150
+ * Esse método cria uma nova pilha de execução do lado do JS, começando do último elemento executado do
151
+ * primeiro escopo, subindo até o último elemento executado do último escopo.
152
+ * Se entre escopos houver ponto de parada ativo, a execução é suspensa até o próximo comando
153
+ * do desenvolvedor.
154
+ * @see executarUltimoEscopo
155
+ */
156
+ async instrucaoContinuarInterpretacao(escopo = 1) {
157
+ await comum.instrucaoContinuarInterpretacao(this, escopo);
158
+ }
159
+ /**
160
+ * Empilha um escopo se for possível.
161
+ * Se não for, apenas executa a instrução corrente.
162
+ */
163
+ async adentrarEscopo() {
164
+ throw new Error('Método não implementado.');
165
+ }
166
+ /**
167
+ * Interpreta apenas uma instrução a partir do ponto de parada ativo, conforme comando do depurador.
168
+ * Esse método cria uma nova pilha de execução do lado do JS, começando do último elemento executado do
169
+ * primeiro escopo, subindo até o último elemento executado do último escopo.
170
+ * @param escopo Indica o escopo a ser visitado. Usado para construir uma pilha de chamadas do lado JS.
171
+ */
172
+ async instrucaoPasso(escopo = 1) {
173
+ return await comum.instrucaoPasso(this, escopo);
174
+ }
175
+ /**
176
+ * Interpreta restante do bloco de execução em que o ponto de parada está, conforme comando do depurador.
177
+ * Se houver outros pontos de parada no mesmo escopo à frente da instrução atual, todos são ignorados.
178
+ * @param escopo Indica o escopo a ser visitado. Usado para construir uma pilha de chamadas do lado JS.
179
+ */
180
+ async instrucaoProximoESair() {
181
+ comum.executarUltimoEscopoComandoContinuar(this, false, true);
182
+ }
183
+ /**
184
+ * Prepara a pilha de escopos para uma situação de depuração.
185
+ * Não há execução de código neste caso.
186
+ * @param declaracoes Um vetor de declarações.
187
+ */
188
+ prepararParaDepuracao(declaracoes) {
189
+ this.declaracoes = declaracoes;
190
+ comum.abrirNovoBlocoEscopo(this, declaracoes);
191
+ }
192
+ /**
193
+ * Reimplementando este método aqui porque a execução por depuração não requer
194
+ * mostrar o resultado em momento algum, ou lidar com o retorno.
195
+ * @param declaracao A declaracao a ser executada.
196
+ * @param mostrarResultado Sempre falso.
197
+ * @returns O resultado da execução.
198
+ */
199
+ async executar(declaracao, mostrarResultado = false) {
200
+ return await declaracao.aceitar(this);
201
+ }
202
+ /**
203
+ * Interpretação utilizada pelo depurador para avaliar valores de variáveis.
204
+ * Diferentemente da interpretação tradicional, não possui indicadores
205
+ * de performance porque eles não fazem sentido aqui.
206
+ * @param declaracoes Um vetor de declarações.
207
+ * @returns Um objeto de retorno, com erros encontrados se houverem.
208
+ */
209
+ async interpretar(declaracoes, manterAmbiente = false) {
210
+ this.erros = [];
211
+ this.declaracoes = declaracoes;
212
+ comum.abrirNovoBlocoEscopo(this, declaracoes);
213
+ const resultado = await super.executarUltimoEscopo(manterAmbiente);
214
+ // Corrigir contador de escopos
215
+ this.escopoAtual--;
216
+ const retorno = {
217
+ erros: this.erros,
218
+ // resultado: this.resultadoInterpretador // Removido para simplificar `this.executar()`.
219
+ resultado: [resultado],
220
+ };
221
+ this.resultadoInterpretador = [];
222
+ return retorno;
223
+ }
224
+ }
225
+ exports.InterpretadorComDepuracao = InterpretadorComDepuracao;
226
+ //# sourceMappingURL=interpretador-com-depuracao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpretador-com-depuracao.js","sourceRoot":"","sources":["../../../fontes/interpretador/depuracao/interpretador-com-depuracao.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
1
  export * from './interpretador';
2
2
  export * from './interpretador-base';
3
- export * from './interpretador-com-depuracao';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../fontes/interpretador/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../fontes/interpretador/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
@@ -16,5 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./interpretador"), exports);
18
18
  __exportStar(require("./interpretador-base"), exports);
19
- __exportStar(require("./interpretador-com-depuracao"), exports);
20
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../fontes/interpretador/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,uDAAqC;AACrC,gEAA8C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../fontes/interpretador/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,uDAAqC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@designliquido/delegua",
3
- "version": "0.43.5",
3
+ "version": "0.44.1",
4
4
  "description": "Linguagem de programação simples e moderna usando português estruturado.",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",