@designliquido/delegua 0.9.2 → 0.9.4

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 (244) hide show
  1. package/bin/delegua +1 -1
  2. package/bin/delegua.cmd +1 -1
  3. package/bin/package.json +3 -3
  4. package/coverage/lcov-report/sorter.js +4 -4
  5. package/coverage/lcov-report/sorter.js.map +1 -1
  6. package/execucao.d.ts +1 -0
  7. package/execucao.js +29 -0
  8. package/execucao.js.map +1 -0
  9. package/fontes/avaliador-sintatico/avaliador-sintatico-base.d.ts +1 -1
  10. package/fontes/avaliador-sintatico/avaliador-sintatico-base.js +108 -105
  11. package/fontes/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  12. package/fontes/avaliador-sintatico/avaliador-sintatico.d.ts +1 -1
  13. package/fontes/avaliador-sintatico/avaliador-sintatico.js +244 -256
  14. package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  15. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.d.ts +20 -0
  16. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js +68 -0
  17. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js.map +1 -0
  18. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts +1 -1
  19. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +227 -236
  20. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  21. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.d.ts +1 -1
  22. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js +247 -257
  23. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js.map +1 -1
  24. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.d.ts +3 -0
  25. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js +192 -131
  26. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js.map +1 -1
  27. package/fontes/avaliador-sintatico/erro-avaliador-sintatico.js +6 -24
  28. package/fontes/avaliador-sintatico/erro-avaliador-sintatico.js.map +1 -1
  29. package/fontes/bibliotecas/biblioteca-global.js +206 -367
  30. package/fontes/bibliotecas/biblioteca-global.js.map +1 -1
  31. package/fontes/bibliotecas/importar-biblioteca.js +28 -29
  32. package/fontes/bibliotecas/importar-biblioteca.js.map +1 -1
  33. package/fontes/bibliotecas/primitivas-texto.js +9 -22
  34. package/fontes/bibliotecas/primitivas-texto.js.map +1 -1
  35. package/fontes/bibliotecas/primitivas-vetor.js +12 -14
  36. package/fontes/bibliotecas/primitivas-vetor.js.map +1 -1
  37. package/fontes/construtos/acesso-indice-variavel.js +6 -50
  38. package/fontes/construtos/acesso-indice-variavel.js.map +1 -1
  39. package/fontes/construtos/acesso-metodo.js +6 -50
  40. package/fontes/construtos/acesso-metodo.js.map +1 -1
  41. package/fontes/construtos/agrupamento.js +6 -50
  42. package/fontes/construtos/agrupamento.js.map +1 -1
  43. package/fontes/construtos/atribuicao-sobrescrita.js +6 -50
  44. package/fontes/construtos/atribuicao-sobrescrita.js.map +1 -1
  45. package/fontes/construtos/atribuir.js +6 -50
  46. package/fontes/construtos/atribuir.js.map +1 -1
  47. package/fontes/construtos/binario.js +6 -50
  48. package/fontes/construtos/binario.js.map +1 -1
  49. package/fontes/construtos/chamada.js +6 -50
  50. package/fontes/construtos/chamada.js.map +1 -1
  51. package/fontes/construtos/definir-valor.js +6 -50
  52. package/fontes/construtos/definir-valor.js.map +1 -1
  53. package/fontes/construtos/dicionario.js +6 -50
  54. package/fontes/construtos/dicionario.js.map +1 -1
  55. package/fontes/construtos/funcao.d.ts +2 -2
  56. package/fontes/construtos/funcao.js +6 -47
  57. package/fontes/construtos/funcao.js.map +1 -1
  58. package/fontes/construtos/isto.js +6 -47
  59. package/fontes/construtos/isto.js.map +1 -1
  60. package/fontes/construtos/literal.js +6 -47
  61. package/fontes/construtos/literal.js.map +1 -1
  62. package/fontes/construtos/logico.js +6 -50
  63. package/fontes/construtos/logico.js.map +1 -1
  64. package/fontes/construtos/super.js +6 -47
  65. package/fontes/construtos/super.js.map +1 -1
  66. package/fontes/construtos/unario.js +6 -50
  67. package/fontes/construtos/unario.js.map +1 -1
  68. package/fontes/construtos/variavel.js +6 -47
  69. package/fontes/construtos/variavel.js.map +1 -1
  70. package/fontes/construtos/vetor.js +6 -50
  71. package/fontes/construtos/vetor.js.map +1 -1
  72. package/fontes/declaracoes/bloco.js +9 -70
  73. package/fontes/declaracoes/bloco.js.map +1 -1
  74. package/fontes/declaracoes/classe.js +11 -72
  75. package/fontes/declaracoes/classe.js.map +1 -1
  76. package/fontes/declaracoes/continua.js +8 -65
  77. package/fontes/declaracoes/continua.js.map +1 -1
  78. package/fontes/declaracoes/declaracao.js +6 -47
  79. package/fontes/declaracoes/declaracao.js.map +1 -1
  80. package/fontes/declaracoes/enquanto.js +10 -71
  81. package/fontes/declaracoes/enquanto.js.map +1 -1
  82. package/fontes/declaracoes/escolha.js +11 -72
  83. package/fontes/declaracoes/escolha.js.map +1 -1
  84. package/fontes/declaracoes/escreva.js +9 -70
  85. package/fontes/declaracoes/escreva.js.map +1 -1
  86. package/fontes/declaracoes/expressao.js +9 -70
  87. package/fontes/declaracoes/expressao.js.map +1 -1
  88. package/fontes/declaracoes/fazer.js +10 -71
  89. package/fontes/declaracoes/fazer.js.map +1 -1
  90. package/fontes/declaracoes/funcao.js +10 -68
  91. package/fontes/declaracoes/funcao.js.map +1 -1
  92. package/fontes/declaracoes/importar.js +10 -71
  93. package/fontes/declaracoes/importar.js.map +1 -1
  94. package/fontes/declaracoes/leia.js +9 -70
  95. package/fontes/declaracoes/leia.js.map +1 -1
  96. package/fontes/declaracoes/para.js +12 -73
  97. package/fontes/declaracoes/para.js.map +1 -1
  98. package/fontes/declaracoes/retorna.js +10 -71
  99. package/fontes/declaracoes/retorna.js.map +1 -1
  100. package/fontes/declaracoes/se.js +12 -73
  101. package/fontes/declaracoes/se.js.map +1 -1
  102. package/fontes/declaracoes/sustar.js +8 -65
  103. package/fontes/declaracoes/sustar.js.map +1 -1
  104. package/fontes/declaracoes/tente.js +12 -73
  105. package/fontes/declaracoes/tente.js.map +1 -1
  106. package/fontes/declaracoes/var.js +10 -71
  107. package/fontes/declaracoes/var.js.map +1 -1
  108. package/fontes/delegua.js +125 -206
  109. package/fontes/delegua.js.map +1 -1
  110. package/fontes/depuracao/cyrb53.js +3 -4
  111. package/fontes/depuracao/cyrb53.js.map +1 -1
  112. package/fontes/depuracao/servidor-depuracao.js +125 -209
  113. package/fontes/depuracao/servidor-depuracao.js.map +1 -1
  114. package/fontes/espaco-variaveis.js +3 -4
  115. package/fontes/espaco-variaveis.js.map +1 -1
  116. package/fontes/estruturas/chamavel.js +6 -9
  117. package/fontes/estruturas/chamavel.js.map +1 -1
  118. package/fontes/estruturas/classe-padrao.js +17 -35
  119. package/fontes/estruturas/classe-padrao.js.map +1 -1
  120. package/fontes/estruturas/delegua-classe.d.ts +2 -2
  121. package/fontes/estruturas/delegua-classe.js +21 -39
  122. package/fontes/estruturas/delegua-classe.js.map +1 -1
  123. package/fontes/estruturas/delegua-funcao.js +48 -114
  124. package/fontes/estruturas/delegua-funcao.js.map +1 -1
  125. package/fontes/estruturas/funcao-padrao.js +13 -75
  126. package/fontes/estruturas/funcao-padrao.js.map +1 -1
  127. package/fontes/estruturas/metodo-primitiva.js +11 -39
  128. package/fontes/estruturas/metodo-primitiva.js.map +1 -1
  129. package/fontes/estruturas/modulo.js +6 -7
  130. package/fontes/estruturas/modulo.js.map +1 -1
  131. package/fontes/estruturas/objeto-delegua-classe.d.ts +3 -3
  132. package/fontes/estruturas/objeto-delegua-classe.js +12 -13
  133. package/fontes/estruturas/objeto-delegua-classe.js.map +1 -1
  134. package/fontes/estruturas/objeto-padrao.js +9 -11
  135. package/fontes/estruturas/objeto-padrao.js.map +1 -1
  136. package/fontes/excecoes/erro-em-tempo-de-execucao.js +8 -26
  137. package/fontes/excecoes/erro-em-tempo-de-execucao.js.map +1 -1
  138. package/fontes/importador/importador.js +21 -22
  139. package/fontes/importador/importador.js.map +1 -1
  140. package/fontes/interfaces/avaliador-sintatico-interface.d.ts +1 -1
  141. package/fontes/interfaces/parametro-interface.d.ts +1 -1
  142. package/fontes/interpretador/dialetos/egua-classico.js +592 -1019
  143. package/fontes/interpretador/dialetos/egua-classico.js.map +1 -1
  144. package/fontes/interpretador/inferenciador.js +1 -1
  145. package/fontes/interpretador/inferenciador.js.map +1 -1
  146. package/fontes/interpretador/interpretador-com-depuracao.js +186 -336
  147. package/fontes/interpretador/interpretador-com-depuracao.js.map +1 -1
  148. package/fontes/interpretador/interpretador.js +706 -1175
  149. package/fontes/interpretador/interpretador.js.map +1 -1
  150. package/fontes/interpretador/pilha-escopos-execucao.js +52 -57
  151. package/fontes/interpretador/pilha-escopos-execucao.js.map +1 -1
  152. package/fontes/lexador/dialetos/lexador-birl.d.ts +6 -19
  153. package/fontes/lexador/dialetos/lexador-birl.js +157 -49
  154. package/fontes/lexador/dialetos/lexador-birl.js.map +1 -1
  155. package/fontes/lexador/dialetos/lexador-egua-classico.js +43 -46
  156. package/fontes/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  157. package/fontes/lexador/dialetos/lexador-eguap.js +59 -63
  158. package/fontes/lexador/dialetos/lexador-eguap.js.map +1 -1
  159. package/fontes/lexador/dialetos/lexador-visualg.js +45 -54
  160. package/fontes/lexador/dialetos/lexador-visualg.js.map +1 -1
  161. package/fontes/lexador/dialetos/palavras-reservadas/birl.d.ts +14 -1
  162. package/fontes/lexador/dialetos/palavras-reservadas/birl.js +18 -1
  163. package/fontes/lexador/dialetos/palavras-reservadas/birl.js.map +1 -1
  164. package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.js +1 -1
  165. package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.js.map +1 -1
  166. package/fontes/lexador/dialetos/palavras-reservadas/visualg.d.ts +24 -0
  167. package/fontes/lexador/dialetos/palavras-reservadas/visualg.js +25 -1
  168. package/fontes/lexador/dialetos/palavras-reservadas/visualg.js.map +1 -1
  169. package/fontes/lexador/lexador-base-linha-unica.d.ts +1 -1
  170. package/fontes/lexador/lexador-base-linha-unica.js +28 -29
  171. package/fontes/lexador/lexador-base-linha-unica.js.map +1 -1
  172. package/fontes/lexador/lexador.js +53 -57
  173. package/fontes/lexador/lexador.js.map +1 -1
  174. package/fontes/lexador/palavras-reservadas.js +1 -1
  175. package/fontes/lexador/palavras-reservadas.js.map +1 -1
  176. package/fontes/lexador/simbolo.js +5 -6
  177. package/fontes/lexador/simbolo.js.map +1 -1
  178. package/fontes/quebras/index.js +11 -42
  179. package/fontes/quebras/index.js.map +1 -1
  180. package/fontes/resolvedor/dialetos/egua-classico.js +143 -144
  181. package/fontes/resolvedor/dialetos/egua-classico.js.map +1 -1
  182. package/fontes/resolvedor/erro-resolvedor.js +6 -24
  183. package/fontes/resolvedor/erro-resolvedor.js.map +1 -1
  184. package/fontes/resolvedor/pilha-escopos.js +11 -12
  185. package/fontes/resolvedor/pilha-escopos.js.map +1 -1
  186. package/fontes/tipos-de-simbolos/birl.d.ts +7 -0
  187. package/fontes/tipos-de-simbolos/birl.js +20 -12
  188. package/fontes/tipos-de-simbolos/birl.js.map +1 -1
  189. package/fontes/tipos-de-simbolos/comum.d.ts +2 -0
  190. package/fontes/tipos-de-simbolos/comum.js +2 -0
  191. package/fontes/tipos-de-simbolos/comum.js.map +1 -1
  192. package/fontes/tipos-de-simbolos/visualg.d.ts +9 -0
  193. package/fontes/tipos-de-simbolos/visualg.js +9 -0
  194. package/fontes/tipos-de-simbolos/visualg.js.map +1 -1
  195. package/index.d.ts +5 -1
  196. package/index.js +18 -25
  197. package/index.js.map +1 -1
  198. package/jest.config.js +9 -47
  199. package/jest.config.js.map +1 -1
  200. package/package.json +3 -3
  201. package/testes/__mocks__/estatistica.js +1 -1
  202. package/testes/__mocks__/estatistica.js.map +1 -1
  203. package/testes/__mocks__/fisica.js +1 -1
  204. package/testes/__mocks__/fisica.js.map +1 -1
  205. package/testes/__mocks__/matematica.js +1 -1
  206. package/testes/__mocks__/matematica.js.map +1 -1
  207. package/testes/avaliador-sintatico.test.js +27 -27
  208. package/testes/avaliador-sintatico.test.js.map +1 -1
  209. package/testes/biblioteca-global.test.js +197 -440
  210. package/testes/biblioteca-global.test.js.map +1 -1
  211. package/testes/birl/avaliador-sintatico.test.d.ts +1 -0
  212. package/testes/birl/avaliador-sintatico.test.js +18 -0
  213. package/testes/birl/avaliador-sintatico.test.js.map +1 -0
  214. package/testes/birl/lexador.test.d.ts +1 -0
  215. package/testes/birl/lexador.test.js +31 -0
  216. package/testes/birl/lexador.test.js.map +1 -0
  217. package/testes/delegua.test.js +7 -7
  218. package/testes/delegua.test.js.map +1 -1
  219. package/testes/egua-classico/avaliador-sintatico.test.js +14 -14
  220. package/testes/egua-classico/avaliador-sintatico.test.js.map +1 -1
  221. package/testes/egua-classico/delegua.test.js +5 -5
  222. package/testes/egua-classico/delegua.test.js.map +1 -1
  223. package/testes/egua-classico/interpretador.test.js +180 -396
  224. package/testes/egua-classico/interpretador.test.js.map +1 -1
  225. package/testes/egua-classico/lexador.test.js +23 -23
  226. package/testes/egua-classico/lexador.test.js.map +1 -1
  227. package/testes/egua-classico/resolvedor.test.js +12 -12
  228. package/testes/egua-classico/resolvedor.test.js.map +1 -1
  229. package/testes/eguap/avaliador-sintatico.test.js +11 -11
  230. package/testes/eguap/avaliador-sintatico.test.js.map +1 -1
  231. package/testes/eguap/interpretador.test.js +189 -405
  232. package/testes/eguap/interpretador.test.js.map +1 -1
  233. package/testes/eguap/lexador.test.js +18 -18
  234. package/testes/eguap/lexador.test.js.map +1 -1
  235. package/testes/interpretador.test.js +431 -908
  236. package/testes/interpretador.test.js.map +1 -1
  237. package/testes/lexador.test.js +42 -42
  238. package/testes/lexador.test.js.map +1 -1
  239. package/testes/visualg/avaliador-sintatico.test.js +23 -23
  240. package/testes/visualg/avaliador-sintatico.test.js.map +1 -1
  241. package/testes/visualg/interpretador.test.js +16 -61
  242. package/testes/visualg/interpretador.test.js.map +1 -1
  243. package/testes/visualg/lexador.test.js +15 -15
  244. package/testes/visualg/lexador.test.js.map +1 -1
@@ -1,60 +1,9 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
- return new (P || (P = Promise))(function (resolve, reject) {
20
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
- step((generator = generator.apply(thisArg, _arguments || [])).next());
24
- });
25
- };
26
- var __generator = (this && this.__generator) || function (thisArg, body) {
27
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
- function verb(n) { return function (v) { return step([n, v]); }; }
30
- function step(op) {
31
- if (f) throw new TypeError("Generator is already executing.");
32
- while (_) try {
33
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
- if (y = 0, t) op = [op[0] & 2, t.value];
35
- switch (op[0]) {
36
- case 0: case 1: t = op; break;
37
- case 4: _.label++; return { value: op[1], done: false };
38
- case 5: _.label++; y = op[1]; op = [0]; continue;
39
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
- default:
41
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
- if (t[2]) _.ops.pop();
46
- _.trys.pop(); continue;
47
- }
48
- op = body.call(thisArg, _);
49
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
- }
52
- };
53
2
  Object.defineProperty(exports, "__esModule", { value: true });
54
3
  exports.InterpretadorComDepuracao = void 0;
55
- var espaco_variaveis_1 = require("../espaco-variaveis");
56
- var quebras_1 = require("../quebras");
57
- var interpretador_1 = require("./interpretador");
4
+ const espaco_variaveis_1 = require("../espaco-variaveis");
5
+ const quebras_1 = require("../quebras");
6
+ const interpretador_1 = require("./interpretador");
58
7
  /**
59
8
  * Implementação do Interpretador com suporte a depuração.
60
9
  * Herda o Interpretador padrão de Delégua e implementa métodos a mais, que são
@@ -75,16 +24,14 @@ var interpretador_1 = require("./interpretador");
75
24
  * uma série de variáveis implementadas aqui, o que o torna mais econômico em
76
25
  * recursos de máquina.
77
26
  */
78
- var InterpretadorComDepuracao = /** @class */ (function (_super) {
79
- __extends(InterpretadorComDepuracao, _super);
80
- function InterpretadorComDepuracao(importador, diretorioBase, funcaoDeRetorno) {
81
- var _this = _super.call(this, importador, diretorioBase, false, funcaoDeRetorno) || this;
82
- _this.pontosParada = [];
83
- _this.pontoDeParadaAtivo = false;
84
- _this.escopoAtual = 0;
85
- _this.comandoAdentrarEscopo = false;
86
- _this.comandoProximo = false;
87
- return _this;
27
+ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
28
+ constructor(importador, diretorioBase, funcaoDeRetorno) {
29
+ super(importador, diretorioBase, false, funcaoDeRetorno);
30
+ this.pontosParada = [];
31
+ this.pontoDeParadaAtivo = false;
32
+ this.escopoAtual = 0;
33
+ this.comandoAdentrarEscopo = false;
34
+ this.comandoProximo = false;
88
35
  }
89
36
  /**
90
37
  * Se bloco de execução já foi instanciado antes (por exemplo, quando há um ponto de parada e a
@@ -96,78 +43,59 @@ var InterpretadorComDepuracao = /** @class */ (function (_super) {
96
43
  * @param declaracoes Um vetor de declaracoes a ser executado.
97
44
  * @param ambiente O ambiente de execução quando houver, como parâmetros, argumentos, etc.
98
45
  */
99
- InterpretadorComDepuracao.prototype.executarBloco = function (declaracoes, ambiente) {
100
- return __awaiter(this, void 0, void 0, function () {
101
- var proximoEscopo, retornoExecucao, escopoExecucao;
102
- return __generator(this, function (_a) {
103
- switch (_a.label) {
104
- case 0:
105
- if (!(this.escopoAtual < this.pilhaEscoposExecucao.elementos() - 1)) return [3 /*break*/, 6];
106
- this.escopoAtual++;
107
- proximoEscopo = this.pilhaEscoposExecucao.naPosicao(this.escopoAtual);
108
- retornoExecucao = void 0;
109
- return [4 /*yield*/, this.executar(proximoEscopo.declaracoes[proximoEscopo.declaracaoAtual])];
110
- case 1:
111
- // Sempre executa a próxima instrução, mesmo que haja ponto de parada.
112
- retornoExecucao = _a.sent();
113
- proximoEscopo.declaracaoAtual++;
114
- _a.label = 2;
115
- case 2:
116
- if (!(!(retornoExecucao instanceof quebras_1.Quebra) &&
117
- proximoEscopo.declaracaoAtual <
118
- proximoEscopo.declaracoes.length)) return [3 /*break*/, 5];
119
- this.pontoDeParadaAtivo = this.verificarPontoParada(proximoEscopo.declaracoes[proximoEscopo.declaracaoAtual]);
120
- if (this.pontoDeParadaAtivo) {
121
- return [3 /*break*/, 5];
122
- }
123
- return [4 /*yield*/, this.executar(proximoEscopo.declaracoes[proximoEscopo.declaracaoAtual])];
124
- case 3:
125
- retornoExecucao = _a.sent();
126
- _a.label = 4;
127
- case 4:
128
- proximoEscopo.declaracaoAtual++;
129
- return [3 /*break*/, 2];
130
- case 5:
131
- this.pilhaEscoposExecucao.removerUltimo();
132
- this.escopoAtual--;
133
- return [2 /*return*/, retornoExecucao];
134
- case 6:
135
- escopoExecucao = {
136
- declaracoes: declaracoes,
137
- declaracaoAtual: 0,
138
- ambiente: ambiente || new espaco_variaveis_1.EspacoVariaveis(),
139
- };
140
- this.pilhaEscoposExecucao.empilhar(escopoExecucao);
141
- this.escopoAtual++;
142
- if (this.comandoProximo) {
143
- // Quando o comando for 'próximo', não executa.
144
- // Aguarda o usuário com a próxima instrução vinda do depurador.
145
- return [2 /*return*/, null];
146
- }
147
- if (!!this.comandoAdentrarEscopo) return [3 /*break*/, 8];
148
- return [4 /*yield*/, this.executarUltimoEscopo()];
149
- case 7: return [2 /*return*/, _a.sent()];
150
- case 8: return [2 /*return*/];
46
+ async executarBloco(declaracoes, ambiente) {
47
+ if (this.escopoAtual < this.pilhaEscoposExecucao.elementos() - 1) {
48
+ this.escopoAtual++;
49
+ const proximoEscopo = this.pilhaEscoposExecucao.naPosicao(this.escopoAtual);
50
+ let retornoExecucao;
51
+ // Sempre executa a próxima instrução, mesmo que haja ponto de parada.
52
+ retornoExecucao = await this.executar(proximoEscopo.declaracoes[proximoEscopo.declaracaoAtual]);
53
+ proximoEscopo.declaracaoAtual++;
54
+ for (; !(retornoExecucao instanceof quebras_1.Quebra) &&
55
+ proximoEscopo.declaracaoAtual <
56
+ proximoEscopo.declaracoes.length; proximoEscopo.declaracaoAtual++) {
57
+ this.pontoDeParadaAtivo = this.verificarPontoParada(proximoEscopo.declaracoes[proximoEscopo.declaracaoAtual]);
58
+ if (this.pontoDeParadaAtivo) {
59
+ break;
151
60
  }
152
- });
153
- });
154
- };
61
+ retornoExecucao = await this.executar(proximoEscopo.declaracoes[proximoEscopo.declaracaoAtual]);
62
+ }
63
+ this.pilhaEscoposExecucao.removerUltimo();
64
+ this.escopoAtual--;
65
+ return retornoExecucao;
66
+ }
67
+ 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;
79
+ }
80
+ if (!this.comandoAdentrarEscopo) {
81
+ return await this.executarUltimoEscopo();
82
+ }
83
+ }
84
+ }
155
85
  /**
156
86
  * Para fins de depuração, verifica se há ponto de parada no mesmo pragma da declaração.
157
87
  * @param declaracao A declaração a ser executada.
158
88
  * @returns True quando execução deve parar. False caso contrário.
159
89
  */
160
- InterpretadorComDepuracao.prototype.verificarPontoParada = function (declaracao) {
161
- var buscaPontoParada = this.pontosParada.filter(function (p) {
162
- return p.hashArquivo === declaracao.hashArquivo &&
163
- p.linha === declaracao.linha;
164
- });
90
+ verificarPontoParada(declaracao) {
91
+ const buscaPontoParada = this.pontosParada.filter((p) => p.hashArquivo === declaracao.hashArquivo &&
92
+ p.linha === declaracao.linha);
165
93
  if (buscaPontoParada.length > 0) {
166
94
  console.log('Ponto de parada encontrado.');
167
95
  return true;
168
96
  }
169
97
  return false;
170
- };
98
+ }
171
99
  /**
172
100
  * Continua a interpretação parcial do último ponto em que parou.
173
101
  * Pode ser tanto o começo da execução inteira, ou pós comando do depurador
@@ -179,58 +107,39 @@ var InterpretadorComDepuracao = /** @class */ (function (_super) {
179
107
  * Normalmente usado pelo Servidor de Depuração para continuar uma linha.
180
108
  * @returns Um objeto de retorno, com erros encontrados se houverem.
181
109
  */
182
- InterpretadorComDepuracao.prototype.executarUltimoEscopo = function (manterAmbiente, naoVerificarPrimeiraExecucao) {
183
- if (manterAmbiente === void 0) { manterAmbiente = false; }
184
- if (naoVerificarPrimeiraExecucao === void 0) { naoVerificarPrimeiraExecucao = false; }
185
- return __awaiter(this, void 0, void 0, function () {
186
- var ultimoEscopo, retornoExecucao, escopoAnterior;
187
- return __generator(this, function (_a) {
188
- switch (_a.label) {
189
- case 0:
190
- ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
191
- _a.label = 1;
192
- case 1:
193
- _a.trys.push([1, , 6, 7]);
194
- retornoExecucao = void 0;
195
- _a.label = 2;
196
- case 2:
197
- if (!(!(retornoExecucao instanceof quebras_1.Quebra) &&
198
- ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length)) return [3 /*break*/, 5];
199
- if (naoVerificarPrimeiraExecucao) {
200
- naoVerificarPrimeiraExecucao = false;
201
- }
202
- else {
203
- this.pontoDeParadaAtivo = this.verificarPontoParada(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
204
- if (this.pontoDeParadaAtivo) {
205
- return [3 /*break*/, 5];
206
- }
207
- }
208
- return [4 /*yield*/, this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual])];
209
- case 3:
210
- retornoExecucao = _a.sent();
211
- _a.label = 4;
212
- case 4:
213
- ultimoEscopo.declaracaoAtual++;
214
- return [3 /*break*/, 2];
215
- case 5: return [2 /*return*/, retornoExecucao];
216
- case 6:
217
- if (!this.pontoDeParadaAtivo) {
218
- this.pilhaEscoposExecucao.removerUltimo();
219
- if (manterAmbiente) {
220
- escopoAnterior = this.pilhaEscoposExecucao.topoDaPilha();
221
- escopoAnterior.ambiente.valores = Object.assign(escopoAnterior.ambiente.valores, ultimoEscopo.ambiente.valores);
222
- }
223
- this.escopoAtual--;
224
- }
225
- if (this.pilhaEscoposExecucao.elementos() === 1) {
226
- this.finalizacaoDaExecucao();
227
- }
228
- return [7 /*endfinally*/];
229
- case 7: return [2 /*return*/];
110
+ async executarUltimoEscopo(manterAmbiente = false, naoVerificarPrimeiraExecucao = false) {
111
+ const ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
112
+ try {
113
+ let retornoExecucao;
114
+ for (; !(retornoExecucao instanceof quebras_1.Quebra) &&
115
+ ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
116
+ if (naoVerificarPrimeiraExecucao) {
117
+ naoVerificarPrimeiraExecucao = false;
118
+ }
119
+ else {
120
+ this.pontoDeParadaAtivo = this.verificarPontoParada(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
121
+ if (this.pontoDeParadaAtivo) {
122
+ break;
123
+ }
124
+ }
125
+ retornoExecucao = await this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
126
+ }
127
+ return retornoExecucao;
128
+ }
129
+ finally {
130
+ if (!this.pontoDeParadaAtivo) {
131
+ this.pilhaEscoposExecucao.removerUltimo();
132
+ if (manterAmbiente) {
133
+ const escopoAnterior = this.pilhaEscoposExecucao.topoDaPilha();
134
+ escopoAnterior.ambiente.valores = Object.assign(escopoAnterior.ambiente.valores, ultimoEscopo.ambiente.valores);
230
135
  }
231
- });
232
- });
233
- };
136
+ this.escopoAtual--;
137
+ }
138
+ if (this.pilhaEscoposExecucao.elementos() === 1) {
139
+ this.finalizacaoDaExecucao();
140
+ }
141
+ }
142
+ }
234
143
  /**
235
144
  * Continua a interpretação, conforme comando do depurador.
236
145
  * Quando um ponto de parada é ativado, a pilha de execução do TypeScript é perdida.
@@ -239,158 +148,111 @@ var InterpretadorComDepuracao = /** @class */ (function (_super) {
239
148
  * Diferentemente de `executarUltimoEscopo`, este método descarta apenas um escopo (o que foi chamado).
240
149
  * @see executarBloco
241
150
  */
242
- InterpretadorComDepuracao.prototype.continuarInterpretacao = function () {
243
- return __awaiter(this, void 0, void 0, function () {
244
- var primeiroEscopo, retornoExecucao;
245
- return __generator(this, function (_a) {
246
- switch (_a.label) {
247
- case 0:
248
- this.escopoAtual = 1;
249
- primeiroEscopo = this.pilhaEscoposExecucao.naPosicao(1);
250
- return [4 /*yield*/, this.executar(primeiroEscopo.declaracoes[primeiroEscopo.declaracaoAtual])];
251
- case 1:
252
- // Primeira execução sempre ocorre, independente de pontos de parada.
253
- retornoExecucao = _a.sent();
254
- primeiroEscopo.declaracaoAtual++;
255
- _a.label = 2;
256
- case 2:
257
- if (!(!(retornoExecucao instanceof quebras_1.Quebra) &&
258
- primeiroEscopo.declaracaoAtual < primeiroEscopo.declaracoes.length)) return [3 /*break*/, 5];
259
- this.pontoDeParadaAtivo = this.verificarPontoParada(primeiroEscopo.declaracoes[primeiroEscopo.declaracaoAtual]);
260
- if (this.pontoDeParadaAtivo) {
261
- return [3 /*break*/, 5];
262
- }
263
- return [4 /*yield*/, this.executar(primeiroEscopo.declaracoes[primeiroEscopo.declaracaoAtual])];
264
- case 3:
265
- retornoExecucao = _a.sent();
266
- _a.label = 4;
267
- case 4:
268
- primeiroEscopo.declaracaoAtual++;
269
- return [3 /*break*/, 2];
270
- case 5:
271
- if (primeiroEscopo.declaracaoAtual >= primeiroEscopo.declaracoes.length) {
272
- this.pilhaEscoposExecucao.removerUltimo();
273
- }
274
- if (this.pilhaEscoposExecucao.elementos() === 1) {
275
- this.finalizacaoDaExecucao();
276
- }
277
- return [2 /*return*/];
278
- }
279
- });
280
- });
281
- };
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
+ }
172
+ }
282
173
  /**
283
174
  * Interpreta apenas uma instrução a partir do ponto de parada ativo, conforme comando do depurador.
284
175
  * Esse método cria uma nova pilha de execução do lado do JS, começando do último elemento executado do
285
176
  * primeiro escopo, subindo até o último elemento executado do último escopo.
286
177
  * @param escopo Indica o escopo a ser visitado. Usado para construir uma pilha de chamadas do lado JS.
287
178
  */
288
- InterpretadorComDepuracao.prototype.interpretacaoApenasUmaInstrucao = function (escopo) {
289
- if (escopo === void 0) { escopo = 1; }
290
- return __awaiter(this, void 0, void 0, function () {
291
- var escopoVisitado, declaracaoAtual;
292
- return __generator(this, function (_a) {
293
- switch (_a.label) {
294
- case 0:
295
- escopoVisitado = this.pilhaEscoposExecucao.naPosicao(escopo);
296
- if (!(escopo < this.escopoAtual)) return [3 /*break*/, 1];
297
- this.interpretacaoApenasUmaInstrucao(escopo + 1);
298
- return [3 /*break*/, 3];
299
- case 1:
300
- declaracaoAtual = escopoVisitado.declaracoes[escopoVisitado.declaracaoAtual];
301
- return [4 /*yield*/, this.executar(declaracaoAtual)];
302
- case 2:
303
- _a.sent();
304
- _a.label = 3;
305
- case 3:
306
- if (this.comandoAdentrarEscopo) {
307
- // Depurador comandou instrução 'adentrar-escopo', ou bloco de escopo
308
- // não é de uma função.
309
- // Instrução só foi realmente executada se não abriu novo bloco de escopo.
310
- // Por isso, `declaracaoAtual` não deve ser incrementada aqui.
311
- this.comandoAdentrarEscopo = false;
312
- }
313
- else {
314
- escopoVisitado.declaracaoAtual++;
315
- }
316
- // Se última instrução do escopo atual foi executada, descartar escopo.
317
- if (escopoVisitado.declaracoes.length - 1 <=
318
- escopoVisitado.declaracaoAtual) {
319
- this.pilhaEscoposExecucao.removerUltimo();
320
- this.escopoAtual--;
321
- }
322
- if (this.pilhaEscoposExecucao.elementos() === 1) {
323
- this.finalizacaoDaExecucao();
324
- }
325
- return [2 /*return*/];
326
- }
327
- });
328
- });
329
- };
179
+ async interpretacaoApenasUmaInstrucao(escopo = 1) {
180
+ const escopoVisitado = this.pilhaEscoposExecucao.naPosicao(escopo);
181
+ if (escopo < this.escopoAtual) {
182
+ this.interpretacaoApenasUmaInstrucao(escopo + 1);
183
+ }
184
+ else {
185
+ const declaracaoAtual = escopoVisitado.declaracoes[escopoVisitado.declaracaoAtual];
186
+ await this.executar(declaracaoAtual);
187
+ // Blocos de escopo que não sejam de funções adentram
188
+ // o escopo ativo por padrão, por isso o teste abaixo.
189
+ // this.adentrarEscopoAtivo = Object.getPrototypeOf(declaracaoAtual).constructor.name !== 'Funcao';
190
+ }
191
+ if (this.comandoAdentrarEscopo) {
192
+ // Depurador comandou instrução 'adentrar-escopo', ou bloco de escopo
193
+ // não é de uma função.
194
+ // Instrução só foi realmente executada se não abriu novo bloco de escopo.
195
+ // Por isso, `declaracaoAtual` não deve ser incrementada aqui.
196
+ this.comandoAdentrarEscopo = false;
197
+ }
198
+ else {
199
+ escopoVisitado.declaracaoAtual++;
200
+ }
201
+ // Se última instrução do escopo atual foi executada, descartar escopo.
202
+ if (escopoVisitado.declaracoes.length - 1 <=
203
+ escopoVisitado.declaracaoAtual) {
204
+ this.pilhaEscoposExecucao.removerUltimo();
205
+ this.escopoAtual--;
206
+ }
207
+ if (this.pilhaEscoposExecucao.elementos() === 1) {
208
+ this.finalizacaoDaExecucao();
209
+ }
210
+ }
330
211
  /**
331
212
  * Interpreta restante do bloco de execução em que o ponto de parada está, conforme comando do depurador.
332
213
  * Se houver outros pontos de parada no mesmo escopo à frente da instrução atual, todos são ignorados.
333
214
  * @param escopo Indica o escopo a ser visitado. Usado para construir uma pilha de chamadas do lado JS.
334
215
  */
335
- InterpretadorComDepuracao.prototype.proximoESair = function (escopo) {
336
- if (escopo === void 0) { escopo = 1; }
337
- return __awaiter(this, void 0, void 0, function () {
338
- var escopoVisitado, ultimoEscopo, retornoExecucao;
339
- return __generator(this, function (_a) {
340
- switch (_a.label) {
341
- case 0:
342
- escopoVisitado = this.pilhaEscoposExecucao.naPosicao(escopo);
343
- if (!(escopo < this.escopoAtual - 1)) return [3 /*break*/, 1];
344
- this.proximoESair(escopo + 1);
345
- return [3 /*break*/, 6];
346
- case 1:
347
- ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
348
- retornoExecucao = void 0;
349
- _a.label = 2;
350
- case 2:
351
- if (!(!(retornoExecucao instanceof quebras_1.Quebra) &&
352
- ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length)) return [3 /*break*/, 5];
353
- return [4 /*yield*/, this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual])];
354
- case 3:
355
- retornoExecucao = _a.sent();
356
- _a.label = 4;
357
- case 4:
358
- ultimoEscopo.declaracaoAtual++;
359
- return [3 /*break*/, 2];
360
- case 5:
361
- this.pilhaEscoposExecucao.removerUltimo();
362
- this.escopoAtual--;
363
- escopoVisitado.declaracaoAtual++;
364
- _a.label = 6;
365
- case 6:
366
- // Se última instrução do escopo atual foi executada, descartar escopo.
367
- if (escopoVisitado.declaracoes.length <= escopoVisitado.declaracaoAtual) {
368
- this.pilhaEscoposExecucao.removerUltimo();
369
- this.escopoAtual--;
370
- }
371
- if (this.pilhaEscoposExecucao.elementos() === 1) {
372
- this.finalizacaoDaExecucao();
373
- }
374
- return [2 /*return*/];
375
- }
376
- });
377
- });
378
- };
216
+ async proximoESair(escopo = 1) {
217
+ const escopoVisitado = this.pilhaEscoposExecucao.naPosicao(escopo);
218
+ if (escopo < this.escopoAtual - 1) {
219
+ this.proximoESair(escopo + 1);
220
+ }
221
+ else {
222
+ const ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
223
+ let retornoExecucao;
224
+ for (; !(retornoExecucao instanceof quebras_1.Quebra) &&
225
+ ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
226
+ retornoExecucao = await this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
227
+ }
228
+ this.pilhaEscoposExecucao.removerUltimo();
229
+ this.escopoAtual--;
230
+ escopoVisitado.declaracaoAtual++;
231
+ }
232
+ // Se última instrução do escopo atual foi executada, descartar escopo.
233
+ if (escopoVisitado.declaracoes.length <= escopoVisitado.declaracaoAtual) {
234
+ this.pilhaEscoposExecucao.removerUltimo();
235
+ this.escopoAtual--;
236
+ }
237
+ if (this.pilhaEscoposExecucao.elementos() === 1) {
238
+ this.finalizacaoDaExecucao();
239
+ }
240
+ }
379
241
  /**
380
242
  * Prepara a pilha de escopos para uma situação de depuração.
381
243
  * Não há execução de código neste caso.
382
244
  * @param declaracoes Um vetor de declarações.
383
245
  */
384
- InterpretadorComDepuracao.prototype.prepararParaDepuracao = function (declaracoes) {
246
+ prepararParaDepuracao(declaracoes) {
385
247
  this.declaracoes = declaracoes;
386
- var escopoExecucao = {
248
+ const escopoExecucao = {
387
249
  declaracoes: declaracoes,
388
250
  declaracaoAtual: 0,
389
251
  ambiente: new espaco_variaveis_1.EspacoVariaveis(),
390
252
  };
391
253
  this.pilhaEscoposExecucao.empilhar(escopoExecucao);
392
254
  this.escopoAtual++;
393
- };
255
+ }
394
256
  /**
395
257
  * Interpretação utilizada pelo depurador. Pode encerrar ao encontrar um
396
258
  * ponto de parada ou não.
@@ -399,36 +261,24 @@ var InterpretadorComDepuracao = /** @class */ (function (_super) {
399
261
  * @param declaracoes Um vetor de declarações.
400
262
  * @returns Um objeto de retorno, com erros encontrados se houverem.
401
263
  */
402
- InterpretadorComDepuracao.prototype.interpretar = function (declaracoes, manterAmbiente) {
403
- if (manterAmbiente === void 0) { manterAmbiente = false; }
404
- return __awaiter(this, void 0, void 0, function () {
405
- var escopoExecucao, retorno;
406
- return __generator(this, function (_a) {
407
- switch (_a.label) {
408
- case 0:
409
- this.erros = [];
410
- this.declaracoes = declaracoes;
411
- escopoExecucao = {
412
- declaracoes: declaracoes,
413
- declaracaoAtual: 0,
414
- ambiente: new espaco_variaveis_1.EspacoVariaveis(),
415
- };
416
- this.pilhaEscoposExecucao.empilhar(escopoExecucao);
417
- this.escopoAtual++;
418
- return [4 /*yield*/, this.executarUltimoEscopo(manterAmbiente)];
419
- case 1:
420
- _a.sent();
421
- retorno = {
422
- erros: this.erros,
423
- resultado: this.resultadoInterpretador,
424
- };
425
- this.resultadoInterpretador = [];
426
- return [2 /*return*/, retorno];
427
- }
428
- });
429
- });
430
- };
431
- return InterpretadorComDepuracao;
432
- }(interpretador_1.Interpretador));
264
+ async interpretar(declaracoes, manterAmbiente = false) {
265
+ this.erros = [];
266
+ this.declaracoes = declaracoes;
267
+ const escopoExecucao = {
268
+ declaracoes: declaracoes,
269
+ declaracaoAtual: 0,
270
+ ambiente: new espaco_variaveis_1.EspacoVariaveis(),
271
+ };
272
+ this.pilhaEscoposExecucao.empilhar(escopoExecucao);
273
+ this.escopoAtual++;
274
+ await this.executarUltimoEscopo(manterAmbiente);
275
+ const retorno = {
276
+ erros: this.erros,
277
+ resultado: this.resultadoInterpretador,
278
+ };
279
+ this.resultadoInterpretador = [];
280
+ return retorno;
281
+ }
282
+ }
433
283
  exports.InterpretadorComDepuracao = InterpretadorComDepuracao;
434
284
  //# sourceMappingURL=interpretador-com-depuracao.js.map