using System; using System.Runtime.InteropServices; namespace Wasmtime { /// /// Represents a WebAssembly module. /// public class Module : IDisposable { /// /// The name of the module. /// public string Name { get; private set; } /// /// The imports of the module. /// public Wasmtime.Imports.Imports Imports { get; private set; } /// /// The exports of the module. /// /// public Wasmtime.Exports.Exports Exports { get; private set; } /// public void Dispose() { if (!Handle.IsInvalid) { Handle.Dispose(); Handle.SetHandleAsInvalid(); } if (!(Imports is null)) { Imports.Dispose(); Imports = null; } } internal Module(Interop.StoreHandle store, string name, byte[] bytes) { unsafe { fixed (byte *ptr = bytes) { Interop.wasm_byte_vec_t vec; vec.size = (UIntPtr)bytes.Length; vec.data = ptr; Handle = Interop.wasm_module_new(store, ref vec); } if (Handle.IsInvalid) { throw new WasmtimeException($"WebAssembly module '{name}' is not valid."); } } Name = name; Imports = new Wasmtime.Imports.Imports(this); Exports = new Wasmtime.Exports.Exports(this); } internal Interop.ModuleHandle Handle { get; private set; } } }