Packages

A WebAssembly Virtual Machine

Current section

Files

Jump to
alchemy_vm lib decoding function_section_parser.ex
Raw

lib/decoding/function_section_parser.ex

defmodule AlchemyVM.Decoder.FunctionSectionParser do
alias AlchemyVM.LEB128
@moduledoc false
def parse(section) do
indexes = if section !== nil, do: parse_type_entry(section), else: []
{:function_types, Enum.reverse(indexes)}
end
@spec parse_type_entry(Binary) :: List
defp parse_type_entry(entry) do
{count, entry} = LEB128.decode_unsigned(entry)
parse_type_entry(:indexing, [], count, entry)
end
defp parse_type_entry(:indexing, v, _n, ""), do: v
defp parse_type_entry(:indexing, v, n, entry) do
{id, rem} = LEB128.decode_unsigned(entry)
parse_type_entry(:indexing, [id | v], n - 1, rem)
end
end