load(libdir + "asm.js"); setJitCompilerOption("ion.warmup.trigger", 0); setJitCompilerOption("baseline.warmup.trigger", 0); setJitCompilerOption("offthread-compilation.enable", 0); function ffi1() { assertJitStackInvariants() } function ffi2() { return { valueOf() { assertJitStackInvariants() } } } // FFI with no coercion var m = asmCompile('stdlib', 'foreign', ` "use asm"; var ffi = foreign.ffi; function f() { ffi(); } return f `); var f = asmLink(m, null, {ffi:ffi1}); f(); f(); // FFI with ToInt32 coercion var m = asmCompile('stdlib', 'foreign', ` "use asm"; var ffi = foreign.ffi; function f() { ffi() | 0; } return f `); var f = asmLink(m, null, {ffi:ffi1}); f(); f(); var f = asmLink(m, null, {ffi:ffi2}); f(); f(); // FFI with ToNumber coercion var m = asmCompile('stdlib', 'foreign', ` "use asm"; var ffi = foreign.ffi; function f() { +ffi(); } return f `); var f = asmLink(m, this, {ffi:ffi1}); f(); f(); var f = asmLink(m, this, {ffi:ffi2}); f(); f();