defmodule QuickBEAM.WASM.Module do
@moduledoc """
A decoded WebAssembly module.
Returned by `QuickBEAM.WASM.disasm/1`. Contains the module's type
signatures, imports, exports, function bodies with decoded opcodes,
memories, tables, globals, data segments, and custom sections.
## Functions
Each function is a `%QuickBEAM.WASM.Function{}` struct with decoded
opcodes in the same `{offset, name, ...operands}` tuple format used
by `QuickBEAM.Bytecode`:
%QuickBEAM.WASM.Function{
index: 0,
name: "add",
type_idx: 0,
params: [:i32, :i32],
results: [:i32],
locals: [],
opcodes: [
{0, :local_get, 0},
{2, :local_get, 1},
{4, :i32_add},
{5, :end}
]
}
"""
defstruct [
:version,
:start,
types: [],
imports: [],
exports: [],
functions: [],
memories: [],
tables: [],
globals: [],
data: [],
elements: [],
tags: [],
custom_sections: []
]
@type import_desc :: map()
@type export_desc :: map()
@type t :: %__MODULE__{
version: non_neg_integer(),
start: non_neg_integer() | nil,
types: [map()],
imports: [import_desc()],
exports: [export_desc()],
functions: [QuickBEAM.WASM.Function.t()],
memories: [map()],
tables: [map()],
globals: [map()],
data: [map()],
elements: [map()],
tags: [map()],
custom_sections: [map()]
}
end