зеркало из https://github.com/mozilla/gecko-dev.git
56 строки
1.6 KiB
JavaScript
56 строки
1.6 KiB
JavaScript
const sampleURL = "test_webassembly_compile_sample.wasm";
|
|
const sampleExportName = "run";
|
|
const sampleResult = 1275;
|
|
|
|
/* eslint-disable no-throw-literal */
|
|
|
|
function checkSampleModule(m) {
|
|
if (!(m instanceof WebAssembly.Module)) {
|
|
throw "not a module";
|
|
}
|
|
var i = new WebAssembly.Instance(m);
|
|
if (!(i instanceof WebAssembly.Instance)) {
|
|
throw "not an instance";
|
|
}
|
|
if (i.exports[sampleExportName]() !== sampleResult) {
|
|
throw "wrong result";
|
|
}
|
|
}
|
|
|
|
function checkSampleInstance(i) {
|
|
if (!(i instanceof WebAssembly.Instance)) {
|
|
throw "not an instance";
|
|
}
|
|
if (i.exports[sampleExportName]() !== sampleResult) {
|
|
throw "wrong result";
|
|
}
|
|
}
|
|
|
|
const initObj = { headers: { "Content-Type": "application/wasm" } };
|
|
|
|
onmessage = e => {
|
|
WebAssembly.compile(e.data)
|
|
.then(m => checkSampleModule(m))
|
|
.then(() => WebAssembly.instantiate(e.data))
|
|
.then(({ module, instance }) => {
|
|
checkSampleModule(module);
|
|
checkSampleInstance(instance);
|
|
})
|
|
.then(() => WebAssembly.compileStreaming(new Response(e.data, initObj)))
|
|
.then(m => checkSampleModule(m))
|
|
.then(() => WebAssembly.instantiateStreaming(new Response(e.data, initObj)))
|
|
.then(({ module, instance }) => {
|
|
checkSampleModule(module);
|
|
checkSampleInstance(instance);
|
|
})
|
|
.then(() => WebAssembly.compileStreaming(fetch(sampleURL)))
|
|
.then(m => checkSampleModule(m))
|
|
.then(() => WebAssembly.instantiateStreaming(fetch(sampleURL)))
|
|
.then(({ module, instance }) => {
|
|
checkSampleModule(module);
|
|
checkSampleInstance(instance);
|
|
})
|
|
.then(() => postMessage("ok"))
|
|
.catch(err => postMessage("fail: " + err));
|
|
};
|