| Index: test/mjsunit/wasm/compiled-module-serialization.js
|
| diff --git a/test/mjsunit/wasm/compiled-module-serialization.js b/test/mjsunit/wasm/compiled-module-serialization.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..94cc894275c793bdc64f42798db5284aa04a56ac
|
| --- /dev/null
|
| +++ b/test/mjsunit/wasm/compiled-module-serialization.js
|
| @@ -0,0 +1,80 @@
|
| +// Copyright 2015 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Flags: --expose-wasm --allow-natives-syntax --expose-gc
|
| +
|
| +load("test/mjsunit/wasm/wasm-constants.js");
|
| +load("test/mjsunit/wasm/wasm-module-builder.js");
|
| +
|
| +(function SerializeAndDeserializeModule() {
|
| + var builder = new WasmModuleBuilder();
|
| + builder.addMemory(1,1, true);
|
| + var kSig_v_i = makeSig([kAstI32], []);
|
| + var signature = builder.addType(kSig_v_i);
|
| + builder.addImport("some_value", kSig_i);
|
| + builder.addImport("writer", signature);
|
| +
|
| + builder.addFunction("main", kSig_i_i)
|
| + .addBody([
|
| + kExprI32Const, 1,
|
| + kExprGetLocal, 0,
|
| + kExprI32LoadMem, 0, 0,
|
| + kExprCallIndirect, kArity1, signature,
|
| + kExprGetLocal,0,
|
| + kExprI32LoadMem,0, 0,
|
| + kExprCallImport, kArity0, 0,
|
| + kExprI32Add
|
| + ]).exportFunc();
|
| +
|
| + // writer(mem[i]);
|
| + // return mem[i] + some_value();
|
| + builder.addFunction("_wrap_writer", signature)
|
| + .addBody([
|
| + kExprGetLocal, 0,
|
| + kExprCallImport, kArity1, 1]);
|
| + builder.appendToTable([0, 1]);
|
| +
|
| +
|
| + var module = new WebAssembly.Module(builder.toBuffer());
|
| + var buff = %SerializeWasmModule(module);
|
| + module = null;
|
| + gc();
|
| + module = %DeserializeWasmModule(buff);
|
| +
|
| + var mem_1 = new ArrayBuffer(4);
|
| + var view_1 = new Int32Array(mem_1);
|
| +
|
| + view_1[0] = 42;
|
| +
|
| + var outval_1;
|
| + var i1 = new WebAssembly.Instance(module, {some_value: () => 1,
|
| + writer: (x)=>outval_1 = x }, mem_1);
|
| +
|
| + assertEquals(43, i1.exports.main(0));
|
| +
|
| + assertEquals(42, outval_1);
|
| +})();
|
| +
|
| +(function DeserializeInvalidObject() {
|
| + var invalid_buffer = new ArrayBuffer(10);
|
| +
|
| + module = %DeserializeWasmModule(invalid_buffer);
|
| + assertEquals(module, undefined);
|
| +})();
|
| +
|
| +(function RelationBetweenModuleAndClone() {
|
| + let builder = new WasmModuleBuilder();
|
| + builder.addFunction("main", kSig_i)
|
| + .addBody([kExprI8Const, 42])
|
| + .exportFunc();
|
| +
|
| + var compiled_module = new WebAssembly.Module(builder.toBuffer());
|
| + var serialized = %SerializeWasmModule(compiled_module);
|
| + var clone = %DeserializeWasmModule(serialized);
|
| +
|
| + assertNotNull(clone);
|
| + assertFalse(clone == undefined);
|
| + assertFalse(clone == compiled_module);
|
| + assertEquals(clone.constructor, compiled_module.constructor);
|
| +})()
|
|
|