Packages
orb
0.0.47
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
0.0.51
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
retired
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
DSL for WebAssembly
Current section
Files
Jump to
Current section
Files
lib/orb/to_wasm.ex
defprotocol Orb.ToWasm do
@doc "Protocol for converting to WebAssembly binary format (.wasm)"
def to_wasm(data, options)
end
defmodule Orb.ToWasm.Helpers do
@moduledoc false
import Orb.Leb
def sized(bytes) do
bytes = IO.iodata_to_binary(bytes)
[byte_size(bytes) |> uleb128(), bytes]
end
def vec(items) when is_list(items) do
[
length(items) |> uleb128(),
items
]
end
end
defmodule Orb.ToWasm.Context do
defstruct local_indexes: %{}
def new(), do: %__MODULE__{}
def set_local_get_types(context = %__MODULE__{}, local_types) do
local_indexes =
Enum.with_index(local_types)
|> Map.new(fn {{id, type}, index} -> {id, %{index: index, type: type}} end)
# Map.new(
# for {{id, type}, index} <- Enum.with_index(local_types),
# do: {id, %{index: index, type: type}}
# )
put_in(context.local_indexes, local_indexes)
end
def fetch_local_index!(context = %__MODULE__{}, local_identifier) do
entry = Map.fetch!(context.local_indexes, local_identifier)
entry.index
end
end