@designliquido/delegua 1.26.0 → 1.26.2

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 (110) hide show
  1. package/analisador-semantico/analisador-semantico.d.ts +4 -1
  2. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  3. package/analisador-semantico/analisador-semantico.js +36 -8
  4. package/analisador-semantico/analisador-semantico.js.map +1 -1
  5. package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
  6. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +11 -12
  7. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  8. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  9. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +14 -12
  10. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  11. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts.map +1 -1
  12. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js +5 -3
  13. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js.map +1 -1
  14. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
  15. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +1 -1
  16. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
  17. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js +3 -3
  18. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js.map +1 -1
  19. package/bibliotecas/dialetos/pitugues/primitivas-numero.js +8 -8
  20. package/bibliotecas/dialetos/pitugues/primitivas-numero.js.map +1 -1
  21. package/bibliotecas/dialetos/pitugues/primitivas-texto.js +22 -22
  22. package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -1
  23. package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -1
  24. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +16 -16
  25. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -1
  26. package/bin/package.json +2 -2
  27. package/excecoes/index.d.ts +1 -0
  28. package/excecoes/index.d.ts.map +1 -1
  29. package/excecoes/index.js +1 -0
  30. package/excecoes/index.js.map +1 -1
  31. package/excecoes/mensagem-erro.d.ts +17 -0
  32. package/excecoes/mensagem-erro.d.ts.map +1 -0
  33. package/excecoes/mensagem-erro.js +31 -0
  34. package/excecoes/mensagem-erro.js.map +1 -0
  35. package/interpretador/depuracao/avaliador-expressao-depuracao.d.ts.map +1 -1
  36. package/interpretador/depuracao/avaliador-expressao-depuracao.js +2 -1
  37. package/interpretador/depuracao/avaliador-expressao-depuracao.js.map +1 -1
  38. package/interpretador/depuracao/comum.d.ts.map +1 -1
  39. package/interpretador/depuracao/comum.js +6 -1
  40. package/interpretador/depuracao/comum.js.map +1 -1
  41. package/interpretador/dialetos/pitugues/comum.d.ts +3 -3
  42. package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
  43. package/interpretador/dialetos/pitugues/comum.js +18 -4
  44. package/interpretador/dialetos/pitugues/comum.js.map +1 -1
  45. package/interpretador/dialetos/pitugues/interpretador-pitugues.js +2 -2
  46. package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
  47. package/interpretador/interpretador-base.d.ts.map +1 -1
  48. package/interpretador/interpretador-base.js +2 -1
  49. package/interpretador/interpretador-base.js.map +1 -1
  50. package/interpretador/interpretador.js +3 -3
  51. package/interpretador/interpretador.js.map +1 -1
  52. package/lexador/lexador.d.ts.map +1 -1
  53. package/lexador/lexador.js.map +1 -1
  54. package/package.json +2 -2
  55. package/tipos-de-dados/dialetos/pitugues.d.ts +0 -4
  56. package/tipos-de-dados/dialetos/pitugues.d.ts.map +1 -1
  57. package/tipos-de-dados/dialetos/pitugues.js +0 -4
  58. package/tipos-de-dados/dialetos/pitugues.js.map +1 -1
  59. package/tradutores/tradutor-assembly-x64.d.ts +11 -96
  60. package/tradutores/tradutor-assembly-x64.d.ts.map +1 -1
  61. package/tradutores/tradutor-assembly-x64.js +25 -761
  62. package/tradutores/tradutor-assembly-x64.js.map +1 -1
  63. package/tradutores/tradutor-javascript.d.ts +1 -1
  64. package/tradutores/tradutor-javascript.d.ts.map +1 -1
  65. package/tradutores/tradutor-javascript.js +7 -0
  66. package/tradutores/tradutor-javascript.js.map +1 -1
  67. package/tradutores/tradutor-python.d.ts +8 -0
  68. package/tradutores/tradutor-python.d.ts.map +1 -1
  69. package/tradutores/tradutor-python.js +35 -4
  70. package/tradutores/tradutor-python.js.map +1 -1
  71. package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
  72. package/tradutores/tradutor-reverso-javascript.js +3 -0
  73. package/tradutores/tradutor-reverso-javascript.js.map +1 -1
  74. package/tradutores/x64/alocador-registradores.d.ts +29 -0
  75. package/tradutores/x64/alocador-registradores.d.ts.map +1 -0
  76. package/tradutores/x64/alocador-registradores.js +192 -0
  77. package/tradutores/x64/alocador-registradores.js.map +1 -0
  78. package/tradutores/x64/codegen.d.ts +43 -0
  79. package/tradutores/x64/codegen.d.ts.map +1 -0
  80. package/tradutores/x64/codegen.js +416 -0
  81. package/tradutores/x64/codegen.js.map +1 -0
  82. package/tradutores/x64/dessa.d.ts +9 -0
  83. package/tradutores/x64/dessa.d.ts.map +1 -0
  84. package/tradutores/x64/dessa.js +124 -0
  85. package/tradutores/x64/dessa.js.map +1 -0
  86. package/tradutores/x64/dominancia.d.ts +25 -0
  87. package/tradutores/x64/dominancia.d.ts.map +1 -0
  88. package/tradutores/x64/dominancia.js +129 -0
  89. package/tradutores/x64/dominancia.js.map +1 -0
  90. package/tradutores/x64/ir.d.ts +144 -0
  91. package/tradutores/x64/ir.d.ts.map +1 -0
  92. package/tradutores/x64/ir.js +44 -0
  93. package/tradutores/x64/ir.js.map +1 -0
  94. package/tradutores/x64/liveness.d.ts +12 -0
  95. package/tradutores/x64/liveness.d.ts.map +1 -0
  96. package/tradutores/x64/liveness.js +159 -0
  97. package/tradutores/x64/liveness.js.map +1 -0
  98. package/tradutores/x64/lowering.d.ts +7 -0
  99. package/tradutores/x64/lowering.d.ts.map +1 -0
  100. package/tradutores/x64/lowering.js +904 -0
  101. package/tradutores/x64/lowering.js.map +1 -0
  102. package/tradutores/x64/ssa.d.ts +9 -0
  103. package/tradutores/x64/ssa.d.ts.map +1 -0
  104. package/tradutores/x64/ssa.js +170 -0
  105. package/tradutores/x64/ssa.js.map +1 -0
  106. package/tradutores/x64/tipos-x64.d.ts +12 -0
  107. package/tradutores/x64/tipos-x64.d.ts.map +1 -0
  108. package/tradutores/x64/tipos-x64.js +59 -0
  109. package/tradutores/x64/tipos-x64.js.map +1 -0
  110. package/umd/delegua.js +6053 -4480
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prepararCFG = prepararCFG;
4
+ exports.ordemPosFixaReversa = ordemPosFixaReversa;
5
+ exports.computeDominancia = computeDominancia;
6
+ exports.arvoreDominancia = arvoreDominancia;
7
+ /**
8
+ * Recalcula `sucessores`/`predecessores` de cada bloco a partir do terminador.
9
+ * Chamado depois de qualquer alteração na CFG (lowering, divisão de arestas críticas em dessa.ts).
10
+ */
11
+ function prepararCFG(funcao) {
12
+ for (const bloco of funcao.blocos.values()) {
13
+ bloco.predecessores = [];
14
+ switch (bloco.terminador.op) {
15
+ case 'salto':
16
+ bloco.sucessores = [bloco.terminador.alvo];
17
+ break;
18
+ case 'saltoCondicional':
19
+ bloco.sucessores = [bloco.terminador.verdadeiro, bloco.terminador.falso];
20
+ break;
21
+ case 'retorno':
22
+ bloco.sucessores = [];
23
+ break;
24
+ }
25
+ }
26
+ for (const bloco of funcao.blocos.values()) {
27
+ for (const sucessorId of bloco.sucessores) {
28
+ const sucessor = funcao.blocos.get(sucessorId);
29
+ if (sucessor && !sucessor.predecessores.includes(bloco.id)) {
30
+ sucessor.predecessores.push(bloco.id);
31
+ }
32
+ }
33
+ }
34
+ }
35
+ /** Ordem pós-fixa reversa a partir do bloco de entrada, alcançando somente blocos vivos. */
36
+ function ordemPosFixaReversa(funcao) {
37
+ const visitados = new Set();
38
+ const posFixa = [];
39
+ function visitar(id) {
40
+ if (visitados.has(id))
41
+ return;
42
+ visitados.add(id);
43
+ const bloco = funcao.blocos.get(id);
44
+ if (!bloco)
45
+ return;
46
+ for (const sucessorId of bloco.sucessores) {
47
+ visitar(sucessorId);
48
+ }
49
+ posFixa.push(id);
50
+ }
51
+ visitar(funcao.blocoEntrada);
52
+ return posFixa.reverse();
53
+ }
54
+ /**
55
+ * Algoritmo iterativo de Cooper/Harvey/Kennedy ("A Simple, Fast Dominance Algorithm").
56
+ * Preferido a Lengauer-Tarjan aqui por ser bem mais simples de implementar corretamente,
57
+ * e funções Delégua traduzidas para x64 têm poucos blocos — o custo O(n^2) no pior caso
58
+ * não é relevante.
59
+ */
60
+ function computeDominancia(funcao) {
61
+ prepararCFG(funcao);
62
+ const ordem = ordemPosFixaReversa(funcao);
63
+ const indiceNaOrdem = new Map();
64
+ ordem.forEach((id, indice) => indiceNaOrdem.set(id, indice));
65
+ const idom = new Map();
66
+ idom.set(funcao.blocoEntrada, funcao.blocoEntrada);
67
+ function interseccao(a, b) {
68
+ while (a !== b) {
69
+ while (indiceNaOrdem.get(a) > indiceNaOrdem.get(b)) {
70
+ a = idom.get(a);
71
+ }
72
+ while (indiceNaOrdem.get(b) > indiceNaOrdem.get(a)) {
73
+ b = idom.get(b);
74
+ }
75
+ }
76
+ return a;
77
+ }
78
+ let mudou = true;
79
+ while (mudou) {
80
+ mudou = false;
81
+ for (const id of ordem) {
82
+ if (id === funcao.blocoEntrada)
83
+ continue;
84
+ const bloco = funcao.blocos.get(id);
85
+ const predsProcessados = bloco.predecessores.filter((p) => idom.has(p));
86
+ if (predsProcessados.length === 0)
87
+ continue;
88
+ let novoIdom = predsProcessados[0];
89
+ for (const pred of predsProcessados.slice(1)) {
90
+ novoIdom = interseccao(novoIdom, pred);
91
+ }
92
+ if (idom.get(id) !== novoIdom) {
93
+ idom.set(id, novoIdom);
94
+ mudou = true;
95
+ }
96
+ }
97
+ }
98
+ const domFrontier = new Map();
99
+ for (const id of ordem)
100
+ domFrontier.set(id, new Set());
101
+ for (const id of ordem) {
102
+ const bloco = funcao.blocos.get(id);
103
+ if (bloco.predecessores.length < 2)
104
+ continue;
105
+ for (const pred of bloco.predecessores) {
106
+ if (!idom.has(pred))
107
+ continue;
108
+ let runner = pred;
109
+ while (runner !== idom.get(id)) {
110
+ domFrontier.get(runner).add(id);
111
+ runner = idom.get(runner);
112
+ }
113
+ }
114
+ }
115
+ return { idom, domFrontier, ordem };
116
+ }
117
+ /** Filhos imediatos de cada bloco na árvore de dominância (para percorrer em pré-ordem na renomeação SSA). */
118
+ function arvoreDominancia(resultado, blocoEntrada) {
119
+ const filhos = new Map();
120
+ for (const id of resultado.ordem)
121
+ filhos.set(id, []);
122
+ for (const [id, dominador] of resultado.idom) {
123
+ if (id === blocoEntrada)
124
+ continue;
125
+ filhos.get(dominador)?.push(id);
126
+ }
127
+ return filhos;
128
+ }
129
+ //# sourceMappingURL=dominancia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dominancia.js","sourceRoot":"","sources":["../../../fontes/tradutores/x64/dominancia.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import { IRTipo } from './tipos-x64';
2
+ export type IRValor = {
3
+ classe: 'constante';
4
+ valor: number | bigint | boolean;
5
+ } | {
6
+ classe: 'registrador';
7
+ nome: string;
8
+ } | {
9
+ classe: 'rotulo';
10
+ nome: string;
11
+ }
12
+ /** Só aparece como `src` da `copia` sintética no início do bloco de entrada: i-ésimo registrador de argumento da ABI. */
13
+ | {
14
+ classe: 'argumentoFisico';
15
+ indice: number;
16
+ };
17
+ export declare function valorConstante(valor: number | bigint | boolean): IRValor;
18
+ export declare function valorRegistrador(nome: string): IRValor;
19
+ export declare function valorRotulo(nome: string): IRValor;
20
+ export declare function valorArgumentoFisico(indice: number): IRValor;
21
+ export type OperadorBinario = '+' | '-' | '*' | '/' | '%' | '<' | '>' | '<=' | '>=' | '==' | '!=';
22
+ /** Referência a um vetor de tamanho fixo: pode acabar em memória global ou na pilha da função dona. */
23
+ export interface IRArranjoInfo {
24
+ id: string;
25
+ tamanho: number;
26
+ tipoElemento: IRTipo;
27
+ }
28
+ export type IRInstrucao = {
29
+ op: 'const';
30
+ dst: string;
31
+ valor: number | bigint | boolean;
32
+ } | {
33
+ op: 'copia';
34
+ dst: string;
35
+ src: IRValor;
36
+ } | {
37
+ op: 'bin';
38
+ dst: string;
39
+ operador: OperadorBinario;
40
+ esquerda: IRValor;
41
+ direita: IRValor;
42
+ } | {
43
+ op: 'neg';
44
+ dst: string;
45
+ src: IRValor;
46
+ } | {
47
+ op: 'nao';
48
+ dst: string;
49
+ src: IRValor;
50
+ } | {
51
+ op: 'enderecoRotulo';
52
+ dst: string;
53
+ rotulo: string;
54
+ } | {
55
+ op: 'carregarGlobal';
56
+ dst: string;
57
+ rotulo: string;
58
+ } | {
59
+ op: 'armazenarGlobal';
60
+ rotulo: string;
61
+ valor: IRValor;
62
+ } | {
63
+ op: 'indiceLer';
64
+ dst: string;
65
+ arranjo: string;
66
+ indice: IRValor;
67
+ } | {
68
+ op: 'indiceEscrever';
69
+ arranjo: string;
70
+ indice: IRValor;
71
+ valor: IRValor;
72
+ } | {
73
+ op: 'chamada';
74
+ dst: string | null;
75
+ rotulo: string;
76
+ argumentos: IRValor[];
77
+ } | {
78
+ op: 'imprimirNumero';
79
+ valor: IRValor;
80
+ } | {
81
+ op: 'imprimirTexto';
82
+ rotulo: string;
83
+ } | {
84
+ op: 'lerEntradaTexto';
85
+ arranjo: string;
86
+ };
87
+ /** Nó phi: vive conceitualmente no topo do bloco, uma opção por predecessor. */
88
+ export interface IRPhi {
89
+ dst: string;
90
+ /** Nome pré-SSA da variável que este phi resolve (para renomeação/depuração). */
91
+ variavel: string;
92
+ opcoes: Array<{
93
+ predecessor: string;
94
+ valor: IRValor;
95
+ }>;
96
+ }
97
+ export type IRTerminador = {
98
+ op: 'salto';
99
+ alvo: string;
100
+ } | {
101
+ op: 'saltoCondicional';
102
+ condicao: IRValor;
103
+ verdadeiro: string;
104
+ falso: string;
105
+ } | {
106
+ op: 'retorno';
107
+ valor?: IRValor;
108
+ };
109
+ export interface IRBloco {
110
+ id: string;
111
+ phis: IRPhi[];
112
+ instrucoes: IRInstrucao[];
113
+ terminador: IRTerminador;
114
+ predecessores: string[];
115
+ sucessores: string[];
116
+ }
117
+ export interface IRParametro {
118
+ nome: string;
119
+ registrador: string;
120
+ tipo: IRTipo;
121
+ }
122
+ export interface IRFuncao {
123
+ nome: string;
124
+ parametros: IRParametro[];
125
+ tipoRetorno: IRTipo;
126
+ blocos: Map<string, IRBloco>;
127
+ ordemBlocos: string[];
128
+ blocoEntrada: string;
129
+ /** Nomes pré-SSA (variáveis-fonte + temporários do compilador) declarados nesta função. */
130
+ variaveisLocais: Set<string>;
131
+ /** Vetores de tamanho fixo cuja área de armazenamento pertence ao frame desta função. */
132
+ arranjosLocais: Map<string, IRArranjoInfo>;
133
+ ehImplicitaTopo: boolean;
134
+ }
135
+ export interface IRPrograma {
136
+ funcoes: IRFuncao[];
137
+ globaisEscalares: Map<string, IRTipo>;
138
+ globaisArranjos: Map<string, IRArranjoInfo>;
139
+ /** rótulo -> conteúdo de literal de texto. */
140
+ literaisTexto: Map<string, string>;
141
+ }
142
+ export declare function novoBloco(id: string): IRBloco;
143
+ export declare function novaFuncao(nome: string, ehImplicitaTopo: boolean): IRFuncao;
144
+ //# sourceMappingURL=ir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../../fontes/tradutores/x64/ir.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.valorConstante = valorConstante;
4
+ exports.valorRegistrador = valorRegistrador;
5
+ exports.valorRotulo = valorRotulo;
6
+ exports.valorArgumentoFisico = valorArgumentoFisico;
7
+ exports.novoBloco = novoBloco;
8
+ exports.novaFuncao = novaFuncao;
9
+ function valorConstante(valor) {
10
+ return { classe: 'constante', valor };
11
+ }
12
+ function valorRegistrador(nome) {
13
+ return { classe: 'registrador', nome };
14
+ }
15
+ function valorRotulo(nome) {
16
+ return { classe: 'rotulo', nome };
17
+ }
18
+ function valorArgumentoFisico(indice) {
19
+ return { classe: 'argumentoFisico', indice };
20
+ }
21
+ function novoBloco(id) {
22
+ return {
23
+ id,
24
+ phis: [],
25
+ instrucoes: [],
26
+ terminador: { op: 'retorno' },
27
+ predecessores: [],
28
+ sucessores: [],
29
+ };
30
+ }
31
+ function novaFuncao(nome, ehImplicitaTopo) {
32
+ return {
33
+ nome,
34
+ parametros: [],
35
+ tipoRetorno: 'vazio',
36
+ blocos: new Map(),
37
+ ordemBlocos: [],
38
+ blocoEntrada: '',
39
+ variaveisLocais: new Set(),
40
+ arranjosLocais: new Map(),
41
+ ehImplicitaTopo,
42
+ };
43
+ }
44
+ //# sourceMappingURL=ir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir.js","sourceRoot":"","sources":["../../../fontes/tradutores/x64/ir.ts"],"names":[],"mappings":";;AASA,wCAEC;AAED,4CAEC;AAED,kCAEC;AAED,oDAEC;AA6ED,8BASC;AAED,gCAYC;AAlHD,SAAgB,cAAc,CAAC,KAAgC;IAC3D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAAY;IACzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACpC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAc;IAC/C,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC;AA6ED,SAAgB,SAAS,CAAC,EAAU;IAChC,OAAO;QACH,EAAE;QACF,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;QAC7B,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,EAAE;KACjB,CAAC;AACN,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY,EAAE,eAAwB;IAC7D,OAAO;QACH,IAAI;QACJ,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,OAAO;QACpB,MAAM,EAAE,IAAI,GAAG,EAAE;QACjB,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,IAAI,GAAG,EAAE;QAC1B,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,eAAe;KAClB,CAAC;AACN,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { IRFuncao } from './ir';
2
+ export interface ConjuntosVivacidade {
3
+ liveIn: Set<string>;
4
+ liveOut: Set<string>;
5
+ }
6
+ /**
7
+ * Vivacidade "SSA-aware": operandos de phi são considerados usados no *predecessor*
8
+ * correspondente (na aresta), não no bloco onde o phi está — o phi em si não gera uso
9
+ * local nenhum. Ver Brandner et al., "Computing Liveness Sets for SSA-Form Programs".
10
+ */
11
+ export declare function analisarVivacidade(funcao: IRFuncao): Map<string, ConjuntosVivacidade>;
12
+ //# sourceMappingURL=liveness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liveness.d.ts","sourceRoot":"","sources":["../../../fontes/tradutores/x64/liveness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAwB,MAAM,MAAM,CAAC;AAGtD,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AA0DD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CA0FrF"}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analisarVivacidade = analisarVivacidade;
4
+ const dominancia_1 = require("./dominancia");
5
+ function registradoresLidos(valor, saida) {
6
+ if (valor.classe === 'registrador')
7
+ saida.add(valor.nome);
8
+ }
9
+ function usosDaInstrucao(instrucao, saida) {
10
+ switch (instrucao.op) {
11
+ case 'copia':
12
+ registradoresLidos(instrucao.src, saida);
13
+ break;
14
+ case 'bin':
15
+ registradoresLidos(instrucao.esquerda, saida);
16
+ registradoresLidos(instrucao.direita, saida);
17
+ break;
18
+ case 'neg':
19
+ case 'nao':
20
+ registradoresLidos(instrucao.src, saida);
21
+ break;
22
+ case 'indiceLer':
23
+ registradoresLidos(instrucao.indice, saida);
24
+ break;
25
+ case 'indiceEscrever':
26
+ registradoresLidos(instrucao.indice, saida);
27
+ registradoresLidos(instrucao.valor, saida);
28
+ break;
29
+ case 'armazenarGlobal':
30
+ registradoresLidos(instrucao.valor, saida);
31
+ break;
32
+ case 'chamada':
33
+ for (const argumento of instrucao.argumentos)
34
+ registradoresLidos(argumento, saida);
35
+ break;
36
+ case 'imprimirNumero':
37
+ registradoresLidos(instrucao.valor, saida);
38
+ break;
39
+ default:
40
+ break;
41
+ }
42
+ }
43
+ function dstDaInstrucao(instrucao) {
44
+ switch (instrucao.op) {
45
+ case 'const':
46
+ case 'copia':
47
+ case 'bin':
48
+ case 'neg':
49
+ case 'nao':
50
+ case 'enderecoRotulo':
51
+ case 'carregarGlobal':
52
+ case 'indiceLer':
53
+ return instrucao.dst;
54
+ case 'chamada':
55
+ return instrucao.dst;
56
+ default:
57
+ return null;
58
+ }
59
+ }
60
+ /**
61
+ * Vivacidade "SSA-aware": operandos de phi são considerados usados no *predecessor*
62
+ * correspondente (na aresta), não no bloco onde o phi está — o phi em si não gera uso
63
+ * local nenhum. Ver Brandner et al., "Computing Liveness Sets for SSA-Form Programs".
64
+ */
65
+ function analisarVivacidade(funcao) {
66
+ (0, dominancia_1.prepararCFG)(funcao);
67
+ const ordem = (0, dominancia_1.ordemPosFixaReversa)(funcao);
68
+ const use = new Map();
69
+ const def = new Map();
70
+ for (const blocoId of ordem) {
71
+ const bloco = funcao.blocos.get(blocoId);
72
+ const usaLocal = new Set();
73
+ const defineLocal = new Set();
74
+ for (const phi of bloco.phis) {
75
+ defineLocal.add(phi.dst);
76
+ }
77
+ for (const instrucao of bloco.instrucoes) {
78
+ const usos = new Set();
79
+ usosDaInstrucao(instrucao, usos);
80
+ for (const reg of usos) {
81
+ if (!defineLocal.has(reg))
82
+ usaLocal.add(reg);
83
+ }
84
+ const dst = dstDaInstrucao(instrucao);
85
+ if (dst)
86
+ defineLocal.add(dst);
87
+ }
88
+ if (bloco.terminador.op === 'saltoCondicional') {
89
+ const usos = new Set();
90
+ registradoresLidos(bloco.terminador.condicao, usos);
91
+ for (const reg of usos)
92
+ if (!defineLocal.has(reg))
93
+ usaLocal.add(reg);
94
+ }
95
+ else if (bloco.terminador.op === 'retorno' && bloco.terminador.valor) {
96
+ const usos = new Set();
97
+ registradoresLidos(bloco.terminador.valor, usos);
98
+ for (const reg of usos)
99
+ if (!defineLocal.has(reg))
100
+ usaLocal.add(reg);
101
+ }
102
+ use.set(blocoId, usaLocal);
103
+ def.set(blocoId, defineLocal);
104
+ }
105
+ const liveIn = new Map();
106
+ const liveOut = new Map();
107
+ for (const blocoId of ordem) {
108
+ liveIn.set(blocoId, new Set());
109
+ liveOut.set(blocoId, new Set());
110
+ }
111
+ let mudou = true;
112
+ while (mudou) {
113
+ mudou = false;
114
+ // Ordem topológica reversa (do fim para o começo) converge mais rápido num fluxo backward.
115
+ for (let i = ordem.length - 1; i >= 0; i--) {
116
+ const blocoId = ordem[i];
117
+ const bloco = funcao.blocos.get(blocoId);
118
+ const novoLiveOut = new Set();
119
+ for (const sucessorId of bloco.sucessores) {
120
+ const sucessor = funcao.blocos.get(sucessorId);
121
+ const dstsPhiSucessor = new Set(sucessor.phis.map((phi) => phi.dst));
122
+ for (const reg of liveIn.get(sucessorId)) {
123
+ if (!dstsPhiSucessor.has(reg))
124
+ novoLiveOut.add(reg);
125
+ }
126
+ for (const phi of sucessor.phis) {
127
+ const opcao = phi.opcoes.find((o) => o.predecessor === blocoId);
128
+ if (opcao && opcao.valor.classe === 'registrador') {
129
+ novoLiveOut.add(opcao.valor.nome);
130
+ }
131
+ }
132
+ }
133
+ const novoLiveIn = new Set(use.get(blocoId));
134
+ for (const reg of novoLiveOut) {
135
+ if (!def.get(blocoId).has(reg))
136
+ novoLiveIn.add(reg);
137
+ }
138
+ if (!conjuntosIguais(novoLiveIn, liveIn.get(blocoId)) || !conjuntosIguais(novoLiveOut, liveOut.get(blocoId))) {
139
+ liveIn.set(blocoId, novoLiveIn);
140
+ liveOut.set(blocoId, novoLiveOut);
141
+ mudou = true;
142
+ }
143
+ }
144
+ }
145
+ const resultado = new Map();
146
+ for (const blocoId of ordem) {
147
+ resultado.set(blocoId, { liveIn: liveIn.get(blocoId), liveOut: liveOut.get(blocoId) });
148
+ }
149
+ return resultado;
150
+ }
151
+ function conjuntosIguais(a, b) {
152
+ if (a.size !== b.size)
153
+ return false;
154
+ for (const item of a)
155
+ if (!b.has(item))
156
+ return false;
157
+ return true;
158
+ }
159
+ //# sourceMappingURL=liveness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liveness.js","sourceRoot":"","sources":["../../../fontes/tradutores/x64/liveness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Declaracao } from '../../declaracoes';
2
+ import { IRPrograma } from './ir';
3
+ export declare class LoweringX64 {
4
+ lowerPrograma(declaracoes: Declaracao[]): IRPrograma;
5
+ private lowerFuncaoDeclarada;
6
+ }
7
+ //# sourceMappingURL=lowering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lowering.d.ts","sourceRoot":"","sources":["../../../fontes/tradutores/x64/lowering.ts"],"names":[],"mappings":"AAiBA,OAAO,EAIH,UAAU,EAeb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAKH,UAAU,EAUb,MAAM,MAAM,CAAC;AAu4Bd,qBAAa,WAAW;IACpB,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU;IAmEpD,OAAO,CAAC,oBAAoB;CAsB/B"}