Packages

An experimental work-in-progress (WIP) WebAssembly runtime written in Gleam.

Current section

Files

Jump to
gwr src gwr@parser@convention_parser.erl
Raw

src/gwr@parser@convention_parser.erl

-module(gwr@parser@convention_parser).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([parse_vector/2]).
-spec parse_vector(
gwr@parser@binary_reader:binary_reader(),
fun((gwr@parser@binary_reader:binary_reader()) -> {ok,
{gwr@parser@binary_reader:binary_reader(), HCZ}} |
{error, binary()})
) -> {ok, {gwr@parser@binary_reader:binary_reader(), list(HCZ)}} |
{error, binary()}.
parse_vector(Reader, Parse_element) ->
gleam@result:'try'(
gwr@parser@value_parser:parse_unsigned_leb128_integer(Reader),
fun(_use0) ->
{Reader@1, Vector_length} = _use0,
gleam@bool:guard(
Vector_length =:= 0,
{ok, {Reader@1, []}},
fun() ->
gleam@result:'try'(
gleam@iterator:try_fold(
gleam@iterator:range(0, Vector_length - 1),
{Reader@1, []},
fun(State, _) ->
{Reader@2, Objects_list} = State,
gleam@bool:guard(
not gwr@parser@binary_reader:can_read(
Reader@2
),
{ok, State},
fun() ->
gleam@result:'try'(
Parse_element(Reader@2),
fun(_use0@1) ->
{Reader@3, Object} = _use0@1,
{ok,
{Reader@3,
lists:append(
Objects_list,
[Object]
)}}
end
)
end
)
end
),
fun(_use0@2) ->
{Reader@4, Objects_list@1} = _use0@2,
{ok, {Reader@4, Objects_list@1}}
end
)
end
)
end
).