@yakuzaa/jade-compiler 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ast/nodes.d.ts +219 -0
- package/dist/ast/nodes.d.ts.map +1 -0
- package/dist/ast/nodes.js +2 -0
- package/dist/ast/nodes.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +108 -0
- package/dist/cli.js.map +1 -0
- package/dist/codegen/ir_generator.d.ts +42 -0
- package/dist/codegen/ir_generator.d.ts.map +1 -0
- package/dist/codegen/ir_generator.js +691 -0
- package/dist/codegen/ir_generator.js.map +1 -0
- package/dist/codegen/ir_nodes.d.ts +143 -0
- package/dist/codegen/ir_nodes.d.ts.map +1 -0
- package/dist/codegen/ir_nodes.js +3 -0
- package/dist/codegen/ir_nodes.js.map +1 -0
- package/dist/codegen/ir_printer.d.ts +10 -0
- package/dist/codegen/ir_printer.d.ts.map +1 -0
- package/dist/codegen/ir_printer.js +131 -0
- package/dist/codegen/ir_printer.js.map +1 -0
- package/dist/codegen/wasm_generator.d.ts +12 -0
- package/dist/codegen/wasm_generator.d.ts.map +1 -0
- package/dist/codegen/wasm_generator.js +48 -0
- package/dist/codegen/wasm_generator.js.map +1 -0
- package/dist/codegen/wat_generator.d.ts +29 -0
- package/dist/codegen/wat_generator.d.ts.map +1 -0
- package/dist/codegen/wat_generator.js +345 -0
- package/dist/codegen/wat_generator.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer/lexer.d.ts +31 -0
- package/dist/lexer/lexer.d.ts.map +1 -0
- package/dist/lexer/lexer.js +475 -0
- package/dist/lexer/lexer.js.map +1 -0
- package/dist/lexer/token.d.ts +8 -0
- package/dist/lexer/token.d.ts.map +1 -0
- package/dist/lexer/token.js +2 -0
- package/dist/lexer/token.js.map +1 -0
- package/dist/lexer/token_type.d.ts +80 -0
- package/dist/lexer/token_type.d.ts.map +1 -0
- package/dist/lexer/token_type.js +98 -0
- package/dist/lexer/token_type.js.map +1 -0
- package/dist/parser/parse_result.d.ts +12 -0
- package/dist/parser/parse_result.d.ts.map +1 -0
- package/dist/parser/parse_result.js +2 -0
- package/dist/parser/parse_result.js.map +1 -0
- package/dist/parser/parser.d.ts +57 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +1094 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/semantic/semantic_analyzer.d.ts +10 -0
- package/dist/semantic/semantic_analyzer.d.ts.map +1 -0
- package/dist/semantic/semantic_analyzer.js +16 -0
- package/dist/semantic/semantic_analyzer.js.map +1 -0
- package/dist/semantic/symbol_table.d.ts +33 -0
- package/dist/semantic/symbol_table.d.ts.map +1 -0
- package/dist/semantic/symbol_table.js +105 -0
- package/dist/semantic/symbol_table.js.map +1 -0
- package/dist/semantic/type_checker.d.ts +66 -0
- package/dist/semantic/type_checker.d.ts.map +1 -0
- package/dist/semantic/type_checker.js +963 -0
- package/dist/semantic/type_checker.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
export interface Node {
|
|
2
|
+
kind: string;
|
|
3
|
+
line: number;
|
|
4
|
+
column: number;
|
|
5
|
+
}
|
|
6
|
+
export interface ProgramaNode extends Node {
|
|
7
|
+
kind: 'Programa';
|
|
8
|
+
declaracoes: DeclaracaoNode[];
|
|
9
|
+
}
|
|
10
|
+
export type TipoPrimitivo = 'texto' | 'numero' | 'decimal' | 'booleano' | 'data' | 'hora' | 'id';
|
|
11
|
+
export interface TipoSimples extends Node {
|
|
12
|
+
kind: 'TipoSimples';
|
|
13
|
+
nome: TipoPrimitivo | string;
|
|
14
|
+
opcional: boolean;
|
|
15
|
+
obrigatorio: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface TipoLista extends Node {
|
|
18
|
+
kind: 'TipoLista';
|
|
19
|
+
elementoTipo: TipoNode;
|
|
20
|
+
}
|
|
21
|
+
export interface TipoMapa extends Node {
|
|
22
|
+
kind: 'TipoMapa';
|
|
23
|
+
chaveTipo: TipoNode;
|
|
24
|
+
valorTipo: TipoNode;
|
|
25
|
+
}
|
|
26
|
+
export interface TipoObjeto extends Node {
|
|
27
|
+
kind: 'TipoObjeto';
|
|
28
|
+
campos: CampoObjetoNode[];
|
|
29
|
+
}
|
|
30
|
+
export interface CampoObjetoNode extends Node {
|
|
31
|
+
kind: 'CampoObjeto';
|
|
32
|
+
nome: string;
|
|
33
|
+
tipo: TipoNode;
|
|
34
|
+
}
|
|
35
|
+
export type TipoNode = TipoSimples | TipoLista | TipoMapa | TipoObjeto;
|
|
36
|
+
export type DeclaracaoNode = ModuloNode | ClasseNode | EntidadeNode | ServicoNode | FuncaoNode | EventoNode | RegraNode | InterfaceNode | EnumNode | ImportacaoNode | VariavelNode | TelaNode;
|
|
37
|
+
export interface ModuloNode extends Node {
|
|
38
|
+
kind: 'Modulo';
|
|
39
|
+
nome: string;
|
|
40
|
+
declaracoes: DeclaracaoNode[];
|
|
41
|
+
}
|
|
42
|
+
export interface ClasseNode extends Node {
|
|
43
|
+
kind: 'Classe';
|
|
44
|
+
nome: string;
|
|
45
|
+
superClasse?: string;
|
|
46
|
+
interfaces: string[];
|
|
47
|
+
campos: CampoNode[];
|
|
48
|
+
metodos: FuncaoNode[];
|
|
49
|
+
}
|
|
50
|
+
export interface EntidadeNode extends Node {
|
|
51
|
+
kind: 'Entidade';
|
|
52
|
+
nome: string;
|
|
53
|
+
campos: CampoNode[];
|
|
54
|
+
}
|
|
55
|
+
export interface CampoNode extends Node {
|
|
56
|
+
kind: 'Campo';
|
|
57
|
+
nome: string;
|
|
58
|
+
tipo: TipoNode;
|
|
59
|
+
}
|
|
60
|
+
export interface ServicoNode extends Node {
|
|
61
|
+
kind: 'Servico';
|
|
62
|
+
nome: string;
|
|
63
|
+
metodos: FuncaoNode[];
|
|
64
|
+
ouvintes: OuvinteNode[];
|
|
65
|
+
}
|
|
66
|
+
export interface OuvinteNode extends Node {
|
|
67
|
+
kind: 'Ouvinte';
|
|
68
|
+
evento: string;
|
|
69
|
+
corpo: BlocoNode;
|
|
70
|
+
}
|
|
71
|
+
export interface FuncaoNode extends Node {
|
|
72
|
+
kind: 'Funcao';
|
|
73
|
+
nome: string;
|
|
74
|
+
parametros: ParametroNode[];
|
|
75
|
+
tipoRetorno?: TipoNode;
|
|
76
|
+
corpo: BlocoNode;
|
|
77
|
+
}
|
|
78
|
+
export interface ParametroNode extends Node {
|
|
79
|
+
kind: 'Parametro';
|
|
80
|
+
nome: string;
|
|
81
|
+
tipo: TipoNode;
|
|
82
|
+
}
|
|
83
|
+
export interface EventoNode extends Node {
|
|
84
|
+
kind: 'Evento';
|
|
85
|
+
nome: string;
|
|
86
|
+
campos: CampoNode[];
|
|
87
|
+
}
|
|
88
|
+
export interface RegraNode extends Node {
|
|
89
|
+
kind: 'Regra';
|
|
90
|
+
nome: string;
|
|
91
|
+
condicao: ExpressaoNode;
|
|
92
|
+
entao: BlocoNode;
|
|
93
|
+
senao?: BlocoNode;
|
|
94
|
+
}
|
|
95
|
+
export interface InterfaceNode extends Node {
|
|
96
|
+
kind: 'Interface';
|
|
97
|
+
nome: string;
|
|
98
|
+
assinaturas: AssinaturaNode[];
|
|
99
|
+
}
|
|
100
|
+
export interface AssinaturaNode extends Node {
|
|
101
|
+
kind: 'Assinatura';
|
|
102
|
+
nome: string;
|
|
103
|
+
parametros: ParametroNode[];
|
|
104
|
+
tipoRetorno: TipoNode;
|
|
105
|
+
}
|
|
106
|
+
export interface EnumNode extends Node {
|
|
107
|
+
kind: 'Enum';
|
|
108
|
+
nome: string;
|
|
109
|
+
valores: string[];
|
|
110
|
+
}
|
|
111
|
+
export interface ImportacaoNode extends Node {
|
|
112
|
+
kind: 'Importacao';
|
|
113
|
+
modulo: string;
|
|
114
|
+
item?: string;
|
|
115
|
+
wildcard: boolean;
|
|
116
|
+
alias?: string;
|
|
117
|
+
}
|
|
118
|
+
export type InstrucaoNode = VariavelNode | AtribuicaoNode | ChamadaFuncaoNode | RetornoNode | CondicionalNode | EnquantoNode | ParaNode | EmissaoEventoNode | ErroNode;
|
|
119
|
+
export interface BlocoNode extends Node {
|
|
120
|
+
kind: 'Bloco';
|
|
121
|
+
instrucoes: InstrucaoNode[];
|
|
122
|
+
}
|
|
123
|
+
export interface VariavelNode extends Node {
|
|
124
|
+
kind: 'Variavel';
|
|
125
|
+
nome: string;
|
|
126
|
+
tipo?: TipoNode;
|
|
127
|
+
inicializador?: ExpressaoNode;
|
|
128
|
+
}
|
|
129
|
+
export interface AtribuicaoNode extends Node {
|
|
130
|
+
kind: 'Atribuicao';
|
|
131
|
+
alvo: string | AcessoMembroNode;
|
|
132
|
+
valor: ExpressaoNode;
|
|
133
|
+
}
|
|
134
|
+
export interface RetornoNode extends Node {
|
|
135
|
+
kind: 'Retorno';
|
|
136
|
+
valor?: ExpressaoNode;
|
|
137
|
+
}
|
|
138
|
+
export interface CondicionalNode extends Node {
|
|
139
|
+
kind: 'Condicional';
|
|
140
|
+
condicao: ExpressaoNode;
|
|
141
|
+
entao: BlocoNode;
|
|
142
|
+
senao?: BlocoNode;
|
|
143
|
+
}
|
|
144
|
+
export interface EnquantoNode extends Node {
|
|
145
|
+
kind: 'Enquanto';
|
|
146
|
+
condicao: ExpressaoNode;
|
|
147
|
+
corpo: BlocoNode;
|
|
148
|
+
}
|
|
149
|
+
export interface ParaNode extends Node {
|
|
150
|
+
kind: 'Para';
|
|
151
|
+
variavel: string;
|
|
152
|
+
iteravel: ExpressaoNode;
|
|
153
|
+
corpo: BlocoNode;
|
|
154
|
+
}
|
|
155
|
+
export interface EmissaoEventoNode extends Node {
|
|
156
|
+
kind: 'EmissaoEvento';
|
|
157
|
+
evento: string;
|
|
158
|
+
argumentos: ExpressaoNode[];
|
|
159
|
+
}
|
|
160
|
+
export interface ErroNode extends Node {
|
|
161
|
+
kind: 'Erro';
|
|
162
|
+
mensagem: ExpressaoNode;
|
|
163
|
+
}
|
|
164
|
+
export type ExpressaoNode = LiteralNode | IdentificadorNode | BinarioNode | UnarioNode | ChamadaFuncaoNode | AcessoMembroNode | AtribuicaoNode;
|
|
165
|
+
export interface LiteralNode extends Node {
|
|
166
|
+
kind: 'Literal';
|
|
167
|
+
valor: string | number | boolean;
|
|
168
|
+
tipoLiteral: 'texto' | 'numero' | 'decimal' | 'booleano' | 'data' | 'hora';
|
|
169
|
+
}
|
|
170
|
+
export interface IdentificadorNode extends Node {
|
|
171
|
+
kind: 'Identificador';
|
|
172
|
+
nome: string;
|
|
173
|
+
}
|
|
174
|
+
export interface BinarioNode extends Node {
|
|
175
|
+
kind: 'Binario';
|
|
176
|
+
esquerda: ExpressaoNode;
|
|
177
|
+
operador: string;
|
|
178
|
+
direita: ExpressaoNode;
|
|
179
|
+
}
|
|
180
|
+
export interface UnarioNode extends Node {
|
|
181
|
+
kind: 'Unario';
|
|
182
|
+
operador: string;
|
|
183
|
+
operando: ExpressaoNode;
|
|
184
|
+
}
|
|
185
|
+
export interface ChamadaFuncaoNode extends Node {
|
|
186
|
+
kind: 'ChamadaFuncao';
|
|
187
|
+
nome: string;
|
|
188
|
+
argumentos: ExpressaoNode[];
|
|
189
|
+
}
|
|
190
|
+
export interface AcessoMembroNode extends Node {
|
|
191
|
+
kind: 'AcessoMembro';
|
|
192
|
+
objeto: ExpressaoNode;
|
|
193
|
+
membro: string;
|
|
194
|
+
chamada?: ExpressaoNode[];
|
|
195
|
+
}
|
|
196
|
+
export interface TelaNode extends Node {
|
|
197
|
+
kind: 'Tela';
|
|
198
|
+
nome: string;
|
|
199
|
+
titulo: string;
|
|
200
|
+
elementos: TelaElementoNode[];
|
|
201
|
+
}
|
|
202
|
+
export interface TelaElementoNode extends Node {
|
|
203
|
+
kind: 'TelaElemento';
|
|
204
|
+
tipo: string;
|
|
205
|
+
nome: string;
|
|
206
|
+
propriedades: {
|
|
207
|
+
chave: string;
|
|
208
|
+
valor: string | string[];
|
|
209
|
+
}[];
|
|
210
|
+
}
|
|
211
|
+
export interface Simbolo {
|
|
212
|
+
nome: string;
|
|
213
|
+
kind: string;
|
|
214
|
+
tipo: string;
|
|
215
|
+
linha: number;
|
|
216
|
+
coluna: number;
|
|
217
|
+
escopo: string;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=nodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../ast/nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../ast/nodes.ts"],"names":[],"mappings":""}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* jadec — Compilador JADE CLI
|
|
4
|
+
*
|
|
5
|
+
* Uso:
|
|
6
|
+
* jadec arquivo.jd → compila, gera arquivo.wasm + arquivo.wat
|
|
7
|
+
* jadec arquivo.jd -o saida → define prefixo de saída
|
|
8
|
+
* jadec arquivo.jd --wat-only → gera apenas WAT (sem WASM binário)
|
|
9
|
+
* jadec arquivo.jd --check → apenas verifica erros (sem gerar saída)
|
|
10
|
+
* jadec --version → exibe versão
|
|
11
|
+
* jadec --help → exibe ajuda
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* jadec — Compilador JADE CLI
|
|
4
|
+
*
|
|
5
|
+
* Uso:
|
|
6
|
+
* jadec arquivo.jd → compila, gera arquivo.wasm + arquivo.wat
|
|
7
|
+
* jadec arquivo.jd -o saida → define prefixo de saída
|
|
8
|
+
* jadec arquivo.jd --wat-only → gera apenas WAT (sem WASM binário)
|
|
9
|
+
* jadec arquivo.jd --check → apenas verifica erros (sem gerar saída)
|
|
10
|
+
* jadec --version → exibe versão
|
|
11
|
+
* jadec --help → exibe ajuda
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync, writeFileSync } from 'fs';
|
|
14
|
+
import { resolve, basename, dirname, join } from 'path';
|
|
15
|
+
import { compile } from './index.js';
|
|
16
|
+
const VERSION = '0.1.0';
|
|
17
|
+
const HELP = `
|
|
18
|
+
jadec ${VERSION} — Compilador JADE
|
|
19
|
+
|
|
20
|
+
Uso:
|
|
21
|
+
jadec <arquivo.jd> [opções]
|
|
22
|
+
|
|
23
|
+
Opções:
|
|
24
|
+
-o <prefixo> Define prefixo dos arquivos de saída (padrão: mesmo nome do fonte)
|
|
25
|
+
--wat-only Gera apenas WAT (WebAssembly Text Format), sem binário .wasm
|
|
26
|
+
--check Verifica erros sem gerar arquivos de saída
|
|
27
|
+
--version Exibe a versão do compilador
|
|
28
|
+
--help Exibe esta ajuda
|
|
29
|
+
|
|
30
|
+
Exemplos:
|
|
31
|
+
jadec estoque.jd
|
|
32
|
+
jadec estoque.jd -o dist/estoque
|
|
33
|
+
jadec estoque.jd --check
|
|
34
|
+
`;
|
|
35
|
+
async function main() {
|
|
36
|
+
const args = process.argv.slice(2);
|
|
37
|
+
if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
|
|
38
|
+
console.log(HELP);
|
|
39
|
+
process.exit(0);
|
|
40
|
+
}
|
|
41
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
42
|
+
console.log(`jadec ${VERSION}`);
|
|
43
|
+
process.exit(0);
|
|
44
|
+
}
|
|
45
|
+
// Encontrar arquivo de entrada (primeiro arg que não é flag)
|
|
46
|
+
const inputFile = args.find(a => !a.startsWith('-'));
|
|
47
|
+
if (!inputFile) {
|
|
48
|
+
console.error('Erro: Nenhum arquivo de entrada especificado.\n');
|
|
49
|
+
console.error('Use: jadec --help para ver as opções disponíveis.');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
const watOnly = args.includes('--wat-only');
|
|
53
|
+
const checkOnly = args.includes('--check');
|
|
54
|
+
// Prefixo de saída
|
|
55
|
+
const oIdx = args.indexOf('-o');
|
|
56
|
+
const outputPrefix = oIdx !== -1 && args[oIdx + 1]
|
|
57
|
+
? args[oIdx + 1]
|
|
58
|
+
: join(dirname(resolve(inputFile)), basename(inputFile, '.jd'));
|
|
59
|
+
// Ler arquivo fonte
|
|
60
|
+
let source;
|
|
61
|
+
try {
|
|
62
|
+
source = readFileSync(resolve(inputFile), 'utf-8');
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
console.error(`Erro: Não foi possível ler o arquivo '${inputFile}'.`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
console.log(`jadec ${VERSION} — Compilando ${inputFile}...\n`);
|
|
69
|
+
const result = await compile(source, basename(inputFile, '.jd'));
|
|
70
|
+
if (!result.success) {
|
|
71
|
+
console.error('Erros encontrados:\n');
|
|
72
|
+
for (const err of result.errors) {
|
|
73
|
+
const fase = err.phase === 'parse' ? 'Sintaxe'
|
|
74
|
+
: err.phase === 'semantic' ? 'Semântica'
|
|
75
|
+
: 'CodeGen';
|
|
76
|
+
const pos = err.line > 0 ? ` [linha ${err.line}, col ${err.column}]` : '';
|
|
77
|
+
console.error(` [${fase}]${pos} ${err.message}`);
|
|
78
|
+
}
|
|
79
|
+
console.error(`\n${result.errors.length} erro(s) encontrado(s).`);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
if (checkOnly) {
|
|
83
|
+
console.log('OK — nenhum erro encontrado.');
|
|
84
|
+
process.exit(0);
|
|
85
|
+
}
|
|
86
|
+
// Escrever WAT
|
|
87
|
+
if (result.wat) {
|
|
88
|
+
const watPath = `${outputPrefix}.wat`;
|
|
89
|
+
writeFileSync(watPath, result.wat, 'utf-8');
|
|
90
|
+
console.log(` WAT → ${watPath}`);
|
|
91
|
+
}
|
|
92
|
+
// Escrever WASM
|
|
93
|
+
if (!watOnly && result.wasm) {
|
|
94
|
+
const wasmPath = `${outputPrefix}.wasm`;
|
|
95
|
+
writeFileSync(wasmPath, result.wasm);
|
|
96
|
+
console.log(` WASM → ${wasmPath} (${result.wasm.byteLength} bytes)`);
|
|
97
|
+
}
|
|
98
|
+
else if (!watOnly && !result.wasm) {
|
|
99
|
+
console.warn(' Aviso: binário WASM não gerado (wabt não disponível).');
|
|
100
|
+
console.warn(' Instale com: npm install wabt');
|
|
101
|
+
}
|
|
102
|
+
console.log('\nCompilação concluída com sucesso.');
|
|
103
|
+
}
|
|
104
|
+
main().catch(err => {
|
|
105
|
+
console.error('Erro interno do compilador:', err);
|
|
106
|
+
process.exit(2);
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as N from '../ast/nodes';
|
|
2
|
+
import * as IR from './ir_nodes';
|
|
3
|
+
export declare class IRGenerator {
|
|
4
|
+
private module;
|
|
5
|
+
private currentFunction;
|
|
6
|
+
private currentBlock;
|
|
7
|
+
private tempCounter;
|
|
8
|
+
private blockCounter;
|
|
9
|
+
constructor(moduleName: string);
|
|
10
|
+
generate(program: N.ProgramaNode): IR.IRModule;
|
|
11
|
+
private generateEntidade;
|
|
12
|
+
private generateClasse;
|
|
13
|
+
private generateFuncao;
|
|
14
|
+
private generateServico;
|
|
15
|
+
private generateBloco;
|
|
16
|
+
private generateInstrucao;
|
|
17
|
+
private generateVariavel;
|
|
18
|
+
private generateAtribuicao;
|
|
19
|
+
private generateCondicional;
|
|
20
|
+
private generateEnquanto;
|
|
21
|
+
private generatePara;
|
|
22
|
+
private generateRetorno;
|
|
23
|
+
private generateErro;
|
|
24
|
+
private generateEmissaoEvento;
|
|
25
|
+
private generateExpressao;
|
|
26
|
+
private generateLiteral;
|
|
27
|
+
private generateIdentificador;
|
|
28
|
+
private generateBinario;
|
|
29
|
+
private generateUnario;
|
|
30
|
+
private generateChamadaFuncao;
|
|
31
|
+
private generateAcessoMembro;
|
|
32
|
+
private newTemp;
|
|
33
|
+
private newBlockLabel;
|
|
34
|
+
private emit;
|
|
35
|
+
private declareLocalIfNeeded;
|
|
36
|
+
private setTerminator;
|
|
37
|
+
private switchToBlock;
|
|
38
|
+
private createBlock;
|
|
39
|
+
private jadeTypeToIR;
|
|
40
|
+
private mapOperator;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=ir_generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir_generator.d.ts","sourceRoot":"","sources":["../../codegen/ir_generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,YAAY,CAAa;gBAErB,UAAU,EAAE,MAAM;IAS9B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,GAAG,EAAE,CAAC,QAAQ;IA0B9C,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,YAAY;IAgHpB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,eAAe;IAoCvB,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,oBAAoB;IAwB5B,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,WAAW;CAiBpB"}
|