| // Copyright 2017 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. | 
 |  | 
 | #ifndef V8_WASM_WASM_SERIALIZATION_H_ | 
 | #define V8_WASM_WASM_SERIALIZATION_H_ | 
 |  | 
 | #include "src/wasm/wasm-objects.h" | 
 |  | 
 | namespace v8 { | 
 | namespace internal { | 
 | namespace wasm { | 
 |  | 
 | // Support for serializing WebAssembly {NativeModule} objects. This class takes | 
 | // a snapshot of the module state at instantiation, and other code that modifies | 
 | // the module after that won't affect the serialized result. | 
 | class V8_EXPORT_PRIVATE WasmSerializer { | 
 |  public: | 
 |   explicit WasmSerializer(NativeModule* native_module); | 
 |  | 
 |   // Measure the required buffer size needed for serialization. | 
 |   size_t GetSerializedNativeModuleSize() const; | 
 |  | 
 |   // Serialize the {NativeModule} into the provided {buffer}. Returns true on | 
 |   // success and false if the given buffer it too small for serialization. | 
 |   bool SerializeNativeModule(Vector<byte> buffer) const; | 
 |  | 
 |   // The data header consists of uint32_t-sized entries (see {WriteVersion}): | 
 |   // [0] magic number | 
 |   // [1] version hash | 
 |   // [2] supported CPU features | 
 |   // [3] flag hash | 
 |   // ...  number of functions | 
 |   // ... serialized functions | 
 |   static constexpr size_t kMagicNumberOffset = 0; | 
 |   static constexpr size_t kVersionHashOffset = kMagicNumberOffset + kUInt32Size; | 
 |   static constexpr size_t kSupportedCPUFeaturesOffset = | 
 |       kVersionHashOffset + kUInt32Size; | 
 |   static constexpr size_t kFlagHashOffset = | 
 |       kSupportedCPUFeaturesOffset + kUInt32Size; | 
 |   static constexpr size_t kHeaderSize = 4 * kUInt32Size; | 
 |  | 
 |  private: | 
 |   NativeModule* native_module_; | 
 |   std::vector<WasmCode*> code_table_; | 
 | }; | 
 |  | 
 | // Support for deserializing WebAssembly {NativeModule} objects. | 
 | // Checks the version header of the data against the current version. | 
 | bool IsSupportedVersion(Vector<const byte> data); | 
 |  | 
 | // Deserializes the given data to create a Wasm module object. | 
 | V8_EXPORT_PRIVATE MaybeHandle<WasmModuleObject> DeserializeNativeModule( | 
 |     Isolate*, Vector<const byte> data, Vector<const byte> wire_bytes, | 
 |     Vector<const char> source_url); | 
 |  | 
 | }  // namespace wasm | 
 | }  // namespace internal | 
 | }  // namespace v8 | 
 |  | 
 | #endif  // V8_WASM_WASM_SERIALIZATION_H_ |