1
+ module Builder
2
+
1
3
// Imports
2
- import Buffer from "buffer"
3
- import List from "list"
4
- import Map from "map"
5
- import Int32 from "int32"
6
- import Stream from "./Stream"
7
- import DecodeSection, { getSectionStream } from "./Decoder/DecodeSection"
8
- import { decodeCount } from "./DecodeHelpers"
9
- import WasmDecoder from "./Decoder/WasmDecoder"
10
- import Encoder from "./encode"
11
- import { impossibleErr } from "./Errors"
12
- // Type Imports
13
- import DecodeFile from "./Decoder/DecodeFile"
4
+ include "buffer"
5
+ include "list"
6
+ include "map"
7
+ include "int32"
8
+ include "./Stream"
9
+ include "./Decoder/decodeSection"
10
+ include "./Decoder/DecodeFile"
11
+ include "./DecodeHelpers"
12
+ include "./Decoder/WasmDecoder"
13
+ include "./Encoder"
14
+ include "./Errors"
15
+ from DecodeSection use { getSectionStream }
16
+ from DecodeHelpers use { decodeCount }
17
+ from Errors use { impossibleErr }
14
18
// WasmBinary Type
15
- record WasmBinary {
19
+ provide record WasmBinary {
16
20
// Naming Data
17
21
mut moduleName: String,
18
22
mut funcNames: List<(Number, String)>,
@@ -35,7 +39,7 @@ record WasmBinary {
35
39
mut dataSection: List<Buffer.Buffer>, // dataSection[]
36
40
}
37
41
// Types
38
- record WasmData {
42
+ provide record WasmData {
39
43
mut globalCount: Number,
40
44
mut typeCount: Number,
41
45
mut funcCount: Number,
@@ -51,7 +55,7 @@ let listToBuffer = byteList => {
51
55
buffer
52
56
}
53
57
// Create The Sections
54
- export let createCustomSection = (wasmBinary, dependencyChain, wasmData) => {
58
+ provide let createCustomSection = (wasmBinary, dependencyChain, wasmData) => {
55
59
List.forEachi((dependency: DecodeFile.FileData, index) => {
56
60
// Get The Custom Sections
57
61
List.forEach(wasmSection => {
@@ -176,7 +180,7 @@ export let createCustomSection = (wasmBinary, dependencyChain, wasmData) => {
176
180
}, dependency.wasmSections)
177
181
}, dependencyChain)
178
182
}
179
- export let createTypeSection = (wasmBinary, dependencyChain, wasmData) => {
183
+ provide let createTypeSection = (wasmBinary, dependencyChain, wasmData) => {
180
184
List.forEach((dependency: DecodeFile.FileData) => {
181
185
// TODO: Consider Merging Duplicate Types
182
186
// Get The Type Section
@@ -195,7 +199,7 @@ export let createTypeSection = (wasmBinary, dependencyChain, wasmData) => {
195
199
}
196
200
}, dependencyChain)
197
201
}
198
- export let createImportSection = (wasmBinary, dependencyChain, wasmData) => {
202
+ provide let createImportSection = (wasmBinary, dependencyChain, wasmData) => {
199
203
List.forEach((dependency: DecodeFile.FileData) => {
200
204
// Create local Counts
201
205
let mut localFunctionCount = 0
@@ -264,7 +268,7 @@ export let createImportSection = (wasmBinary, dependencyChain, wasmData) => {
264
268
}, List.reverse(dependency.wasmImports))
265
269
}, List.reverse(dependencyChain))
266
270
}
267
- export let createFuncSection = (wasmBinary, dependencyChain, wasmData) => {
271
+ provide let createFuncSection = (wasmBinary, dependencyChain, wasmData) => {
268
272
List.forEach((dependency: DecodeFile.FileData) => {
269
273
// Get The Function Section
270
274
let funcStream = getSectionStream(0x03, dependency.wasmSections)
@@ -336,7 +340,7 @@ export let createFuncSection = (wasmBinary, dependencyChain, wasmData) => {
336
340
wasmBinary.funcSection = List.append(wasmBinary.funcSection, functions)
337
341
}, dependencyChain)
338
342
}
339
- export let createTableSection = (wasmBinary, dependencyChain, wasmData) => {
343
+ provide let createTableSection = (wasmBinary, dependencyChain, wasmData) => {
340
344
// TODO: Once wasm supports multiple tables allocate a table per dependency
341
345
let mut initialTableSize = 0
342
346
List.forEach((dependency: DecodeFile.FileData) => {
@@ -352,7 +356,7 @@ export let createTableSection = (wasmBinary, dependencyChain, wasmData) => {
352
356
)
353
357
wasmBinary.tableSection = [table, ...wasmBinary.tableSection]
354
358
}
355
- export let createMemorySection = (wasmBinary, dependencyChain, wasmData) => {
359
+ provide let createMemorySection = (wasmBinary, dependencyChain, wasmData) => {
356
360
// TODO: Once wasm supports multiple memories consider using a separate memory per dependency
357
361
if (!wasmBinary.hasMemoryImport) {
358
362
let mut initialMemorySize = 0
@@ -369,7 +373,7 @@ export let createMemorySection = (wasmBinary, dependencyChain, wasmData) => {
369
373
]
370
374
}
371
375
}
372
- export let createGlobalSection = (wasmBinary, dependencyChain, wasmData) => {
376
+ provide let createGlobalSection = (wasmBinary, dependencyChain, wasmData) => {
373
377
// Map Deps
374
378
List.forEach((dependency: DecodeFile.FileData) => {
375
379
// Get The Type Section
@@ -444,7 +448,7 @@ export let createGlobalSection = (wasmBinary, dependencyChain, wasmData) => {
444
448
]
445
449
}, dependencyChain)
446
450
}
447
- export let createExportSection = (wasmBinary, dependencyChain, wasmData) => {
451
+ provide let createExportSection = (wasmBinary, dependencyChain, wasmData) => {
448
452
List.forEach((dependency: DecodeFile.FileData) => {
449
453
List.forEach((wasmExport: WasmDecoder.WasmExport) => {
450
454
if (!wasmExport.briskExport && dependency.isEntry) {
@@ -482,7 +486,7 @@ export let createExportSection = (wasmBinary, dependencyChain, wasmData) => {
482
486
}, dependency.wasmExports)
483
487
}, dependencyChain)
484
488
}
485
- export let createStartSection = (wasmBinary, dependencyChain, wasmData) => {
489
+ provide let createStartSection = (wasmBinary, dependencyChain, wasmData) => {
486
490
// Create The Dependency Map
487
491
let dependencyMap = Map.fromList(
488
492
List.map((dep: DecodeFile.FileData) =>
@@ -624,7 +628,7 @@ export let createStartSection = (wasmBinary, dependencyChain, wasmData) => {
624
628
// Export Start
625
629
wasmBinary.exportSection = [startExport, ...wasmBinary.exportSection]
626
630
}
627
- export let createElementSection = (wasmBinary, dependencyChain, wasmData) => {
631
+ provide let createElementSection = (wasmBinary, dependencyChain, wasmData) => {
628
632
let mut elementOffset = 0
629
633
List.forEach((dependency: DecodeFile.FileData) => {
630
634
// Get The Element Section
@@ -675,14 +679,14 @@ export let createElementSection = (wasmBinary, dependencyChain, wasmData) => {
675
679
})
676
680
}, dependencyChain)
677
681
}
678
- export let createDataSection = (wasmBinary, dependencyChain, wasmData) => {
682
+ provide let createDataSection = (wasmBinary, dependencyChain, wasmData) => {
679
683
// TODO: Create Data Section
680
684
// TODO: Create Data Count Section
681
685
// Return The Buffer
682
686
wasmBinary
683
687
}
684
688
// Rebuild WasmBinary
685
- export let buildBinary = wasmBinaryContent => {
689
+ provide let buildBinary = wasmBinaryContent => {
686
690
// Helpers
687
691
let encodeSection = (sectionID, sectionContent) => {
688
692
let sectionBuffer = listToBuffer(
@@ -865,7 +869,7 @@ export let buildBinary = wasmBinaryContent => {
865
869
wasmBinary
866
870
}
867
871
// Build The File
868
- export let buildFile = dependencyChain => {
872
+ provide let buildFile = dependencyChain => {
869
873
// Create Wasm Data
870
874
let wasmData = { globalCount: 0, typeCount: 0, funcCount: 0 }
871
875
// Create The Wasm Binary Content
0 commit comments