Current section
Files
Jump to
Current section
Files
src/gwr@parser@module_parser.erl
-module(gwr@parser@module_parser).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([parse_global/1, parse_memory/1, parse_export/1]).
-spec parse_global(gwr@parser@binary_reader:binary_reader()) -> {ok,
{gwr@parser@binary_reader:binary_reader(), gwr@syntax@module:global()}} |
{error, binary()}.
parse_global(Reader) ->
gleam@result:'try'(
gwr@parser@types_parser:parse_global_type(Reader),
fun(_use0) ->
{Reader@1, Global_type} = _use0,
gleam@result:'try'(
gwr@parser@instruction_parser:parse_expression(Reader@1),
fun(_use0@1) ->
{Reader@2, Expression} = _use0@1,
{ok, {Reader@2, {global, Global_type, Expression}}}
end
)
end
).
-spec parse_memory(gwr@parser@binary_reader:binary_reader()) -> {ok,
{gwr@parser@binary_reader:binary_reader(), gwr@syntax@module:memory()}} |
{error, binary()}.
parse_memory(Reader) ->
gleam@result:'try'(
gwr@parser@types_parser:parse_limits(Reader),
fun(_use0) ->
{Reader@1, Limits} = _use0,
{ok, {Reader@1, {memory, Limits}}}
end
).
-spec parse_export(gwr@parser@binary_reader:binary_reader()) -> {ok,
{gwr@parser@binary_reader:binary_reader(), gwr@syntax@module:export()}} |
{error, binary()}.
parse_export(Reader) ->
gleam@result:'try'(
gwr@parser@value_parser:parse_name(Reader),
fun(_use0) ->
{Reader@1, Export_name} = _use0,
gleam@result:'try'(
case gwr@parser@binary_reader:read(Reader@1, 1) of
{ok, {Reader@2, <<Id>>}} when Id =:= 16#00 ->
gleam@result:'try'(
gwr@parser@value_parser:parse_unsigned_leb128_integer(
Reader@2
),
fun(_use0@1) ->
{Reader@3, Index} = _use0@1,
{ok,
{Reader@3,
{export,
Export_name,
{function_export, Index}}}}
end
);
{ok, {Reader@4, <<Id@1>>}} when Id@1 =:= 16#01 ->
gleam@result:'try'(
gwr@parser@value_parser:parse_unsigned_leb128_integer(
Reader@4
),
fun(_use0@2) ->
{Reader@5, Index@1} = _use0@2,
{ok,
{Reader@5,
{export,
Export_name,
{table_export, Index@1}}}}
end
);
{ok, {Reader@6, <<Id@2>>}} when Id@2 =:= 16#02 ->
gleam@result:'try'(
gwr@parser@value_parser:parse_unsigned_leb128_integer(
Reader@6
),
fun(_use0@3) ->
{Reader@7, Index@2} = _use0@3,
{ok,
{Reader@7,
{export,
Export_name,
{memory_export, Index@2}}}}
end
);
{ok, {Reader@8, <<Id@3>>}} when Id@3 =:= 16#03 ->
gleam@result:'try'(
gwr@parser@value_parser:parse_unsigned_leb128_integer(
Reader@8
),
fun(_use0@4) ->
{Reader@9, Index@3} = _use0@4,
{ok,
{Reader@9,
{export,
Export_name,
{global_export, Index@3}}}}
end
);
{ok, {_, <<Unknown>>}} ->
{error,
<<<<"gwr/parser/module_parser.parse_export: unexpected export id \""/utf8,
(gleam@int:to_string(Unknown))/binary>>/binary,
"\""/utf8>>};
{error, Reason} ->
{error,
<<"gwr/parser/module_parser.parse_export: couldn't read export id: "/utf8,
Reason/binary>>};
_ ->
{error,
<<"gwr/parser/module_parser.parse_export: unknown error reading export id"/utf8>>}
end,
fun(_use0@5) ->
{Reader@10, Export} = _use0@5,
{ok, {Reader@10, Export}}
end
)
end
).