diff options
Diffstat (limited to 'js/src/jit-test/tests/xdr/decode-off-thread.js')
-rw-r--r-- | js/src/jit-test/tests/xdr/decode-off-thread.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/xdr/decode-off-thread.js b/js/src/jit-test/tests/xdr/decode-off-thread.js new file mode 100644 index 0000000000..cacef62e46 --- /dev/null +++ b/js/src/jit-test/tests/xdr/decode-off-thread.js @@ -0,0 +1,54 @@ +// |jit-test| skip-if: helperThreadCount() === 0 + +function evalWithCacheLoadOffThread(code, ctx) { + ctx = ctx || {}; + ctx = Object.create(ctx, { + fileName: { value: "evalWithCacheCode.js" }, + lineNumber: { value: 0 } + }); + code = code instanceof Object ? code : cacheEntry(code); + + // We create a new global ... + if (!("global" in ctx)) + ctx.global = newGlobal(); + + var ctx_save = Object.create(ctx, { + saveIncrementalBytecode: { value: true } + }); + + ctx.global.generation = 0; + evaluate(code, ctx_save); + + offThreadDecodeStencil(code, ctx); + ctx.global.eval(` +stencil = finishOffThreadStencil(); +evalStencil(stencil); +`); +} + +var test; + +// Decode a constant. +test = ` + 1; +`; +evalWithCacheLoadOffThread(test, {}); + +// Decode object literals. +test = ` + var obj = { a: 1, b: 2 }; + obj.a++; + assertEq(obj.a, 2); +`; +evalWithCacheLoadOffThread(test, {}); + +// Decode functions. +test = ` + function g() { + return function f() { return 1; }; + }; + assertEq(g()(), 1); +`; +evalWithCacheLoadOffThread(test, {}); + + |