diff options
Diffstat (limited to '')
-rw-r--r-- | js/src/jit-test/tests/xdr/decode-off-thread.js | 58 |
1 files changed, 58 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..844fa50342 --- /dev/null +++ b/js/src/jit-test/tests/xdr/decode-off-thread.js @@ -0,0 +1,58 @@ +// |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); + + var incremental = ctx.incremental || false; + + // We create a new global ... + if (!("global" in ctx)) + ctx.global = newGlobal({ cloneSingletons: !incremental }); + + var ctx_save; + if (incremental) + ctx_save = Object.create(ctx, {saveIncrementalBytecode: { value: true } }); + else + ctx_save = Object.create(ctx, {saveBytecode: { value: true } }); + + ctx.global.generation = 0; + evaluate(code, ctx_save); + + offThreadDecodeScript(code, ctx); + ctx.global.eval(`runOffThreadDecodedScript()`); +} + +var test; + +// Decode a constant. +test = ` + 1; +`; +evalWithCacheLoadOffThread(test, {}); +evalWithCacheLoadOffThread(test, { incremental: true }); + +// Decode object literals. +test = ` + var obj = { a: 1, b: 2 }; + obj.a++; + assertEq(obj.a, 2); +`; +evalWithCacheLoadOffThread(test, {}); +evalWithCacheLoadOffThread(test, { incremental: true }); + +// Decode functions. +test = ` + function g() { + return function f() { return 1; }; + }; + assertEq(g()(), 1); +`; +evalWithCacheLoadOffThread(test, {}); +evalWithCacheLoadOffThread(test, { incremental: true }); + + |