@@ -12,9 +12,8 @@ for (const basename of fs.readdirSync(artifactDir)) {
1212 }
1313
1414 const blob = fs . readFileSync ( file ) ;
15- fs . writeFileSync (
16- `${ file } .js` ,
17- `// generated from ${ basename }
15+
16+ const source = `// generated from ${ basename }
1817"use strict";
1918
2019var base64 = require("base64-js");
@@ -25,14 +24,26 @@ var wasmModule = new WebAssembly.Module(
2524);
2625var wasmInstance = new WebAssembly.Instance(wasmModule, {
2726 env: {
28- abort: function (filename, line, column) {
29- // FIXME: filename is just a number (pointer?)
30- throw new Error("abort called at " + filename + ":" + line + ":" + column);
31- },
27+ abort: abort,
3228 },
3329});
3430
31+ // from getStringImpl() in AssemblyScript/lib/loader/index.js
32+ function getString(ptr) {
33+ const buffer = wasmInstance.exports.memory.buffer;
34+ var u32 = new Uint32Array(buffer);
35+ var u16 = new Uint16Array(buffer);
36+ var offset = (ptr + 4) >>> 1;
37+ var length = u32[ptr >>> 2];
38+ return String.fromCharCode(...u16.subarray(offset, offset + length))
39+ }
40+
41+ function abort(message, filename, line, column) {
42+ throw new Error("abort: " + getString(message) + " at " + getString(filename) + ":" + line + ":" + column);
43+ }
44+
3545module.exports = wasmInstance.exports;
36- ` ,
37- ) ;
46+ ` ;
47+
48+ fs . writeFileSync ( `${ file } .js` , source ) ;
3849}
0 commit comments