2017-09-29 17:25:02 +02:00
|
|
|
import "../src/glue/js";
|
|
|
|
import { Compiler } from "../src/compiler";
|
|
|
|
import { Parser } from "../src/parser";
|
|
|
|
|
2017-10-07 14:29:43 +02:00
|
|
|
/* const files: Map<string,string> = new Map([
|
2017-10-02 12:52:15 +02:00
|
|
|
["main", `import { Test as TestAlias } from "./a"; export { TestAlias } from "./d"; if (1) {} export const a: i32 = 123;`],
|
2017-09-29 17:25:02 +02:00
|
|
|
["a", `export { Test } from "./b";`],
|
|
|
|
["b", `export { Test } from "./c";`],
|
2017-10-07 14:29:43 +02:00
|
|
|
["c", `export enum Test { ONE = 1, TWO = 1 + 1 }`],
|
2017-09-29 17:25:02 +02:00
|
|
|
["d", `export { Test as TestAlias } from "./b";`]
|
2017-10-07 14:29:43 +02:00
|
|
|
]); */
|
|
|
|
|
|
|
|
const files: Map<string,string> = new Map([
|
2017-10-11 17:03:22 +02:00
|
|
|
["main",
|
|
|
|
`
|
|
|
|
function add(a: i32, b: i32): i32 { return a + b; };
|
|
|
|
export { add };
|
|
|
|
export { sub as notadd } from "../other";
|
|
|
|
2+3;
|
|
|
|
export function switchMe(n: i32): i32 {
|
|
|
|
switch (n) {
|
|
|
|
case 0:
|
|
|
|
return 0;
|
|
|
|
default:
|
|
|
|
return 2;
|
|
|
|
case 1:
|
|
|
|
return 1;
|
|
|
|
case -1:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
2017-11-17 14:33:51 +01:00
|
|
|
import { sub } from "../other";
|
|
|
|
export function what(): void {
|
|
|
|
sub(1,2);
|
|
|
|
}
|
2017-10-11 17:03:22 +02:00
|
|
|
`],
|
|
|
|
|
|
|
|
["../other",
|
|
|
|
`
|
|
|
|
export function sub(a: i32, b: i32): i32 { return a - b + c; };
|
|
|
|
let c: i32 = 42 >> 31;
|
|
|
|
1+2;
|
|
|
|
`]
|
2017-09-29 17:25:02 +02:00
|
|
|
]);
|
|
|
|
|
|
|
|
const parser = new Parser();
|
2017-10-11 17:03:22 +02:00
|
|
|
|
2017-09-29 17:25:02 +02:00
|
|
|
parser.parseFile(<string>files.get("main"), "main", true);
|
|
|
|
do {
|
|
|
|
let nextFile = parser.nextFile();
|
|
|
|
if (!nextFile)
|
|
|
|
break;
|
|
|
|
if (!files.has(nextFile))
|
|
|
|
throw new Error("file not found: " + nextFile);
|
|
|
|
parser.parseFile(<string>files.get(nextFile), nextFile, false);
|
|
|
|
} while(true);
|
|
|
|
const program = parser.finish();
|
|
|
|
const compiler = new Compiler(program);
|
|
|
|
const module = compiler.compile();
|
2017-11-17 14:33:51 +01:00
|
|
|
console.log(program.elements.keys());
|
2017-09-29 17:25:02 +02:00
|
|
|
|
2017-10-11 17:03:22 +02:00
|
|
|
// module.optimize();
|
|
|
|
module.validate();
|
2017-10-07 14:29:43 +02:00
|
|
|
if (!module.noEmit)
|
|
|
|
_BinaryenModulePrint(module.ref);
|