Current section
Files
Jump to
Current section
Files
src/taffy@parser@types.erl
-module(taffy@parser@types).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/taffy/parser/types.gleam").
-export([register_anchor/3, resolve_alias/2, enter_depth/1, exit_depth/1, new/1]).
-export_type([parser/0, parse_error/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-type parser() :: {parser,
list({taffy@lexer:token(), integer()}),
list({taffy@lexer:token(), integer()}),
integer(),
gleam@dict:dict(binary(), taffy@value:yaml_value()),
gleam@option:option(integer()),
boolean(),
integer(),
boolean(),
list(binary()),
integer(),
integer(),
integer()}.
-type parse_error() :: {parse_error, binary(), integer()}.
-file("src/taffy/parser/types.gleam", 65).
?DOC(false).
-spec register_anchor(parser(), binary(), taffy@value:yaml_value()) -> parser().
register_anchor(Parser, Name, Val) ->
{parser,
erlang:element(2, Parser),
erlang:element(3, Parser),
erlang:element(4, Parser),
gleam@dict:insert(erlang:element(5, Parser), Name, Val),
erlang:element(6, Parser),
erlang:element(7, Parser),
erlang:element(8, Parser),
erlang:element(9, Parser),
erlang:element(10, Parser),
erlang:element(11, Parser),
erlang:element(12, Parser),
erlang:element(13, Parser)}.
-file("src/taffy/parser/types.gleam", 73).
?DOC(false).
-spec resolve_alias(parser(), binary()) -> {ok,
{taffy@value:yaml_value(), parser()}} |
{error, binary()}.
resolve_alias(Parser, Name) ->
case gleam_stdlib:map_get(erlang:element(5, Parser), Name) of
{error, _} ->
{error, <<"unknown"/utf8>>};
{ok, Val} ->
Cost = taffy@value:size(Val),
Remaining = erlang:element(11, Parser) - Cost,
case Remaining < 0 of
true ->
{error, <<"budget exceeded"/utf8>>};
false ->
{ok,
{Val,
{parser,
erlang:element(2, Parser),
erlang:element(3, Parser),
erlang:element(4, Parser),
erlang:element(5, Parser),
erlang:element(6, Parser),
erlang:element(7, Parser),
erlang:element(8, Parser),
erlang:element(9, Parser),
erlang:element(10, Parser),
Remaining,
erlang:element(12, Parser),
erlang:element(13, Parser)}}}
end
end.
-file("src/taffy/parser/types.gleam", 93).
?DOC(false).
-spec enter_depth(parser()) -> {ok, parser()} | {error, nil}.
enter_depth(Parser) ->
case (erlang:element(12, Parser) + 1) > erlang:element(13, Parser) of
true ->
{error, nil};
false ->
{ok,
{parser,
erlang:element(2, Parser),
erlang:element(3, Parser),
erlang:element(4, Parser),
erlang:element(5, Parser),
erlang:element(6, Parser),
erlang:element(7, Parser),
erlang:element(8, Parser),
erlang:element(9, Parser),
erlang:element(10, Parser),
erlang:element(11, Parser),
erlang:element(12, Parser) + 1,
erlang:element(13, Parser)}}
end.
-file("src/taffy/parser/types.gleam", 100).
?DOC(false).
-spec exit_depth(parser()) -> parser().
exit_depth(Parser) ->
{parser,
erlang:element(2, Parser),
erlang:element(3, Parser),
erlang:element(4, Parser),
erlang:element(5, Parser),
erlang:element(6, Parser),
erlang:element(7, Parser),
erlang:element(8, Parser),
erlang:element(9, Parser),
erlang:element(10, Parser),
erlang:element(11, Parser),
erlang:element(12, Parser) - 1,
erlang:element(13, Parser)}.
-file("src/taffy/parser/types.gleam", 44).
?DOC(false).
-spec new(list({taffy@lexer:token(), integer()})) -> parser().
new(Tokens) ->
Initial_pos = case Tokens of
[{_, P} | _] ->
P;
[] ->
0
end,
{parser,
Tokens,
[],
Initial_pos,
maps:new(),
none,
false,
0,
false,
[],
10000000,
0,
1024}.