using System; using System.Collections.Generic; namespace Wasmtime.Exports { /// /// Represents the exports of a WebAssembly module. /// public class Exports { internal Exports(Module module) { Interop.wasm_exporttype_vec_t exports; Interop.wasm_module_exports(module.Handle, out exports); try { var all = new List((int)exports.size); var functions = new List(); var globals = new List(); var tables = new List(); var memories = new List(); for (int i = 0; i < (int)exports.size; ++i) { unsafe { var exportType = exports.data[i]; var externType = Interop.wasm_exporttype_type(exportType); switch (Interop.wasm_externtype_kind(externType)) { case Interop.wasm_externkind_t.WASM_EXTERN_FUNC: var function = new FunctionExport(exportType, externType); functions.Add(function); all.Add(function); break; case Interop.wasm_externkind_t.WASM_EXTERN_GLOBAL: var global = new GlobalExport(exportType, externType); globals.Add(global); all.Add(global); break; case Interop.wasm_externkind_t.WASM_EXTERN_TABLE: var table = new TableExport(exportType, externType); tables.Add(table); all.Add(table); break; case Interop.wasm_externkind_t.WASM_EXTERN_MEMORY: var memory = new MemoryExport(exportType, externType); memories.Add(memory); all.Add(memory); break; default: throw new NotSupportedException("Unsupported export extern type."); } } } Functions = functions; Globals = globals; Tables = tables; Memories = memories; All = all; } finally { Interop.wasm_exporttype_vec_delete(ref exports); } } /// /// The exported functions of a WebAssembly module. /// public IReadOnlyList Functions { get; private set; } /// /// The exported globals of a WebAssembly module. /// public IReadOnlyList Globals { get; private set; } /// /// The exported tables of a WebAssembly module. /// public IReadOnlyList Tables { get; private set; } /// /// The exported memories of a WebAssembly module. /// public IReadOnlyList Memories { get; private set; } internal List All { get; private set; } } }