@yakuzaa/jade-compiler 0.1.7 → 0.1.8

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 (49) hide show
  1. package/dist/ast/nodes.d.ts +24 -1
  2. package/dist/ast/nodes.d.ts.map +1 -1
  3. package/dist/cli.js +20 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/codegen/ir_generator.d.ts +1 -0
  6. package/dist/codegen/ir_generator.d.ts.map +1 -1
  7. package/dist/codegen/ir_generator.js +26 -12
  8. package/dist/codegen/ir_generator.js.map +1 -1
  9. package/dist/codegen/ir_nodes.d.ts +23 -0
  10. package/dist/codegen/ir_nodes.d.ts.map +1 -1
  11. package/dist/codegen/server_generator.d.ts +30 -0
  12. package/dist/codegen/server_generator.d.ts.map +1 -0
  13. package/dist/codegen/server_generator.js +452 -0
  14. package/dist/codegen/server_generator.js.map +1 -0
  15. package/dist/codegen/wat_generator.d.ts.map +1 -1
  16. package/dist/codegen/wat_generator.js +23 -6
  17. package/dist/codegen/wat_generator.js.map +1 -1
  18. package/dist/formatter/formatter.d.ts +1 -0
  19. package/dist/formatter/formatter.d.ts.map +1 -1
  20. package/dist/formatter/formatter.js +18 -1
  21. package/dist/formatter/formatter.js.map +1 -1
  22. package/dist/index.d.ts +4 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +4 -2
  25. package/dist/index.js.map +1 -1
  26. package/dist/lexer/lexer.d.ts.map +1 -1
  27. package/dist/lexer/lexer.js +3 -1
  28. package/dist/lexer/lexer.js.map +1 -1
  29. package/dist/lexer/token_type.d.ts +2 -0
  30. package/dist/lexer/token_type.d.ts.map +1 -1
  31. package/dist/lexer/token_type.js +2 -0
  32. package/dist/lexer/token_type.js.map +1 -1
  33. package/dist/linter/linter.d.ts +8 -0
  34. package/dist/linter/linter.d.ts.map +1 -1
  35. package/dist/linter/linter.js +41 -2
  36. package/dist/linter/linter.js.map +1 -1
  37. package/dist/parser/parser.d.ts +3 -0
  38. package/dist/parser/parser.d.ts.map +1 -1
  39. package/dist/parser/parser.js +106 -4
  40. package/dist/parser/parser.js.map +1 -1
  41. package/dist/semantic/symbol_table.d.ts +2 -1
  42. package/dist/semantic/symbol_table.d.ts.map +1 -1
  43. package/dist/semantic/symbol_table.js.map +1 -1
  44. package/dist/semantic/type_checker.d.ts +2 -0
  45. package/dist/semantic/type_checker.d.ts.map +1 -1
  46. package/dist/semantic/type_checker.js +102 -3
  47. package/dist/semantic/type_checker.js.map +1 -1
  48. package/dist/tsconfig.tsbuildinfo +1 -1
  49. package/package.json +1 -1
@@ -0,0 +1,452 @@
1
+ /**
2
+ * server_generator.ts — Gera jade-server.js a partir da config IRBancoConfig
3
+ *
4
+ * O arquivo gerado é um servidor Express completo, pronto para rodar com `node`.
5
+ * Implementa o protocolo /api/sync (Change[]) com:
6
+ * - Autenticação JWT (Authorization: Bearer)
7
+ * - Adapter de banco (postgres | mysql | sqlite | supabase)
8
+ * - Resolução de conflito via _rev
9
+ * - Retorno 409 com serverRecord quando _rev diverge
10
+ */
11
+ export class ServerGenerator {
12
+ generate(config) {
13
+ const urlExpr = this.valorExpr(config.url);
14
+ const jwtExpr = this.valorExpr(config.jwt);
15
+ const porta = config.porta;
16
+ return `#!/usr/bin/env node
17
+ /**
18
+ * jade-server.js — Servidor de sincronização gerado automaticamente pelo compilador JADE
19
+ *
20
+ * Banco: ${config.tipo}
21
+ * Porta: ${porta}
22
+ *
23
+ * Para rodar:
24
+ * node jade-server.js
25
+ *
26
+ * Dependências necessárias (instale uma vez):
27
+ ${this.instrucoesDependencias(config.tipo)}
28
+ */
29
+
30
+ 'use strict';
31
+
32
+ const http = require('http');
33
+ const crypto = require('crypto');
34
+
35
+ // ── Leitura de variáveis de ambiente ──────────────────────────────────────────
36
+
37
+ const DATABASE_URL = ${urlExpr};
38
+ const JWT_SECRET = ${jwtExpr};
39
+ const PORTA = process.env.PORT ? Number(process.env.PORT) : ${porta};
40
+
41
+ if (!DATABASE_URL) {
42
+ console.error('[jade-server] ERRO: ${this.urlEnvHint(config.url)}');
43
+ process.exit(1);
44
+ }
45
+ if (!JWT_SECRET) {
46
+ console.error('[jade-server] ERRO: ${this.jwtEnvHint(config.jwt)}');
47
+ process.exit(1);
48
+ }
49
+
50
+ // ── Adapter de banco ──────────────────────────────────────────────────────────
51
+
52
+ ${this.adapterCode(config.tipo)}
53
+
54
+ // ── Utilitários JWT (sem dependência externa) ─────────────────────────────────
55
+
56
+ function verificarJWT(token) {
57
+ try {
58
+ const partes = token.split('.');
59
+ if (partes.length !== 3) throw new Error('formato inválido');
60
+ const assinatura = crypto
61
+ .createHmac('sha256', JWT_SECRET)
62
+ .update(\`\${partes[0]}.\${partes[1]}\`)
63
+ .digest('base64url');
64
+ if (assinatura !== partes[2]) throw new Error('assinatura inválida');
65
+ const payload = JSON.parse(Buffer.from(partes[1], 'base64url').toString());
66
+ if (payload.exp && payload.exp < Math.floor(Date.now() / 1000)) {
67
+ throw new Error('token expirado');
68
+ }
69
+ return payload;
70
+ } catch (err) {
71
+ return null;
72
+ }
73
+ }
74
+
75
+ // ── Servidor HTTP ─────────────────────────────────────────────────────────────
76
+
77
+ const server = http.createServer(async (req, res) => {
78
+ // CORS básico — ajuste conforme necessidade
79
+ res.setHeader('Access-Control-Allow-Origin', '*');
80
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
81
+ res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
82
+
83
+ if (req.method === 'OPTIONS') {
84
+ res.writeHead(204);
85
+ res.end();
86
+ return;
87
+ }
88
+
89
+ if (req.method !== 'POST' || req.url !== '/api/sync') {
90
+ res.writeHead(404, { 'Content-Type': 'application/json' });
91
+ res.end(JSON.stringify({ erro: 'Endpoint não encontrado' }));
92
+ return;
93
+ }
94
+
95
+ // ── Autenticação ──────────────────────────────────────────────────────────
96
+
97
+ const authHeader = req.headers['authorization'] ?? '';
98
+ const token = authHeader.startsWith('Bearer ') ? authHeader.slice(7) : null;
99
+
100
+ if (!token) {
101
+ res.writeHead(401, { 'Content-Type': 'application/json' });
102
+ res.end(JSON.stringify({ erro: 'Token ausente. Envie Authorization: Bearer <jwt>' }));
103
+ return;
104
+ }
105
+
106
+ const usuario = verificarJWT(token);
107
+ if (!usuario) {
108
+ res.writeHead(401, { 'Content-Type': 'application/json' });
109
+ res.end(JSON.stringify({ erro: 'Token inválido ou expirado' }));
110
+ return;
111
+ }
112
+
113
+ // ── Leitura do corpo ──────────────────────────────────────────────────────
114
+
115
+ let change;
116
+ try {
117
+ const body = await lerCorpo(req);
118
+ change = JSON.parse(body);
119
+ } catch {
120
+ res.writeHead(400, { 'Content-Type': 'application/json' });
121
+ res.end(JSON.stringify({ erro: 'Corpo da requisição inválido (esperado JSON)' }));
122
+ return;
123
+ }
124
+
125
+ // ── Aplicar operação ──────────────────────────────────────────────────────
126
+
127
+ try {
128
+ await aplicarChange(change, usuario);
129
+ res.writeHead(200, { 'Content-Type': 'application/json' });
130
+ res.end('{}');
131
+ } catch (err) {
132
+ if (err && err.status === 403) {
133
+ res.writeHead(403, { 'Content-Type': 'application/json' });
134
+ res.end(JSON.stringify({ erro: err.message ?? 'Acesso negado' }));
135
+ return;
136
+ }
137
+ if (err && err.status === 409) {
138
+ res.writeHead(409, { 'Content-Type': 'application/json' });
139
+ res.end(JSON.stringify({ serverRecord: err.serverRecord }));
140
+ return;
141
+ }
142
+ console.error('[jade-server] Erro ao aplicar operação:', err);
143
+ res.writeHead(500, { 'Content-Type': 'application/json' });
144
+ res.end(JSON.stringify({ erro: 'Erro interno do servidor' }));
145
+ }
146
+ });
147
+
148
+ function lerCorpo(req) {
149
+ return new Promise((resolve, reject) => {
150
+ let data = '';
151
+ req.on('data', chunk => { data += chunk; });
152
+ req.on('end', () => resolve(data));
153
+ req.on('error', reject);
154
+ });
155
+ }
156
+
157
+ // ── Políticas de acesso por linha (RLS aplicado no servidor) ─────────────────
158
+
159
+ ${this.gerarPoliticasRLS(config)}
160
+
161
+ // ── Operações de banco ────────────────────────────────────────────────────────
162
+
163
+ async function aplicarChange(change, usuario) {
164
+ const { type, table, id, data, deltas, baseRev } = change;
165
+
166
+ if (!table) throw new Error("Campo 'table' obrigatório");
167
+
168
+ const campoRLS = POLITICAS_RLS.get(table);
169
+
170
+ switch (type) {
171
+ case 'insert':
172
+ // RLS: define o campo dono automaticamente a partir do token JWT
173
+ if (campoRLS) data[campoRLS] = usuario.sub;
174
+ await dbInserir(table, data, usuario);
175
+ break;
176
+
177
+ case 'update': {
178
+ if (!id) throw new Error("Campo 'id' obrigatório em update");
179
+ const atual = await dbBuscarPorId(table, id);
180
+ if (!atual) {
181
+ const err = Object.assign(new Error('Registro não encontrado'), { status: 409, serverRecord: null });
182
+ throw err;
183
+ }
184
+ // RLS: verifica se o usuário atual é dono do registro
185
+ if (campoRLS && String(atual[campoRLS]) !== String(usuario.sub)) {
186
+ throw Object.assign(new Error('Acesso negado: você não é o dono deste registro'), { status: 403 });
187
+ }
188
+ if (baseRev && atual._rev !== baseRev) {
189
+ const conflito = Object.assign(
190
+ new Error('Conflito de versão detectado'),
191
+ { status: 409, serverRecord: atual }
192
+ );
193
+ throw conflito;
194
+ }
195
+ const campos = {};
196
+ for (const [campo, delta] of Object.entries(deltas ?? {})) {
197
+ // RLS: impede alteração do campo dono
198
+ if (campoRLS && campo === campoRLS) continue;
199
+ campos[campo] = delta.para;
200
+ }
201
+ // Incrementar _rev
202
+ const [seq] = (atual._rev ?? '0-').split('-');
203
+ campos._rev = \`\${Number(seq) + 1}-\${crypto.randomBytes(4).toString('hex')}\`;
204
+ await dbAtualizar(table, id, campos, usuario);
205
+ break;
206
+ }
207
+
208
+ case 'delete': {
209
+ if (!id) throw new Error("Campo 'id' obrigatório em delete");
210
+ // RLS: verifica se o usuário atual é dono do registro
211
+ if (campoRLS) {
212
+ const atual = await dbBuscarPorId(table, id);
213
+ if (atual && String(atual[campoRLS]) !== String(usuario.sub)) {
214
+ throw Object.assign(new Error('Acesso negado: você não é o dono deste registro'), { status: 403 });
215
+ }
216
+ }
217
+ await dbRemover(table, id, usuario);
218
+ break;
219
+ }
220
+
221
+ default:
222
+ throw new Error(\`Tipo de operação desconhecido: '\${type}'\`);
223
+ }
224
+ }
225
+
226
+ ${this.implementacaoDB(config.tipo)}
227
+
228
+ // ── Inicialização ─────────────────────────────────────────────────────────────
229
+
230
+ async function iniciar() {
231
+ await conectar();
232
+ server.listen(PORTA, () => {
233
+ console.log(\`[jade-server] Servidor JADE rodando em http://localhost:\${PORTA}/api/sync\`);
234
+ console.log(\`[jade-server] Banco: ${config.tipo} | Porta: \${PORTA}\`);
235
+ });
236
+ }
237
+
238
+ process.on('SIGTERM', async () => {
239
+ await encerrar();
240
+ process.exit(0);
241
+ });
242
+
243
+ iniciar().catch(err => {
244
+ console.error('[jade-server] Falha ao iniciar:', err);
245
+ process.exit(1);
246
+ });
247
+ `;
248
+ }
249
+ // ── Helpers privados ──────────────────────────────────────────────────────
250
+ gerarPoliticasRLS(config) {
251
+ if (!config.politicas || config.politicas.length === 0) {
252
+ return `// Sem políticas RLS configuradas — acesso irrestrito a todos os registros
253
+ const POLITICAS_RLS = new Map();`;
254
+ }
255
+ const entradas = config.politicas
256
+ .map(p => ` ['${p.entidade}', '${p.dono}'],`)
257
+ .join('\n');
258
+ return `// Gerado a partir do bloco 'politica' no código JADE
259
+ // Entidades com RLS: ${config.politicas.map(p => p.entidade).join(', ')}
260
+ const POLITICAS_RLS = new Map([
261
+ ${entradas}
262
+ ]);`;
263
+ }
264
+ valorExpr(v) {
265
+ if (v.tipo === 'literal')
266
+ return JSON.stringify(v.valor);
267
+ return `process.env['${v.variavel}']`;
268
+ }
269
+ urlEnvHint(v) {
270
+ if (v.tipo === 'env')
271
+ return `Variável de ambiente '${v.variavel}' não definida. Defina DATABASE_URL antes de rodar.`;
272
+ return 'URL do banco não configurada.';
273
+ }
274
+ jwtEnvHint(v) {
275
+ if (v.tipo === 'env')
276
+ return `Variável de ambiente '${v.variavel}' não definida. Defina JWT_SECRET antes de rodar.`;
277
+ return 'JWT_SECRET não configurado.';
278
+ }
279
+ instrucoesDependencias(tipo) {
280
+ const pkg = {
281
+ postgres: ' * npm install pg',
282
+ mysql: ' * npm install mysql2',
283
+ sqlite: ' * npm install better-sqlite3',
284
+ supabase: ' * npm install @supabase/supabase-js',
285
+ };
286
+ return pkg[tipo] ?? ' * (verifique a documentação)';
287
+ }
288
+ adapterCode(tipo) {
289
+ switch (tipo) {
290
+ case 'postgres': return this.adapterPostgres();
291
+ case 'mysql': return this.adapterMysql();
292
+ case 'sqlite': return this.adapterSqlite();
293
+ case 'supabase': return this.adapterSupabase();
294
+ default: return '// adapter desconhecido';
295
+ }
296
+ }
297
+ adapterPostgres() {
298
+ return `const { Pool } = require('pg');
299
+ let pool;
300
+
301
+ async function conectar() {
302
+ pool = new Pool({ connectionString: DATABASE_URL });
303
+ await pool.query('SELECT 1'); // testa conexão
304
+ console.log('[jade-server] Conectado ao PostgreSQL');
305
+ }
306
+
307
+ async function encerrar() { await pool?.end(); }`;
308
+ }
309
+ adapterMysql() {
310
+ return `const mysql = require('mysql2/promise');
311
+ let conn;
312
+
313
+ async function conectar() {
314
+ conn = await mysql.createConnection(DATABASE_URL);
315
+ console.log('[jade-server] Conectado ao MySQL');
316
+ }
317
+
318
+ async function encerrar() { await conn?.end(); }`;
319
+ }
320
+ adapterSqlite() {
321
+ return `const Database = require('better-sqlite3');
322
+ let db;
323
+
324
+ async function conectar() {
325
+ db = new Database(DATABASE_URL);
326
+ db.pragma('journal_mode = WAL');
327
+ console.log('[jade-server] Conectado ao SQLite:', DATABASE_URL);
328
+ }
329
+
330
+ async function encerrar() { db?.close(); }`;
331
+ }
332
+ adapterSupabase() {
333
+ return `const { createClient } = require('@supabase/supabase-js');
334
+ let supabase;
335
+
336
+ async function conectar() {
337
+ supabase = createClient(DATABASE_URL, JWT_SECRET);
338
+ console.log('[jade-server] Conectado ao Supabase');
339
+ }
340
+
341
+ async function encerrar() { /* Supabase não precisa de cleanup explícito */ }`;
342
+ }
343
+ implementacaoDB(tipo) {
344
+ switch (tipo) {
345
+ case 'postgres': return this.implPostgres();
346
+ case 'mysql': return this.implMysql();
347
+ case 'sqlite': return this.implSqlite();
348
+ case 'supabase': return this.implSupabase();
349
+ default: return '';
350
+ }
351
+ }
352
+ implPostgres() {
353
+ return `async function dbBuscarPorId(table, id) {
354
+ const { rows } = await pool.query(\`SELECT * FROM "\${table}" WHERE id = $1\`, [id]);
355
+ return rows[0] ?? null;
356
+ }
357
+
358
+ async function dbInserir(table, data, usuario) {
359
+ const campos = Object.keys(data);
360
+ const valores = Object.values(data);
361
+ const placeholders = campos.map((_, i) => \`$\${i + 1}\`).join(', ');
362
+ const colunas = campos.map(c => \`"\${c}"\`).join(', ');
363
+ await pool.query(\`INSERT INTO "\${table}" (\${colunas}) VALUES (\${placeholders})\`, valores);
364
+ }
365
+
366
+ async function dbAtualizar(table, id, campos, usuario) {
367
+ const sets = Object.keys(campos).map((c, i) => \`"\${c}" = $\${i + 1}\`).join(', ');
368
+ const valores = [...Object.values(campos), id];
369
+ await pool.query(
370
+ \`UPDATE "\${table}" SET \${sets} WHERE id = $\${valores.length}\`,
371
+ valores
372
+ );
373
+ }
374
+
375
+ async function dbRemover(table, id, usuario) {
376
+ await pool.query(\`DELETE FROM "\${table}" WHERE id = $1\`, [id]);
377
+ }`;
378
+ }
379
+ implMysql() {
380
+ return `async function dbBuscarPorId(table, id) {
381
+ const [rows] = await conn.execute(\`SELECT * FROM \\\`\${table}\\\` WHERE id = ?\`, [id]);
382
+ return rows[0] ?? null;
383
+ }
384
+
385
+ async function dbInserir(table, data, usuario) {
386
+ const campos = Object.keys(data);
387
+ const valores = Object.values(data);
388
+ const placeholders = campos.map(() => '?').join(', ');
389
+ const colunas = campos.map(c => \`\\\`\${c}\\\`\`).join(', ');
390
+ await conn.execute(\`INSERT INTO \\\`\${table}\\\` (\${colunas}) VALUES (\${placeholders})\`, valores);
391
+ }
392
+
393
+ async function dbAtualizar(table, id, campos, usuario) {
394
+ const sets = Object.keys(campos).map(c => \`\\\`\${c}\\\` = ?\`).join(', ');
395
+ const valores = [...Object.values(campos), id];
396
+ await conn.execute(\`UPDATE \\\`\${table}\\\` SET \${sets} WHERE id = ?\`, valores);
397
+ }
398
+
399
+ async function dbRemover(table, id, usuario) {
400
+ await conn.execute(\`DELETE FROM \\\`\${table}\\\` WHERE id = ?\`, [id]);
401
+ }`;
402
+ }
403
+ implSqlite() {
404
+ return `function dbBuscarPorId(table, id) {
405
+ const stmt = db.prepare(\`SELECT * FROM "\${table}" WHERE id = ?\`);
406
+ return Promise.resolve(stmt.get(id) ?? null);
407
+ }
408
+
409
+ function dbInserir(table, data, usuario) {
410
+ const campos = Object.keys(data);
411
+ const valores = Object.values(data);
412
+ const placeholders = campos.map(() => '?').join(', ');
413
+ const colunas = campos.map(c => \`"\${c}"\`).join(', ');
414
+ const stmt = db.prepare(\`INSERT INTO "\${table}" (\${colunas}) VALUES (\${placeholders})\`);
415
+ stmt.run(...valores);
416
+ return Promise.resolve();
417
+ }
418
+
419
+ function dbAtualizar(table, id, campos, usuario) {
420
+ const sets = Object.keys(campos).map(c => \`"\${c}" = ?\`).join(', ');
421
+ const valores = [...Object.values(campos), id];
422
+ const stmt = db.prepare(\`UPDATE "\${table}" SET \${sets} WHERE id = ?\`);
423
+ stmt.run(...valores);
424
+ return Promise.resolve();
425
+ }
426
+
427
+ function dbRemover(table, id, usuario) {
428
+ const stmt = db.prepare(\`DELETE FROM "\${table}" WHERE id = ?\`);
429
+ stmt.run(id);
430
+ return Promise.resolve();
431
+ }`;
432
+ }
433
+ implSupabase() {
434
+ return `async function dbBuscarPorId(table, id) {
435
+ const { data } = await supabase.from(table).select('*').eq('id', id).single();
436
+ return data ?? null;
437
+ }
438
+
439
+ async function dbInserir(table, data, usuario) {
440
+ await supabase.from(table).insert(data);
441
+ }
442
+
443
+ async function dbAtualizar(table, id, campos, usuario) {
444
+ await supabase.from(table).update(campos).eq('id', id);
445
+ }
446
+
447
+ async function dbRemover(table, id, usuario) {
448
+ await supabase.from(table).delete().eq('id', id);
449
+ }`;
450
+ }
451
+ }
452
+ //# sourceMappingURL=server_generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server_generator.js","sourceRoot":"","sources":["../../codegen/server_generator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wat_generator.d.ts","sourceRoot":"","sources":["../../codegen/wat_generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAkC;IAIrD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,UAAU,CAA+C;IAEjE,OAAO,CAAC,eAAe,CAA+C;IAEtE,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,GAAG,MAAM;IAuCrC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,mBAAmB;IAyF3B,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,SAAS;IAyBjB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,IAAI;CAIb"}
1
+ {"version":3,"file":"wat_generator.d.ts","sourceRoot":"","sources":["../../codegen/wat_generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAkC;IAIrD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,UAAU,CAA+C;IAEjE,OAAO,CAAC,eAAe,CAA+C;IAEtE,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,GAAG,MAAM;IAuCrC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,mBAAmB;IAyF3B,OAAO,CAAC,kBAAkB;IAoD1B,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,SAAS;IAyBjB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,IAAI;CAIb"}
@@ -164,7 +164,7 @@ export class WATGenerator {
164
164
  break;
165
165
  }
166
166
  }
167
- generateTerminator(term, _block, _func) {
167
+ generateTerminator(term, _block, func) {
168
168
  switch (term.kind) {
169
169
  case 'Return':
170
170
  if (term.value && this.currentReturnType !== 'void') {
@@ -177,13 +177,31 @@ export class WATGenerator {
177
177
  break;
178
178
  case 'Branch':
179
179
  break;
180
- case 'CondBranch':
180
+ case 'CondBranch': {
181
181
  this.pushValue(term.condition);
182
182
  this.emit('if');
183
183
  this.indent++;
184
+ const trueBlock = func.blocks.find(b => b.label === term.trueBlock);
185
+ if (trueBlock) {
186
+ for (const instr of trueBlock.instructions) {
187
+ this.generateInstruction(instr);
188
+ }
189
+ this.generateTerminator(trueBlock.terminator, trueBlock, func);
190
+ }
184
191
  this.indent--;
192
+ const falseBlock = func.blocks.find(b => b.label === term.falseBlock);
193
+ if (falseBlock && falseBlock.label !== term.trueBlock) {
194
+ this.emit('else');
195
+ this.indent++;
196
+ for (const instr of falseBlock.instructions) {
197
+ this.generateInstruction(instr);
198
+ }
199
+ this.generateTerminator(falseBlock.terminator, falseBlock, func);
200
+ this.indent--;
201
+ }
185
202
  this.emit('end');
186
203
  break;
204
+ }
187
205
  case 'Unreachable':
188
206
  this.emit('unreachable');
189
207
  break;
@@ -254,10 +272,9 @@ export class WATGenerator {
254
272
  }
255
273
  // Resolve o nome do tipo de um IRValue (para lookup de offsets de campo)
256
274
  resolveTypeName(value) {
257
- // Na IR atual não temos tipagem de struct no value, então usamos
258
- // a typeDefinitions indexada para fazer lookup por campo
259
- // Isso é suficiente para o MVP — com múltiplos tipos com campos iguais
260
- // precisaria de anotação de tipo no IRValue
275
+ if (value.kind === 'LocalRef' && value.typeName) {
276
+ return value.typeName;
277
+ }
261
278
  return 'Unknown';
262
279
  }
263
280
  loadOpForType(type) {
@@ -1 +1 @@
1
- {"version":3,"file":"wat_generator.js","sourceRoot":"","sources":["../../codegen/wat_generator.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IACf,MAAM,GAAW,CAAC,CAAC;IACnB,KAAK,GAAa,EAAE,CAAC;IACrB,WAAW,GAAwB,IAAI,GAAG,EAAE,CAAC;IACrD,wDAAwD;IACxD,yCAAyC;IACzC,oDAAoD;IAC5C,gBAAgB,GAAW,IAAI,CAAC;IAChC,UAAU,GAA4C,EAAE,CAAC;IACjE,+DAA+D;IACvD,eAAe,GAAqC,IAAI,GAAG,EAAE,CAAC;IACtE,0EAA0E;IAClE,iBAAiB,GAAc,MAAM,CAAC;IAE9C,QAAQ,CAAC,MAAmB;QAC1B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAE7B,sCAAsC;QACtC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC7C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,4BAA4B;QAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,2EAA2E;QAC3E,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAE1C,0DAA0D;QAC1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,aAAa;QACb,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,6DAA6D;QAC7D,4CAA4C;QAC5C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEf,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QACxF,IAAI,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;QACjG,IAAI,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;QACjG,IAAI,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IACzF,CAAC;IAEO,gBAAgB,CAAC,IAAmB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAC/E,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAC/E,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,YAAY,UAAU,WAAW,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IAEO,aAAa,CAAC,KAAiB,EAAE,IAAmB;QAC1D,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAEO,mBAAmB,CAAC,KAAuB;QACjD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,UAAU;gBACb,oEAAoE;gBACpE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,SAAS;gBACZ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;oBACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBACzB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACN,uBAAuB;wBACvB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;wBAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;oBAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,OAAO;gBACV,8CAA8C;gBAC9C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,MAAM;gBACT,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI;oBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACrD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM;YAER,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,2DAA2D;gBAC3D,8CAA8C;gBAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACpD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC/D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM;YACR,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,2DAA2D;gBAC3D,gDAAgD;gBAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACpD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,aAAa,cAAc,EAAE,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3C,MAAM;YACR,CAAC;YAED,KAAK,OAAO;gBACV,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,QAAQ;gBACX,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,KAAK;gBACR,qCAAqC;gBACrC,IAAI,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7C,MAAM;QACV,CAAC;IACH,CAAC;IAEO,kBAAkB,CACxB,IAAqB,EACrB,MAAkB,EAClB,KAAoB;QAEpB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ;gBACX,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,KAAK,MAAM,EAAE,CAAC;oBACpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpB,MAAM;YAER,KAAK,QAAQ;gBACX,MAAM;YAER,KAAK,YAAY;gBACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjB,MAAM;YAER,KAAK,aAAa;gBAChB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACzB,MAAM;QACV,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,iDAAiD;IACzC,UAAU,CAAC,MAAiB;QAClC,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,qBAAqB;IACrC,CAAC;IAED,uEAAuE;IACvE,gDAAgD;IACxC,WAAW,CAAC,KAAiB,EAAE,UAAqB;QAC1D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO;QAExB,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/B,CAAC;QACD,+BAA+B;IACjC,CAAC;IAEO,SAAS,CAAC,KAAiB;QACjC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,UAAU;gBACb,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBAChD,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACtF,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBAChC,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACxC,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACnE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC7C,IAAI,CAAC,IAAI,CAAC,aAAa,MAAM,QAAQ,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,CAAC;gBACD,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzD,MAAM;YACR,KAAK,WAAW;gBACd,qCAAqC;gBACrC,IAAI,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzC,MAAM;QACV,CAAC;IACH,CAAC;IAED,yEAAyE;IACjE,eAAe,CAAC,KAAiB;QACvC,iEAAiE;QACjE,yDAAyD;QACzD,uEAAuE;QACvE,4CAA4C;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,aAAa,CAAC,IAAe;QACnC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK,CAAC,CAAC,OAAO,UAAU,CAAC;YAC9B,KAAK,KAAK,CAAC,CAAC,OAAO,UAAU,CAAC;YAC9B,OAAO,CAAC,CAAI,OAAO,UAAU,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,IAAe;QACpC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC;YAC/B,KAAK,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC;YAC/B,OAAO,CAAC,CAAI,OAAO,WAAW,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,EAAU,EAAE,IAAe;QAC7C,MAAM,MAAM,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9C,MAAM,GAAG,GAA2B;YAClC,KAAK,EAAE,GAAG,MAAM,MAAM;YACtB,KAAK,EAAE,GAAG,MAAM,MAAM;YACtB,KAAK,EAAE,GAAG,MAAM,MAAM;YACtB,KAAK,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YAC/C,IAAI,EAAG,GAAG,MAAM,KAAK;YACrB,IAAI,EAAG,GAAG,MAAM,KAAK;YACrB,IAAI,EAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;YAC7C,IAAI,EAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;YAC7C,IAAI,EAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;YAC7C,IAAI,EAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;YAC7C,KAAK,EAAE,SAAS;YAChB,IAAI,EAAG,QAAQ;SAChB,CAAC;QACF,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,uBAAuB,EAAE,EAAE,CAAC;IAChD,CAAC;IAEO,SAAS,CAAC,QAAgB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,yEAAyE;QACzE,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,6BAA6B;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK,CAAC;YACX,KAAK,IAAI,CAAC;YACV,KAAK,KAAK,CAAC,CAAE,OAAO,KAAK,CAAC;YAC1B,KAAK,KAAK,CAAC,CAAE,OAAO,KAAK,CAAC;YAC1B,KAAK,KAAK,CAAC,CAAE,OAAO,KAAK,CAAC;YAC1B,KAAK,KAAK,CAAC,CAAE,OAAO,KAAK,CAAC;YAC1B,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,CAAK,OAAO,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,QAAgB,EAAE,SAAiB;QACxD,4CAA4C;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;oBAAE,OAAO,MAAM,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3C,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;oBAAE,OAAO,MAAM,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,WAAW,CAAC,GAAW;QAC7B,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;QACpC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,yDAAyD;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aAChD,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAEhD,+CAA+C;QAC/C,IAAI,CAAC,gBAAgB,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAEjE,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iBAAiB;QACvB,oFAAoF;QACpF,IAAI,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QACvF,IAAI,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACzC,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,oBAAoB,MAAM,MAAM,IAAI,IAAI,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAEO,IAAI,CAAC,IAAY;QACvB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO;QAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;CACF"}
1
+ {"version":3,"file":"wat_generator.js","sourceRoot":"","sources":["../../codegen/wat_generator.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ export declare class Formatter {
21
21
  private formatInterface;
22
22
  private formatEnum;
23
23
  private formatImportacao;
24
+ private formatBanco;
24
25
  private formatTela;
25
26
  private formatCampo;
26
27
  private formatParametro;
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../formatter/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAC;AAIrC;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACpB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,GAAG,MAAM;IASvC,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,mBAAmB;IAQ3B,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,GAAG,MAAM;IAY9C,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,GAAG;CAGZ"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../formatter/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAC;AAIrC;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACpB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,GAAG,MAAM;IASvC,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,mBAAmB;IAQ3B,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,GAAG,MAAM;IAY9C,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,GAAG;CAGZ"}
@@ -30,6 +30,7 @@ export class Formatter {
30
30
  case 'Importacao': return this.formatImportacao(node, nivel);
31
31
  case 'Variavel': return this.formatVariavel(node, nivel);
32
32
  case 'Tela': return this.formatTela(node, nivel);
33
+ case 'Banco': return this.formatBanco(node, nivel);
33
34
  }
34
35
  }
35
36
  formatModulo(node, nivel) {
@@ -114,6 +115,21 @@ export class Formatter {
114
115
  return `${ind}importar ${node.modulo}.${node.item}`;
115
116
  return `${ind}importar ${node.modulo}`;
116
117
  }
118
+ formatBanco(node, nivel) {
119
+ const ind = this.ind(nivel);
120
+ const ind2 = this.ind(nivel + 1);
121
+ const formatVal = (v) => v.tipo === 'env' ? `env("${v.variavel}")` : `"${v.valor}"`;
122
+ const linhas = [`${ind}banco`, `${ind2}tipo: ${node.tipo}`, `${ind2}url: ${formatVal(node.url)}`];
123
+ if (node.porta !== undefined)
124
+ linhas.push(`${ind2}porta: ${node.porta}`);
125
+ if (node.jwt)
126
+ linhas.push(`${ind2}jwt: ${formatVal(node.jwt)}`);
127
+ for (const p of node.politicas) {
128
+ linhas.push(`${ind2}politica ${p.entidade}`, `${this.ind(nivel + 2)}dono: ${p.dono}`, `${ind2}fim`);
129
+ }
130
+ linhas.push(`${ind}fim`);
131
+ return linhas.join('\n');
132
+ }
117
133
  formatTela(node, nivel) {
118
134
  const ind = this.ind(nivel);
119
135
  const elementos = node.elementos.map(el => this.formatTelaElemento(el, nivel + 1)).join('\n\n');
@@ -167,7 +183,8 @@ export class Formatter {
167
183
  }
168
184
  formatVariavel(node, nivel) {
169
185
  const ind = this.ind(nivel);
170
- let s = `${ind}variavel ${node.nome}`;
186
+ const keyword = node.imutavel ? 'constante' : 'variavel';
187
+ let s = `${ind}${keyword} ${node.nome}`;
171
188
  if (node.tipo)
172
189
  s += `: ${this.formatTipo(node.tipo)}`;
173
190
  if (node.inicializador)