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); |
+})() |