Skip to content

Commit d3d4938

Browse files
committed
Progress
1 parent d1c1178 commit d3d4938

17 files changed

Lines changed: 548 additions & 271 deletions

package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
},
1313
"dependencies": {
1414
"@types/node": "^8.0.28",
15-
"binaryen": "37.0.0-nightly.20170912"
15+
"binaryen": "39.0.0-nightly.20171116"
16+
},
17+
"scripts": {
18+
"build": "tsc -P src",
19+
"test:compiler": "ts-node -P src tests/compiler"
1620
}
1721
}

src/ast.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,7 +1091,7 @@ export class Source extends Node {
10911091
tokenizer: Tokenizer | null = null;
10921092
isEntry: bool;
10931093

1094-
constructor(path: string, text: string, isEntry: bool) {
1094+
constructor(path: string, text: string, isEntry: bool = false) {
10951095
super();
10961096
this.path = path;
10971097
this.normalizedPath = normalizePath(path, true);
@@ -1392,6 +1392,7 @@ export class ExpressionStatement extends Statement {
13921392

13931393
serialize(sb: string[]): void {
13941394
this.expression.serialize(sb);
1395+
sb.push(";");
13951396
}
13961397
}
13971398

@@ -1773,6 +1774,7 @@ export class ThrowStatement extends Statement {
17731774
serialize(sb: string[]): void {
17741775
sb.push("throw ");
17751776
this.expression.serialize(sb);
1777+
sb.push(";");
17761778
}
17771779
}
17781780

@@ -1895,10 +1897,11 @@ export function serialize(node: Node, indent: i32 = 0): string {
18951897
}
18961898

18971899
export function mangleInternalPath(path: string): string {
1898-
if (PATH_DELIMITER.charCodeAt(0) != CharCode.SLASH)
1900+
// TODO: not necessary with current config
1901+
/* if (PATH_DELIMITER.charCodeAt(0) != CharCode.SLASH)
18991902
path = path.replace("/", PATH_DELIMITER);
19001903
if (PARENT_SUBST != "..")
1901-
path = path.replace("..", PARENT_SUBST);
1904+
path = path.replace("..", PARENT_SUBST); */
19021905
return path;
19031906
}
19041907

src/binaryen.d.ts

Lines changed: 65 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ declare function _free(ptr: usize): void;
1515

1616
declare type BinaryenIndex = u32;
1717

18-
declare type BinaryenType = u32;
18+
declare type BinaryenType = i32;
1919

2020
declare function _BinaryenNone(): BinaryenType;
2121
declare function _BinaryenInt32(): BinaryenType;
@@ -24,6 +24,37 @@ declare function _BinaryenFloat32(): BinaryenType;
2424
declare function _BinaryenFloat64(): BinaryenType;
2525
declare function _BinaryenUndefined(): BinaryenType;
2626

27+
declare type BinaryenExpressionId = i32;
28+
29+
declare function _BinaryenInvalidId(): BinaryenExpressionId;
30+
declare function _BinaryenBlockId(): BinaryenExpressionId;
31+
declare function _BinaryenIfId(): BinaryenExpressionId;
32+
declare function _BinaryenLoopId(): BinaryenExpressionId;
33+
declare function _BinaryenBreakId(): BinaryenExpressionId;
34+
declare function _BinaryenSwitchId(): BinaryenExpressionId;
35+
declare function _BinaryenCallId(): BinaryenExpressionId;
36+
declare function _BinaryenCallImportId(): BinaryenExpressionId;
37+
declare function _BinaryenCallIndirectId(): BinaryenExpressionId;
38+
declare function _BinaryenGetLocalId(): BinaryenExpressionId;
39+
declare function _BinaryenSetLocalId(): BinaryenExpressionId;
40+
declare function _BinaryenGetGlobalId(): BinaryenExpressionId;
41+
declare function _BinaryenSetGlobalId(): BinaryenExpressionId;
42+
declare function _BinaryenLoadId(): BinaryenExpressionId;
43+
declare function _BinaryenStoreId(): BinaryenExpressionId;
44+
declare function _BinaryenConstId(): BinaryenExpressionId;
45+
declare function _BinaryenUnaryId(): BinaryenExpressionId;
46+
declare function _BinaryenBinaryId(): BinaryenExpressionId;
47+
declare function _BinaryenSelectId(): BinaryenExpressionId;
48+
declare function _BinaryenDropId(): BinaryenExpressionId;
49+
declare function _BinaryenReturnId(): BinaryenExpressionId;
50+
declare function _BinaryenHostId(): BinaryenExpressionId;
51+
declare function _BinaryenNopId(): BinaryenExpressionId;
52+
declare function _BinaryenUnreachableId(): BinaryenExpressionId;
53+
declare function _BinaryenAtomicCmpxchgId(): BinaryenExpressionId;
54+
declare function _BinaryenAtomicRMWId(): BinaryenExpressionId;
55+
declare function _BinaryenAtomicWaitId(): BinaryenExpressionId;
56+
declare function _BinaryenAtomicWakeId(): BinaryenExpressionId;
57+
2758
declare type BinaryenModuleRef = usize;
2859

2960
declare function _BinaryenModuleCreate(): BinaryenModuleRef;
@@ -34,10 +65,11 @@ declare type CString = usize;
3465
declare type CArray<T> = usize;
3566

3667
declare function _BinaryenAddFunctionType(module: BinaryenModuleRef, name: CString, result: BinaryenType, paramTypes: CArray<BinaryenType>, numParams: BinaryenIndex): BinaryenFunctionTypeRef;
68+
declare function _BinaryenGetFunctionTypeBySignature(module: BinaryenModuleRef, result: BinaryenType, paramTypes: CArray<BinaryenType>, numParams: BinaryenIndex): BinaryenFunctionTypeRef;
3769

3870
declare type BinaryenLiteral = CArray<u8>;
3971

40-
// LLVM C ABI with `out` being a buffer of 16 bytes receiving the BinaryenLiteral struct
72+
// LLVM C ABI with `out` being a buffer of 16 bytes receiving the BinaryenLiteral struct.
4173
// union value starts at offset 8 due to alignment (?)
4274
declare function _BinaryenLiteralInt32(out: BinaryenLiteral, x: i32): void;
4375
declare function _BinaryenLiteralInt64(out: BinaryenLiteral, x: i32, y: i32): void;
@@ -171,10 +203,22 @@ declare function _BinaryenLtFloat64(): BinaryenOp;
171203
declare function _BinaryenLeFloat64(): BinaryenOp;
172204
declare function _BinaryenGtFloat64(): BinaryenOp;
173205
declare function _BinaryenGeFloat64(): BinaryenOp;
174-
declare function _BinaryenPageSize(): BinaryenOp;
175-
declare function _BinaryenCurrentMemory(): BinaryenOp;
176-
declare function _BinaryenGrowMemory(): BinaryenOp;
177-
declare function _BinaryenHasFeature(): BinaryenOp;
206+
207+
declare type BinaryenHostOp = BinaryenOp;
208+
209+
declare function _BinaryenPageSize(): BinaryenHostOp;
210+
declare function _BinaryenCurrentMemory(): BinaryenHostOp;
211+
declare function _BinaryenGrowMemory(): BinaryenHostOp;
212+
declare function _BinaryenHasFeature(): BinaryenHostOp;
213+
214+
declare type BinaryenAtomicRMWOp = BinaryenOp;
215+
216+
declare function _BinaryenAtomicRMWAdd(): BinaryenAtomicRMWOp;
217+
declare function _BinaryenAtomicRMWSub(): BinaryenAtomicRMWOp;
218+
declare function _BinaryenAtomicRMWAnd(): BinaryenAtomicRMWOp;
219+
declare function _BinaryenAtomicRMWOr(): BinaryenAtomicRMWOp;
220+
declare function _BinaryenAtomicRMWXor(): BinaryenAtomicRMWOp;
221+
declare function _BinaryenAtomicRMWXchg(): BinaryenAtomicRMWOp;
178222

179223
declare type BinaryenExpressionRef = usize;
180224

@@ -202,8 +246,19 @@ declare function _BinaryenReturn(module: BinaryenModuleRef, value: BinaryenExpre
202246
declare function _BinaryenHost(module: BinaryenModuleRef, op: BinaryenOp, name: CString | 0, operands: CArray<BinaryenExpressionRef>, numOperands: BinaryenIndex): BinaryenExpressionRef;
203247
declare function _BinaryenNop(module: BinaryenModuleRef): BinaryenExpressionRef;
204248
declare function _BinaryenUnreachable(module: BinaryenModuleRef): BinaryenExpressionRef;
249+
declare function _BinaryenAtomicRMW(module: BinaryenModuleRef, op: BinaryenAtomicRMWOp, bytes: i32, offset: i32, ptr: BinaryenExpressionRef, value: BinaryenExpressionRef, type: BinaryenType): BinaryenExpressionRef;
250+
declare function _BinaryenAtomicCmpxchg(module: BinaryenModuleRef, bytes: i32, offset: i32, ptr: BinaryenExpressionRef, expected: BinaryenExpressionRef, replacement: BinaryenExpressionRef, type: BinaryenType): BinaryenExpressionRef;
251+
declare function _BinaryenAtomicWait(module: BinaryenModuleRef, ptr: BinaryenExpressionRef, expected: BinaryenExpressionRef, timeout: BinaryenExpressionRef, expectedType: BinaryenType): BinaryenExpressionRef;
252+
declare function _BinaryenAtomicWake(module: BinaryenModuleRef, ptr: BinaryenExpressionRef, wakeCount: BinaryenExpressionRef): BinaryenExpressionRef;
205253

254+
declare function _BinaryenExpressionGetId(expr: BinaryenExpressionRef): BinaryenExpressionId;
255+
declare function _BinaryenExpressionGetType(expr: BinaryenExpressionRef): BinaryenType;
206256
declare function _BinaryenExpressionPrint(expr: BinaryenExpressionRef): void;
257+
declare function _BinaryenConstGetValueI32(expr: BinaryenExpressionRef): i32;
258+
declare function _BinaryenConstGetValueI64Low(expr: BinaryenExpressionRef): i32;
259+
declare function _BinaryenConstGetValueI64High(expr: BinaryenExpressionRef): i32;
260+
declare function _BinaryenConstGetValueF32(expr: BinaryenExpressionRef): f32;
261+
declare function _BinaryenConstGetValueF64(expr: BinaryenExpressionRef): f64;
207262

208263
declare type BinaryenFunctionRef = usize;
209264

@@ -219,7 +274,9 @@ declare type BinaryenExportRef = usize;
219274
declare function _BinaryenAddExport(module: BinaryenModuleRef, internalName: CString, externalName: CString): BinaryenExportRef;
220275
declare function _BinaryenRemoveExport(module: BinaryenModuleRef, externalName: CString): void;
221276

222-
declare function _BinaryenAddGlobal(module: BinaryenModuleRef, name: CString, type: BinaryenType, mutable: i8, init: BinaryenExpressionRef): BinaryenImportRef; // sic
277+
declare type BinaryenGlobalRef = usize;
278+
279+
declare function _BinaryenAddGlobal(module: BinaryenModuleRef, name: CString, type: BinaryenType, mutable: i8, init: BinaryenExpressionRef): BinaryenGlobalRef;
223280

224281
declare function _BinaryenSetFunctionTable(module: BinaryenModuleRef, funcs: CArray<BinaryenFunctionRef>, numFuncs: BinaryenIndex): void;
225282

@@ -232,6 +289,7 @@ declare function _BinaryenModulePrint(module: BinaryenModuleRef): void;
232289
declare function _BinaryenModulePrintAsmjs(module: BinaryenModuleRef): void;
233290
declare function _BinaryenModuleValidate(module: BinaryenModuleRef): i32;
234291
declare function _BinaryenModuleOptimize(module: BinaryenModuleRef): void;
292+
declare function _BinaryenModuleRunPasses(module: BinaryenModuleRef, passes: string[]): void;
235293
declare function _BinaryenModuleAutoDrop(module: BinaryenModuleRef): void;
236294
declare function _BinaryenModuleWrite(module: BinaryenModuleRef, output: CString, outputSize: usize): usize;
237295
declare function _BinaryenModuleRead(input: CString, inputSize: usize): BinaryenModuleRef;
@@ -248,5 +306,3 @@ declare function _RelooperAddBranchForSwitch(from: RelooperBlockRef, to: Reloope
248306
declare function _RelooperRenderAndDispose(relooper: RelooperRef, entry: RelooperBlockRef, labelHelper: BinaryenIndex, module: BinaryenModuleRef): BinaryenExpressionRef;
249307

250308
declare function _BinaryenSetAPITracing(on: i32): void;
251-
252-
declare function _BinaryenGetFunctionTypeBySignature(module: BinaryenModuleRef, result: BinaryenType, paramTypes: CArray<BinaryenType>, numParams: BinaryenIndex): BinaryenFunctionTypeRef;

0 commit comments

Comments
 (0)