/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ load(libdir + "asserts.js"); const USE_ASM = '"use asm";'; const HEAP_IMPORTS = "const i8=new glob.Int8Array(b);var u8=new glob.Uint8Array(b);"+ "const i16=new glob.Int16Array(b);var u16=new glob.Uint16Array(b);"+ "const i32=new glob.Int32Array(b);var u32=new glob.Uint32Array(b);"+ "const f32=new glob.Float32Array(b);var f64=new glob.Float64Array(b);"; const BUF_MIN = 64 * 1024; const BUF_CHANGE_MIN = 16 * 1024 * 1024; const BUF_64KB = new ArrayBuffer(BUF_MIN); function asmCompile() { var f = Function.apply(null, arguments); assertEq(!isAsmJSCompilationAvailable() || isAsmJSModule(f), true); return f; } function asmCompileCached() { if (!isAsmJSCompilationAvailable()) return Function.apply(null, arguments); var f = Function.apply(null, arguments); assertEq(isAsmJSModule(f), true); return f; } function assertAsmDirectiveFail(str) { if (!isAsmJSCompilationAvailable()) return; assertWarning(() => { eval(str) }, /meaningful in the Directive Prologue/); } function assertAsmTypeFail() { if (!isAsmJSCompilationAvailable()) return; // Verify no error is thrown with warnings off Function.apply(null, arguments); // Turn on throwing on validation errors var oldOpts = options("throw_on_asmjs_validation_failure"); assertEq(oldOpts.indexOf("throw_on_asmjs_validation_failure"), -1); var caught = false; try { Function.apply(null, arguments); } catch (e) { if (!e.message.includes("asm.js type error:")) throw new Error("Didn't catch the expected type failure error; instead caught: " + e + "\nStack: " + new Error().stack); caught = true; } if (!caught) throw new Error("Didn't catch the type failure error"); // Turn warnings-as-errors back off options("throw_on_asmjs_validation_failure"); } function assertAsmLinkFail(f, ...args) { if (!isAsmJSCompilationAvailable()) return; assertEq(isAsmJSModule(f), true); // Verify no error is thrown with warnings off var ret = f.apply(null, args); assertEq(isAsmJSFunction(ret), false); if (typeof ret === 'object') { for (var i in ret) { assertEq(isAsmJSFunction(ret[i]), false); } } assertWarning(() => { f.apply(null, args); }, /disabled by linker/); } // Linking should throw an exception even without warnings-as-errors function assertAsmLinkAlwaysFail(f, ...args) { var caught = false; try { f.apply(null, args); } catch (e) { caught = true; } if (!caught) throw new Error("Didn't catch the link failure error"); } function assertAsmLinkDeprecated(f, ...args) { if (!isAsmJSCompilationAvailable()) return; assertWarning(() => { f.apply(null, args); }, /asm.js type error:/) } function asmLink(f, ...args) { if (!isAsmJSCompilationAvailable()) return f.apply(null, args); var ret; assertNoWarning(() => { ret = f.apply(null, args); }, "No warning for asmLink") return ret; }