summaryrefslogtreecommitdiff
path: root/scripts/wasm2js.js
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/wasm2js.js')
-rw-r--r--scripts/wasm2js.js97
1 files changed, 97 insertions, 0 deletions
diff --git a/scripts/wasm2js.js b/scripts/wasm2js.js
new file mode 100644
index 000000000..fe619f5f3
--- /dev/null
+++ b/scripts/wasm2js.js
@@ -0,0 +1,97 @@
+// wasm2js.js - enough of a polyfill for the WebAssembly object so that we can load
+// wasm2js code that way. Similar to the same file in emscripten, but tailored for
+// fuzzing purposes here.
+
+var WebAssembly = {
+ Memory: function(opts) {
+ return {
+ buffer: new ArrayBuffer(opts['initial'] * 64 * 1024),
+ grow: function(amount) {
+ var oldBuffer = this.buffer;
+ var ret = __growWasmMemory(amount);
+ assert(this.buffer !== oldBuffer); // the call should have updated us
+ return ret;
+ }
+ };
+ },
+
+ Table: function(opts) {
+ var ret = new Array(opts['initial']);
+ ret.grow = function(by) {
+ ret.push(null);
+ };
+ ret.set = function(i, func) {
+ ret[i] = func;
+ };
+ ret.get = function(i) {
+ return ret[i];
+ };
+ return ret;
+ },
+
+ Module: function(binary) {
+ // TODO: use the binary and info somehow - right now the wasm2js output is embedded in
+ // the main JS
+ return {};
+ },
+
+ Instance: function(module, info) {
+ // TODO: use the module and info somehow - right now the wasm2js output is embedded in
+ // the main JS
+ var decodeBase64 = typeof atob === 'function' ? atob : function (input) {
+ var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+ var output = '';
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+ // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
+ do {
+ enc1 = keyStr.indexOf(input.charAt(i++));
+ enc2 = keyStr.indexOf(input.charAt(i++));
+ enc3 = keyStr.indexOf(input.charAt(i++));
+ enc4 = keyStr.indexOf(input.charAt(i++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ output = output + String.fromCharCode(chr1);
+
+ if (enc3 !== 64) {
+ output = output + String.fromCharCode(chr2);
+ }
+ if (enc4 !== 64) {
+ output = output + String.fromCharCode(chr3);
+ }
+ } while (i < input.length);
+ return output;
+ };
+ var atob = decodeBase64;
+ // Additional imports
+ asmLibraryArg['__tempMemory__'] = 0; // risky!
+ // This will be replaced by the actual wasm2js code.
+ var exports = instantiate(asmLibraryArg, wasmMemory, wasmTable);
+ return {
+ 'exports': exports
+ };
+ },
+
+ instantiate: function(binary, info) {
+ return {
+ then: function(ok, err) {
+ ok({
+ 'instance': new WebAssembly.Instance(new WebAssembly.Module(binary, info))
+ });
+ }
+ };
+ }
+};
+
+var asmLibraryArg = {
+};
+
+var wasmMemory = new WebAssembly.Memory({ initial: 1 });
+var wasmTable = new WebAssembly.Table({ initial: 1 });
+