Created
January 27, 2020 21:25
-
-
Save kripken/2247259feedf7414e127f0e94c9291b6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/test/wasm2js/dynamicLibrary.2asm.js b/test/wasm2js/dynamicLibrary.2asm.js | |
index 98332dead..9666eb5ae 100644 | |
--- a/test/wasm2js/dynamicLibrary.2asm.js | |
+++ b/test/wasm2js/dynamicLibrary.2asm.js | |
@@ -50,23 +50,27 @@ function asmFunc(global, env, buffer) { | |
} | |
var memasmFunc = new ArrayBuffer(16777216); | |
-var assignasmFunc = ( | |
- function(mem) { | |
- var _mem = new Uint8Array(mem); | |
- return function(offset, s) { | |
- var bytes, i; | |
- if (typeof Buffer === 'undefined') { | |
- bytes = atob(s); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes.charCodeAt(i); | |
- } else { | |
- bytes = Buffer.from(s, 'base64'); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes[i]; | |
- } | |
- } | |
+for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { | |
+ base64ReverseLookup[48+i] = 52+i; // '0-9' | |
+ base64ReverseLookup[65+i] = i; // 'A-Z' | |
+ base64ReverseLookup[97+i] = 26+i; // 'a-z' | |
+ } | |
+ base64ReverseLookup[43] = 62; // '+' | |
+ base64ReverseLookup[47] = 63; // '/' | |
+ /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ | |
+ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { | |
+ var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2); | |
+ if (b64[bLength-2] == '=') --end; | |
+ if (b64[bLength-1] == '=') --end; | |
+ for (; i < bLength; i += 4, j += 3) { | |
+ b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; | |
+ b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; | |
+ uint8Array[j] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; | |
+ if (j+1 < end) uint8Array[j+1] = b1 << 4 | b2 >> 2; | |
+ if (j+2 < end) uint8Array[j+2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; | |
} | |
- )(memasmFunc); | |
-assignasmFunc(memoryBase, "ZHluYW1pYyBkYXRh"); | |
+ } | |
+var bufferView = new Uint8Array(memasmFunc); | |
+base64DecodeToExistingUint8Array(bufferView, memoryBase, "ZHluYW1pYyBkYXRh"); | |
var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc); | |
export var baz = retasmFunc.baz; | |
diff --git a/test/wasm2js/dynamicLibrary.2asm.js.opt b/test/wasm2js/dynamicLibrary.2asm.js.opt | |
index 61669987f..28c547fb4 100644 | |
--- a/test/wasm2js/dynamicLibrary.2asm.js.opt | |
+++ b/test/wasm2js/dynamicLibrary.2asm.js.opt | |
@@ -42,23 +42,27 @@ function asmFunc(global, env, buffer) { | |
} | |
var memasmFunc = new ArrayBuffer(16777216); | |
-var assignasmFunc = ( | |
- function(mem) { | |
- var _mem = new Uint8Array(mem); | |
- return function(offset, s) { | |
- var bytes, i; | |
- if (typeof Buffer === 'undefined') { | |
- bytes = atob(s); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes.charCodeAt(i); | |
- } else { | |
- bytes = Buffer.from(s, 'base64'); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes[i]; | |
- } | |
- } | |
+for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { | |
+ base64ReverseLookup[48+i] = 52+i; // '0-9' | |
+ base64ReverseLookup[65+i] = i; // 'A-Z' | |
+ base64ReverseLookup[97+i] = 26+i; // 'a-z' | |
+ } | |
+ base64ReverseLookup[43] = 62; // '+' | |
+ base64ReverseLookup[47] = 63; // '/' | |
+ /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ | |
+ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { | |
+ var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2); | |
+ if (b64[bLength-2] == '=') --end; | |
+ if (b64[bLength-1] == '=') --end; | |
+ for (; i < bLength; i += 4, j += 3) { | |
+ b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; | |
+ b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; | |
+ uint8Array[j] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; | |
+ if (j+1 < end) uint8Array[j+1] = b1 << 4 | b2 >> 2; | |
+ if (j+2 < end) uint8Array[j+2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; | |
} | |
- )(memasmFunc); | |
-assignasmFunc(memoryBase, "ZHluYW1pYyBkYXRh"); | |
+ } | |
+var bufferView = new Uint8Array(memasmFunc); | |
+base64DecodeToExistingUint8Array(bufferView, memoryBase, "ZHluYW1pYyBkYXRh"); | |
var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc); | |
export var baz = retasmFunc.baz; | |
diff --git a/test/wasm2js/emscripten-grow-no.2asm.js b/test/wasm2js/emscripten-grow-no.2asm.js | |
index 92a99dfb7..d01645368 100644 | |
--- a/test/wasm2js/emscripten-grow-no.2asm.js | |
+++ b/test/wasm2js/emscripten-grow-no.2asm.js | |
@@ -44,24 +44,28 @@ function asmFunc(global, env, buffer) { | |
}; | |
} | |
-var writeSegment = ( | |
- function(mem) { | |
- var _mem = new Uint8Array(mem); | |
- return function(offset, s) { | |
- var bytes, i; | |
- if (typeof Buffer === 'undefined') { | |
- bytes = atob(s); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes.charCodeAt(i); | |
- } else { | |
- bytes = Buffer.from(s, 'base64'); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes[i]; | |
- } | |
- } | |
+for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { | |
+ base64ReverseLookup[48+i] = 52+i; // '0-9' | |
+ base64ReverseLookup[65+i] = i; // 'A-Z' | |
+ base64ReverseLookup[97+i] = 26+i; // 'a-z' | |
+ } | |
+ base64ReverseLookup[43] = 62; // '+' | |
+ base64ReverseLookup[47] = 63; // '/' | |
+ /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ | |
+ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { | |
+ var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2); | |
+ if (b64[bLength-2] == '=') --end; | |
+ if (b64[bLength-1] == '=') --end; | |
+ for (; i < bLength; i += 4, j += 3) { | |
+ b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; | |
+ b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; | |
+ uint8Array[j] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; | |
+ if (j+1 < end) uint8Array[j+1] = b1 << 4 | b2 >> 2; | |
+ if (j+2 < end) uint8Array[j+2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; | |
} | |
- )(wasmMemory.buffer); | |
-writeSegment(1600, "YWJj"); | |
+ } | |
+var bufferView = new Uint8Array(wasmMemory.buffer); | |
+base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); | |
return asmFunc({ | |
'Int8Array': Int8Array, | |
'Int16Array': Int16Array, | |
diff --git a/test/wasm2js/emscripten-grow-no.2asm.js.opt b/test/wasm2js/emscripten-grow-no.2asm.js.opt | |
index 92a99dfb7..d01645368 100644 | |
--- a/test/wasm2js/emscripten-grow-no.2asm.js.opt | |
+++ b/test/wasm2js/emscripten-grow-no.2asm.js.opt | |
@@ -44,24 +44,28 @@ function asmFunc(global, env, buffer) { | |
}; | |
} | |
-var writeSegment = ( | |
- function(mem) { | |
- var _mem = new Uint8Array(mem); | |
- return function(offset, s) { | |
- var bytes, i; | |
- if (typeof Buffer === 'undefined') { | |
- bytes = atob(s); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes.charCodeAt(i); | |
- } else { | |
- bytes = Buffer.from(s, 'base64'); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes[i]; | |
- } | |
- } | |
+for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { | |
+ base64ReverseLookup[48+i] = 52+i; // '0-9' | |
+ base64ReverseLookup[65+i] = i; // 'A-Z' | |
+ base64ReverseLookup[97+i] = 26+i; // 'a-z' | |
+ } | |
+ base64ReverseLookup[43] = 62; // '+' | |
+ base64ReverseLookup[47] = 63; // '/' | |
+ /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ | |
+ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { | |
+ var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2); | |
+ if (b64[bLength-2] == '=') --end; | |
+ if (b64[bLength-1] == '=') --end; | |
+ for (; i < bLength; i += 4, j += 3) { | |
+ b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; | |
+ b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; | |
+ uint8Array[j] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; | |
+ if (j+1 < end) uint8Array[j+1] = b1 << 4 | b2 >> 2; | |
+ if (j+2 < end) uint8Array[j+2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; | |
} | |
- )(wasmMemory.buffer); | |
-writeSegment(1600, "YWJj"); | |
+ } | |
+var bufferView = new Uint8Array(wasmMemory.buffer); | |
+base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); | |
return asmFunc({ | |
'Int8Array': Int8Array, | |
'Int16Array': Int16Array, | |
diff --git a/test/wasm2js/emscripten-grow-yes.2asm.js b/test/wasm2js/emscripten-grow-yes.2asm.js | |
index 0f29bccde..ef1169ea4 100644 | |
--- a/test/wasm2js/emscripten-grow-yes.2asm.js | |
+++ b/test/wasm2js/emscripten-grow-yes.2asm.js | |
@@ -67,24 +67,28 @@ function asmFunc(global, env, buffer) { | |
}; | |
} | |
-var writeSegment = ( | |
- function(mem) { | |
- var _mem = new Uint8Array(mem); | |
- return function(offset, s) { | |
- var bytes, i; | |
- if (typeof Buffer === 'undefined') { | |
- bytes = atob(s); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes.charCodeAt(i); | |
- } else { | |
- bytes = Buffer.from(s, 'base64'); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes[i]; | |
- } | |
- } | |
+for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { | |
+ base64ReverseLookup[48+i] = 52+i; // '0-9' | |
+ base64ReverseLookup[65+i] = i; // 'A-Z' | |
+ base64ReverseLookup[97+i] = 26+i; // 'a-z' | |
+ } | |
+ base64ReverseLookup[43] = 62; // '+' | |
+ base64ReverseLookup[47] = 63; // '/' | |
+ /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ | |
+ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { | |
+ var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2); | |
+ if (b64[bLength-2] == '=') --end; | |
+ if (b64[bLength-1] == '=') --end; | |
+ for (; i < bLength; i += 4, j += 3) { | |
+ b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; | |
+ b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; | |
+ uint8Array[j] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; | |
+ if (j+1 < end) uint8Array[j+1] = b1 << 4 | b2 >> 2; | |
+ if (j+2 < end) uint8Array[j+2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; | |
} | |
- )(wasmMemory.buffer); | |
-writeSegment(1600, "YWJj"); | |
+ } | |
+var bufferView = new Uint8Array(wasmMemory.buffer); | |
+base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); | |
return asmFunc({ | |
'Int8Array': Int8Array, | |
'Int16Array': Int16Array, | |
diff --git a/test/wasm2js/emscripten-grow-yes.2asm.js.opt b/test/wasm2js/emscripten-grow-yes.2asm.js.opt | |
index 0f29bccde..ef1169ea4 100644 | |
--- a/test/wasm2js/emscripten-grow-yes.2asm.js.opt | |
+++ b/test/wasm2js/emscripten-grow-yes.2asm.js.opt | |
@@ -67,24 +67,28 @@ function asmFunc(global, env, buffer) { | |
}; | |
} | |
-var writeSegment = ( | |
- function(mem) { | |
- var _mem = new Uint8Array(mem); | |
- return function(offset, s) { | |
- var bytes, i; | |
- if (typeof Buffer === 'undefined') { | |
- bytes = atob(s); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes.charCodeAt(i); | |
- } else { | |
- bytes = Buffer.from(s, 'base64'); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes[i]; | |
- } | |
- } | |
+for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { | |
+ base64ReverseLookup[48+i] = 52+i; // '0-9' | |
+ base64ReverseLookup[65+i] = i; // 'A-Z' | |
+ base64ReverseLookup[97+i] = 26+i; // 'a-z' | |
+ } | |
+ base64ReverseLookup[43] = 62; // '+' | |
+ base64ReverseLookup[47] = 63; // '/' | |
+ /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ | |
+ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { | |
+ var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2); | |
+ if (b64[bLength-2] == '=') --end; | |
+ if (b64[bLength-1] == '=') --end; | |
+ for (; i < bLength; i += 4, j += 3) { | |
+ b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; | |
+ b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; | |
+ uint8Array[j] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; | |
+ if (j+1 < end) uint8Array[j+1] = b1 << 4 | b2 >> 2; | |
+ if (j+2 < end) uint8Array[j+2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; | |
} | |
- )(wasmMemory.buffer); | |
-writeSegment(1600, "YWJj"); | |
+ } | |
+var bufferView = new Uint8Array(wasmMemory.buffer); | |
+base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); | |
return asmFunc({ | |
'Int8Array': Int8Array, | |
'Int16Array': Int16Array, | |
diff --git a/test/wasm2js/emscripten.2asm.js b/test/wasm2js/emscripten.2asm.js | |
index fd9cbc607..ac03d032d 100644 | |
--- a/test/wasm2js/emscripten.2asm.js | |
+++ b/test/wasm2js/emscripten.2asm.js | |
@@ -202,25 +202,29 @@ function asmFunc(global, env, buffer) { | |
}; | |
} | |
-var writeSegment = ( | |
- function(mem) { | |
- var _mem = new Uint8Array(mem); | |
- return function(offset, s) { | |
- var bytes, i; | |
- if (typeof Buffer === 'undefined') { | |
- bytes = atob(s); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes.charCodeAt(i); | |
- } else { | |
- bytes = Buffer.from(s, 'base64'); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes[i]; | |
- } | |
- } | |
+for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { | |
+ base64ReverseLookup[48+i] = 52+i; // '0-9' | |
+ base64ReverseLookup[65+i] = i; // 'A-Z' | |
+ base64ReverseLookup[97+i] = 26+i; // 'a-z' | |
+ } | |
+ base64ReverseLookup[43] = 62; // '+' | |
+ base64ReverseLookup[47] = 63; // '/' | |
+ /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ | |
+ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { | |
+ var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2); | |
+ if (b64[bLength-2] == '=') --end; | |
+ if (b64[bLength-1] == '=') --end; | |
+ for (; i < bLength; i += 4, j += 3) { | |
+ b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; | |
+ b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; | |
+ uint8Array[j] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; | |
+ if (j+1 < end) uint8Array[j+1] = b1 << 4 | b2 >> 2; | |
+ if (j+2 < end) uint8Array[j+2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; | |
} | |
- )(wasmMemory.buffer); | |
-writeSegment(1024, "aGVsbG8sIHdvcmxkIQoAAJwMAAAtKyAgIDBYMHgAKG51bGwpAAAAAAAAAAAAAAAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGLTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAuAA=="); | |
-writeSegment(1600, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); | |
+ } | |
+var bufferView = new Uint8Array(wasmMemory.buffer); | |
+base64DecodeToExistingUint8Array(bufferView, 1024, "aGVsbG8sIHdvcmxkIQoAAJwMAAAtKyAgIDBYMHgAKG51bGwpAAAAAAAAAAAAAAAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGLTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAuAA=="); | |
+base64DecodeToExistingUint8Array(bufferView, 1600, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); | |
return asmFunc({ | |
'Int8Array': Int8Array, | |
'Int16Array': Int16Array, | |
diff --git a/test/wasm2js/emscripten.2asm.js.opt b/test/wasm2js/emscripten.2asm.js.opt | |
index 84e33bb6f..f554f869a 100644 | |
--- a/test/wasm2js/emscripten.2asm.js.opt | |
+++ b/test/wasm2js/emscripten.2asm.js.opt | |
@@ -183,37 +183,41 @@ function asmFunc(global, env, buffer) { | |
}; | |
} | |
-var writeSegment = ( | |
- function(mem) { | |
- var _mem = new Uint8Array(mem); | |
- return function(offset, s) { | |
- var bytes, i; | |
- if (typeof Buffer === 'undefined') { | |
- bytes = atob(s); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes.charCodeAt(i); | |
- } else { | |
- bytes = Buffer.from(s, 'base64'); | |
- for (i = 0; i < bytes.length; i++) | |
- _mem[offset + i] = bytes[i]; | |
- } | |
- } | |
+for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { | |
+ base64ReverseLookup[48+i] = 52+i; // '0-9' | |
+ base64ReverseLookup[65+i] = i; // 'A-Z' | |
+ base64ReverseLookup[97+i] = 26+i; // 'a-z' | |
+ } | |
+ base64ReverseLookup[43] = 62; // '+' | |
+ base64ReverseLookup[47] = 63; // '/' | |
+ /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ | |
+ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { | |
+ var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2); | |
+ if (b64[bLength-2] == '=') --end; | |
+ if (b64[bLength-1] == '=') --end; | |
+ for (; i < bLength; i += 4, j += 3) { | |
+ b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; | |
+ b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; | |
+ uint8Array[j] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; | |
+ if (j+1 < end) uint8Array[j+1] = b1 << 4 | b2 >> 2; | |
+ if (j+2 < end) uint8Array[j+2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; | |
} | |
- )(wasmMemory.buffer); | |
-writeSegment(1024, "aGVsbG8sIHdvcmxkIQoAAJwMAAAtKyAgIDBYMHgAKG51bGwp"); | |
-writeSegment(1072, "EQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAARERE="); | |
-writeSegment(1153, "CwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAAL"); | |
-writeSegment(1211, "DA=="); | |
-writeSegment(1223, "DAAAAAAMAAAAAAkMAAAAAAAMAAAM"); | |
-writeSegment(1269, "Dg=="); | |
-writeSegment(1281, "DQAAAAQNAAAAAAkOAAAAAAAOAAAO"); | |
-writeSegment(1327, "EA=="); | |
-writeSegment(1339, "DwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhIS"); | |
-writeSegment(1394, "EgAAABISEgAAAAAAAAk="); | |
-writeSegment(1443, "Cw=="); | |
-writeSegment(1455, "CgAAAAAKAAAAAAkLAAAAAAALAAAL"); | |
-writeSegment(1501, "DA=="); | |
-writeSegment(1513, "DAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGLTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAu"); | |
+ } | |
+var bufferView = new Uint8Array(wasmMemory.buffer); | |
+base64DecodeToExistingUint8Array(bufferView, 1024, "aGVsbG8sIHdvcmxkIQoAAJwMAAAtKyAgIDBYMHgAKG51bGwp"); | |
+base64DecodeToExistingUint8Array(bufferView, 1072, "EQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAARERE="); | |
+base64DecodeToExistingUint8Array(bufferView, 1153, "CwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAAL"); | |
+base64DecodeToExistingUint8Array(bufferView, 1211, "DA=="); | |
+base64DecodeToExistingUint8Array(bufferView, 1223, "DAAAAAAMAAAAAAkMAAAAAAAMAAAM"); | |
+base64DecodeToExistingUint8Array(bufferView, 1269, "Dg=="); | |
+base64DecodeToExistingUint8Array(bufferView, 1281, "DQAAAAQNAAAAAAkOAAAAAAAOAAAO"); | |
+base64DecodeToExistingUint8Array(bufferView, 1327, "EA=="); | |
+base64DecodeToExistingUint8Array(bufferView, 1339, "DwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhIS"); | |
+base64DecodeToExistingUint8Array(bufferView, 1394, "EgAAABISEgAAAAAAAAk="); | |
+base64DecodeToExistingUint8Array(bufferView, 1443, "Cw=="); | |
+base64DecodeToExistingUint8Array(bufferView, 1455, "CgAAAAAKAAAAAAkLAAAAAAALAAAL"); | |
+base64DecodeToExistingUint8Array(bufferView, 1501, "DA=="); | |
+base64DecodeToExistingUint8Array(bufferView, 1513, "DAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGLTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAu"); | |
return asmFunc({ | |
'Int8Array': Int8Array, | |
'Int16Array': Int16Array, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment