diff --git a/test/browser/test_html5_fullscreen.html b/test/browser/test_html5_fullscreen.html deleted file mode 100644 index b26a75e0ab5d6..0000000000000 --- a/test/browser/test_html5_fullscreen.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - Emscripten-Generated Code - - - -
-
emscripten
-
Downloading...
-
- -
-
- -
-
-
- Resize canvas - Lock/hide mouse pointer -     - -
- -
- -
- - {{{ SCRIPT }}} - - -
- This simply requests fullscreen, use when no extra behavior is desirable. This is subject to a wild number of per-browser differences, see https://github.com/emscripten-core/emscripten/issues/2556.
- Stretch the WebGL render target to cover the whole screen in pixel-perfect manner, in standard definition.
- Same as above, but use the actual native display resolution, instead of CSS resolution.
- Stretch the WebGL render target to cover the full screen, but retain aspect ratio.
- Same as above, but use the actual native display resolution, instead of CSS resolution.
- Don't resize WebGL render target, and don't care about aspect ratio, simply stretch over the whole screen. (current Firefox and IE default behavior)
- Don't resize WebGL render target, but scale over the whole screen, preserving aspect ratio.
- Same as above, but perform pixelated nearest-neighbor filtering instead of bilinear filtering.
- Don't resize the WebGL render target and don't scale the displayed content, but show it full screen. (current Chrome and Safari default behavior)
-
-
-
- The Soft fullscreen modes are otherwise exactly like the above, except that they don't actually request fullscreen, but instead they present the canvas maximized in the client area of the page. This is more desirable in Firefox OS mobile packaged apps, where the application is already displayed full screen. Also it allows client desktop apps to use F11 for transitioning between fullscreen mode.
-
-
-
-
-
-
-
-
-
-
- - diff --git a/test/browser/test_html5_fullscreen_pre.js b/test/browser/test_html5_fullscreen_pre.js new file mode 100644 index 0000000000000..51cae794a18ef --- /dev/null +++ b/test/browser/test_html5_fullscreen_pre.js @@ -0,0 +1,29 @@ +var canvas = document.getElementById('canvas'); +if (canvas) canvas.removeAttribute('tabindex'); +var div = document.createElement('div'); +div.id = 'otherContent'; +div.innerHTML = ` + This simply requests fullscreen, use when no extra behavior is desirable. This is subject to a wild number of per-browser differences, see https://github.com/emscripten-core/emscripten/issues/2556.
+ Stretch the WebGL render target to cover the whole screen in pixel-perfect manner, in standard definition.
+ Same as above, but use the actual native display resolution, instead of CSS resolution.
+ Stretch the WebGL render target to cover the full screen, but retain aspect ratio.
+ Same as above, but use the actual native display resolution, instead of CSS resolution.
+ Don't resize WebGL render target, and don't care about aspect ratio, simply stretch over the whole screen. (current Firefox and IE default behavior)
+ Don't resize WebGL render target, but scale over the whole screen, preserving aspect ratio.
+ Same as above, but perform pixelated nearest-neighbor filtering instead of bilinear filtering.
+ Don't resize the WebGL render target and don't scale the displayed content, but show it full screen. (current Chrome and Safari default behavior)
+
+
+
+ The Soft fullscreen modes are otherwise exactly like the above, except that they don't actually request fullscreen, but instead they present the canvas maximized in the client area of the page. This is more desirable in Firefox OS mobile packaged apps, where the application is already displayed full screen. Also it allows client desktop apps to use F11 for transitioning between fullscreen mode.
+
+
+
+
+
+
+
+
+
+`; +document.body.appendChild(div); diff --git a/test/browser/test_manual_download_data.html b/test/browser/test_manual_download_data.html deleted file mode 100644 index acb69fc546018..0000000000000 --- a/test/browser/test_manual_download_data.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - Emscripten-Generated Code - - - -
-
emscripten
-
Downloading...
-
- -
-
- -
-
-
- Resize canvas - Lock/hide mouse pointer -     - -
- -
- -
- - - diff --git a/test/browser/test_manual_download_data.js b/test/browser/test_manual_download_data.js new file mode 100644 index 0000000000000..263eeeab1beab --- /dev/null +++ b/test/browser/test_manual_download_data.js @@ -0,0 +1,99 @@ +var statusElement = document.getElementById('status'); +var progressElement = document.getElementById('progress'); +var spinnerElement = document.getElementById('spinner'); + +var Module = { + print: (() => { + var element = document.getElementById('output'); + if (element) element.value = ''; // clear browser cache + return function(text) { + if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' '); + console.log(text); + if (element) { + element.value += text + "\n"; + element.scrollTop = element.scrollHeight; // focus on bottom + } + }; + })(), + printErr: (text) => { + if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' '); + console.error(text); + }, + canvas: (() => { + var canvas = document.getElementById('canvas'); + return canvas; + })(), + setStatus: (text) => { + if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' }; + if (text === Module.setStatus.text) return; + var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/); + var now = Date.now(); + if (m && now - Date.now() < 30) return; + if (m) { + text = m[1]; + progressElement.value = parseInt(m[2])*100; + progressElement.max = parseInt(m[4])*100; + progressElement.hidden = false; + spinnerElement.hidden = false; + } else { + progressElement.value = null; + progressElement.max = null; + progressElement.hidden = true; + if (!text) spinnerElement.hidden = true; + } + statusElement.innerHTML = text; + }, + totalDependencies: 0, + monitorRunDependencies: (left) => { + this.totalDependencies = Math.max(this.totalDependencies, left); + Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.'); + }, + getPreloadedPackage: (remotePackageName, remotePackageSize) => { + console.log(`Runtime asking for remote package ${remotePackageName}, expected size ${remotePackageSize} bytes.`); + return Module['downloadedData']; + }, +}; +Module.setStatus('Downloading...'); +window.onerror = function() { + Module.setStatus('Exception thrown, see JavaScript console'); + spinnerElement.style.display = 'none'; + Module.setStatus = function(text) { + if (text) Module.printErr('[post-exception status] ' + text); + }; +}; + +function download(url) { + return fetch(url).then((rsp) => rsp.arrayBuffer()); +} + +function addScriptToDom(scriptCode) { + return new Promise((resolve, reject) => { + var script = document.createElement('script'); + var blob = new Blob([scriptCode], { type: 'application/javascript' }); + var objectUrl = URL.createObjectURL(blob); + script.src = objectUrl; + script.onload = function() { + console.log('added js script to dom'); + script.onload = script.onerror = null; + URL.revokeObjectURL(objectUrl); + resolve(); + } + script.onerror = function(e) { + script.onload = script.onerror = null; + URL.revokeObjectURL(objectUrl); + console.error('script failed to add to dom: ' + e); + reject(e.message || "(out of memory?)"); + } + document.body.appendChild(script); + }); +} + +var dataDownload = download('/test/test_manual_download_data.data').then((data) => { + console.log('downloaded data file'); + Module['downloadedData'] = data; + var jsDownload = download('/test/test_manual_download_data.js').then((data) => { + console.log('downloaded js file'); + Module['mainScriptUrlOrBlob'] = new Blob([data], { type: 'application/javascript' }); + addScriptToDom(data); + }); +}); diff --git a/test/browser/test_preallocated_heap_shell.html b/test/browser/test_preallocated_heap_shell.html deleted file mode 100644 index ae19948017741..0000000000000 --- a/test/browser/test_preallocated_heap_shell.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - Emscripten-Generated Code - - - -
-
emscripten
-
Downloading...
-
- -
-
- -
-
-
- Resize canvas - Lock/hide mouse pointer -     - -
- -
- -
- - {{{ SCRIPT }}} - - diff --git a/test/browser/test_preinitialized_webgl_context.html b/test/browser/test_preinitialized_webgl_context.html deleted file mode 100644 index e76edb3ee589d..0000000000000 --- a/test/browser/test_preinitialized_webgl_context.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - Emscripten-Generated Code - - - -
-
emscripten
-
Downloading...
-
- -
-
- -
-
-
- Resize canvas - Lock/hide mouse pointer -     - -
- -
- -
- - {{{ SCRIPT }}} - - diff --git a/test/browser/test_sdl_canvas_size.html b/test/browser/test_sdl_canvas_size.html deleted file mode 100644 index 697259f223eb8..0000000000000 --- a/test/browser/test_sdl_canvas_size.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - Emscripten-Generated Code - - - -
-
Downloading...
-
- -
-
- - -
-
-
- Resize canvas - Lock/hide mouse pointer -     - -
- -
- -
- - {{{ SCRIPT }}} - - diff --git a/test/browser/webgl_destroy_context_shell.html b/test/browser/webgl_destroy_context_shell.html deleted file mode 100644 index 9433d358212c8..0000000000000 --- a/test/browser/webgl_destroy_context_shell.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - Emscripten-Generated Code - - - -
-
emscripten
-
Downloading...
-
- -
-
- -
-
-
- Resize canvas - Lock/hide mouse pointer -     - -
- -
- -
- - {{{ SCRIPT }}} - - diff --git a/test/embind/build_benchmark b/test/embind/build_benchmark index 1082b338f4663..794b990bba8c8 100755 --- a/test/embind/build_benchmark +++ b/test/embind/build_benchmark @@ -1,2 +1,2 @@ #!/bin/bash -../../emcc -sTOTAL_STACK=1Mb --minify 0 -lembind --js-library=embind.benchmark.js -O2 --shell-file shell.html -o embind_benchmark.html embind_benchmark.cpp +../../emcc -sTOTAL_STACK=1Mb --minify 0 -lembind --js-library=embind.benchmark.js -O2 -o embind_benchmark.html embind_benchmark.cpp diff --git a/test/embind/shell.html b/test/embind/shell.html deleted file mode 100644 index 757d3d17de188..0000000000000 --- a/test/embind/shell.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - Emscripten-Generated Code - - - -
Downloading...
-
- -
- - - -
- -
- - {{{ SCRIPT }}} - - diff --git a/test/pthread/main_js_with_loader.html b/test/pthread/main_js_with_loader.html deleted file mode 100644 index 8f9d30a3acaf6..0000000000000 --- a/test/pthread/main_js_with_loader.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - Emscripten-Generated Code - - - -
-
emscripten
-
Downloading...
-
- -
-
- -
-
-
- Resize canvas - Lock/hide mouse pointer -     - -
- -
- -
- - - - - diff --git a/test/test_browser.py b/test/test_browser.py index 017ea5c260aab..3210ef0d87a84 100644 --- a/test/test_browser.py +++ b/test/test_browser.py @@ -464,7 +464,12 @@ def test_preload_file_with_manual_data_download(self): self.set_setting('INCOMING_MODULE_JS_API', 'mainScriptUrlOrBlob,canvas,monitorRunDependencies,onAbort,onExit,postRun,print,printErr,setStatus') self.compile_btest('browser/test_manual_download_data.c', ['-sEXIT_RUNTIME', '-o', 'out.js', '--preload-file', 'file.txt@/file.txt']) - copy_asset('browser/test_manual_download_data.html') + # Generate test_manual_download_data.html from shell_minimal.html + shell = read_file(path_from_root('html/shell_minimal.html')) + parts = shell.split("\n\n") # Move .data file out of server root to ensure that getPreloadedPackage is actually used os.mkdir('test') @@ -1258,7 +1263,13 @@ def test_webgl2_texsubimage3d(self): # Test that -sGL_PREINITIALIZED_CONTEXT works and allows user to set Module['preinitializedWebGLContext'] to a preinitialized WebGL context. @requires_graphics_hardware def test_preinitialized_webgl_context(self): - self.btest_exit('test_preinitialized_webgl_context.c', cflags=['-sGL_PREINITIALIZED_CONTEXT', '--shell-file', test_file('browser/test_preinitialized_webgl_context.html')]) + create_file('pre.js', ''' + Module['preinitializedWebGLContext'] = Module['canvas'].getContext('webgl'); + Module['preinitializedWebGLContext'].activeTexture(Module['preinitializedWebGLContext'].TEXTURE0 + 5); + ''') + self.btest_exit('test_preinitialized_webgl_context.c', + cflags=['-sGL_PREINITIALIZED_CONTEXT', + '--pre-js', 'pre.js']) @parameterized({ '': ([],), @@ -1272,7 +1283,40 @@ def test_write_file_in_environment_web(self): self.btest_exit('write_file.c', cflags=['-sENVIRONMENT=web', '-Os', '--closure=1']) def test_fflush(self): - self.btest('test_fflush.cpp', '0', cflags=['-sEXIT_RUNTIME', '--shell-file', test_file('test_fflush.html')], reporting=Reporting.NONE) + create_file('pre.js', ''' + Module.gotStdout = false; + Module.gotStderr = false; + Module.gotStdCerr = false; + Module.reportSuccess = function() { + fetch('/report_result?0').then(() => window.close()); + }; + + var oldPrint = Module.print; + Module.print = function(text) { + if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' '); + if (oldPrint) oldPrint(text); + if (text == 'hello!') { + Module.gotStdout = true; + if (Module.gotStderr && Module.gotStdCerr) Module.reportSuccess(); + } + }; + + Module.printErr = function(text) { + if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' '); + console.error(text); + if (text == 'hello from stderr too!') { + Module.gotStderr = true; + if (Module.gotStdout && Module.gotStdCerr) Module.reportSuccess(); + } + if (text == 'std::cerr in two parts.') { + Module.gotStdCerr = true; + if (Module.gotStdout && Module.gotStderr) Module.reportSuccess(); + } + }; + ''') + self.btest('test_fflush.cpp', '0', + cflags=['-sEXIT_RUNTIME', '--pre-js', 'pre.js'], + reporting=Reporting.NONE) @parameterized({ '': ([],), @@ -1436,9 +1480,14 @@ def test_sdl_pumpevents(self): self.btest_exit('test_sdl_pumpevents.c', cflags=['--pre-js', test_file('browser/fake_events.js'), '-lSDL', '-lGL']) def test_sdl_canvas_size(self): + create_file('pre.js', ''' + Module['canvas'].width = 700; + Module['canvas'].height = 200; + Module['canvas'].removeAttribute('tabindex'); + ''') self.btest_exit('test_sdl_canvas_size.c', - cflags=['-O2', '--minify=0', '--shell-file', - test_file('browser/test_sdl_canvas_size.html'), '-lSDL', '-lGL']) + cflags=['-O2', '--minify=0', + '--pre-js', 'pre.js', '-lSDL', '-lGL']) @requires_graphics_hardware def test_sdl_gl_extensions(self): @@ -2613,11 +2662,26 @@ def test_html5_special_event_targets(self): 'full_es2': (['-sFULL_ES2'],), }) def test_html5_webgl_destroy_context(self, args): - self.btest_exit('webgl_destroy_context.c', cflags=args + ['--shell-file', test_file('browser/webgl_destroy_context_shell.html'), '-lGL']) + create_file('pre.js', ''' + var oldCanvas = document.getElementById('canvas'); + var newCanvas = oldCanvas.cloneNode(true); + newCanvas.removeAttribute('tabindex'); + oldCanvas.parentNode.replaceChild(newCanvas, oldCanvas); + Module.canvas = newCanvas; + ''') + self.btest_exit('webgl_destroy_context.c', + cflags=args + ['--pre-js', 'pre.js', '-lGL']) @requires_graphics_hardware def test_html5_webgl_context_lost_pthread(self): - self.btest_exit('webgl_context_lost_pthread.c', cflags=['-pthread', '-lGL', '-sASSERTIONS', '--shell-file', test_file('browser/webgl_destroy_context_shell.html')]) + create_file('pre.js', ''' + var oldCanvas = document.getElementById('canvas'); + var newCanvas = oldCanvas.cloneNode(true); + newCanvas.removeAttribute('tabindex'); + oldCanvas.parentNode.replaceChild(newCanvas, oldCanvas); + Module.canvas = newCanvas; + ''') + self.btest_exit('webgl_context_lost_pthread.c', cflags=['-pthread', '-lGL', '-sASSERTIONS', '--pre-js', 'pre.js']) @requires_graphics_hardware def test_webgl_context_params(self): @@ -4147,7 +4211,12 @@ def test_async_compile(self, opts, returncode): def test_manual_wasm_instantiate(self): self.set_setting('EXIT_RUNTIME') self.compile_btest('test_manual_wasm_instantiate.c', ['-o', 'manual_wasm_instantiate.js'], reporting=Reporting.JS_ONLY) - copy_asset('test_manual_wasm_instantiate.html') + # Generate test_manual_wasm_instantiate.html from shell_minimal.html + shell = read_file(path_from_root('html/shell_minimal.html')) + parts = shell.split("\n\n") self.run_browser('test_manual_wasm_instantiate.html', '/report_result?exit:0') def test_wasm_locate_file(self): @@ -4411,7 +4480,13 @@ def test_webgpu_required_limits(self): # Preallocating the buffer in this was is asm.js only (wasm needs a Memory). @requires_wasm2js def test_preallocated_heap(self): - self.btest_exit('test_preallocated_heap.c', cflags=['-sWASM=0', '-sIMPORTED_MEMORY', '-sINITIAL_MEMORY=16MB', '-sABORTING_MALLOC=0', '--shell-file', test_file('browser/test_preallocated_heap_shell.html')]) + create_file('pre.js', ''' + Module['buffer'] = new ArrayBuffer(32*1024*1024); + Module['INITIAL_MEMORY'] = 32*1024*1024; + ''') + self.btest_exit('test_preallocated_heap.c', + cflags=['-sWASM=0', '-sIMPORTED_MEMORY', '-sINITIAL_MEMORY=16MB', '-sABORTING_MALLOC=0', + '--pre-js', 'pre.js']) # Tests emscripten_fetch() usage to XHR data directly to memory without persisting results to IndexedDB. @also_with_wasm2js @@ -4716,7 +4791,20 @@ def test_mainScriptUrlOrBlob(self, es6, use_blob): # Now run the test with the JS file renamed and with its content # stored in Module['mainScriptUrlOrBlob']. shutil.move('out.js', js_name) - copy_asset('pthread/main_js_with_loader.html', 'hello_thread_with_loader.html') + # Generate hello_thread_with_loader.html from shell_minimal.html + shell = read_file(path_from_root('html/shell_minimal.html')) + shell = shell.replace('''#if MODULARIZE && !EXPORT_ES6 + var moduleArgs = { +#else + var Module = { +#endif''', ' var Module = {') + shell = shell.replace(''' {{{ SCRIPT }}} +#if MODULARIZE && !EXPORT_ES6 + +#endif''', ' ') + create_file('hello_thread_with_loader.html', shell) self.run_browser('hello_thread_with_loader.html', '/report_result?exit:0') # Tests that SINGLE_FILE works as intended in generated HTML (with and without Worker) diff --git a/test/test_fflush.html b/test/test_fflush.html deleted file mode 100644 index 974759d80ad6b..0000000000000 --- a/test/test_fflush.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - Emscripten-Generated Code - - - -
-
emscripten
-
Downloading...
-
- -
-
- -
-
-
- Resize canvas - Lock/hide mouse pointer -     - -
- -
- -
- - {{{ SCRIPT }}} - - diff --git a/test/test_interactive.py b/test/test_interactive.py index 4677df2e607ea..02b042fa4168d 100644 --- a/test/test_interactive.py +++ b/test/test_interactive.py @@ -30,7 +30,10 @@ def test_html5_core(self): self.btest_exit('test_html5_core.c', cflags=['-DKEEP_ALIVE']) def test_html5_fullscreen(self): - self.btest('test_html5_fullscreen.c', expected='0', cflags=['-sDISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR', '-sEXPORTED_FUNCTIONS=_requestFullscreen,_enterSoftFullscreen,_main', '--shell-file', test_file('browser/test_html5_fullscreen.html')]) + self.btest('test_html5_fullscreen.c', expected='0', + cflags=['-sDISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR', + '-sEXPORTED_FUNCTIONS=_requestFullscreen,_enterSoftFullscreen,_main', + '--pre-js', test_file('browser/test_html5_fullscreen_pre.js')]) def test_html5_emscripten_exit_with_escape(self): self.btest('test_html5_emscripten_exit_fullscreen.c', expected='1', cflags=['-DEXIT_WITH_F']) diff --git a/test/test_manual_wasm_instantiate.html b/test/test_manual_wasm_instantiate.html deleted file mode 100644 index 101d61c85ae95..0000000000000 --- a/test/test_manual_wasm_instantiate.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - Emscripten-Generated Code - - - -
-
emscripten
-
Downloading...
-
- -
-
- -
-
-
- Resize canvas - Lock/hide mouse pointer -     - -
- -
- -
- - - diff --git a/test/test_manual_wasm_instantiate.js b/test/test_manual_wasm_instantiate.js new file mode 100644 index 0000000000000..73929d4aee862 --- /dev/null +++ b/test/test_manual_wasm_instantiate.js @@ -0,0 +1,88 @@ +var statusElement = document.getElementById('status'); +var progressElement = document.getElementById('progress'); +var spinnerElement = document.getElementById('spinner'); + +var Module = { + print: (() => { + var element = document.getElementById('output'); + if (element) element.value = ''; // clear browser cache + return (...args) => { + var text = args.join(' '); + console.log(text); + if (element) { + element.value += text + "\n"; + element.scrollTop = element.scrollHeight; // focus on bottom + } + }; + })(), + printErr: (...args) => { + var text = args.join(' '); + console.error(text); + }, + canvas: (() => { + var canvas = document.getElementById('canvas'); + return canvas; + })(), + setStatus: (text) => { + if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' }; + if (text === Module.setStatus.text) return; + var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/); + var now = Date.now(); + if (m && now - Date.now() < 30) return; + if (m) { + text = m[1]; + progressElement.value = parseInt(m[2])*100; + progressElement.max = parseInt(m[4])*100; + progressElement.hidden = false; + spinnerElement.hidden = false; + } else { + progressElement.value = null; + progressElement.max = null; + progressElement.hidden = true; + if (!text) spinnerElement.hidden = true; + } + statusElement.innerHTML = text; + }, + totalDependencies: 0, + monitorRunDependencies: (left) => { + this.totalDependencies = Math.max(this.totalDependencies, left); + Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.'); + } +}; +Module.setStatus('Downloading...'); +window.onerror = () => { + Module.setStatus('Exception thrown, see JavaScript console'); + spinnerElement.style.display = 'none'; + Module.setStatus = (text) => { + if (text) Module.printErr('[post-exception status] ' + text); + }; +}; + +function downloadWasm(url) { + console.log('fetching wasm: ', url); + return fetch(url).then((response) => response.arrayBuffer()); +} + +var wasm = downloadWasm('manual_wasm_instantiate.wasm'); + +Module.instantiateWasm = (imports, successCallback) => { + console.log('instantiateWasm: instantiating asynchronously'); + wasm.then((bytes) => { + console.log('wasm download finished, begin instantiating'); + var wasmInstantiate = WebAssembly.instantiate(bytes, imports).then((output) => { + if (typeof WasmOffsetConverter != "undefined") { + wasmOffsetConverter = new WasmOffsetConverter(bytes, output.module); + } + console.log('wasm instantiation succeeded'); + Module.testWasmInstantiationSucceeded = 1; + successCallback(output.instance); + }).catch((e) => { + console.log('wasm instantiation failed! ' + e); + }); + }); + return {}; +} + +var script = document.createElement('script'); +script.src = "manual_wasm_instantiate.js"; +document.body.appendChild(script);