Ergo.Context.update_tracks
You're seeing just the function
update_tracks
, go back to Ergo.Context module for more information.
Link to this function
update_tracks(ctx, ref, description)
We track which parsers have operated on the input.
Examples
First example checks that we keep references
iex> alias Ergo.Context
iex> import Ergo.{Terminals, Combinators}
iex> context = Context.new("Hello World")
iex> parser = many(char(?H))
iex> track = {parser.ref, parser.description, 0, 1, 1}
iex> assert %Context{tracks: [^track]} = context2 = Context.update_tracks(context, parser.ref, parser.description)
iex> parser2 = many(char(?e))
iex> track2 = {parser2.ref, parser2.description, 0, 1, 1}
iex> assert %Context{tracks: [^track2, ^track]} = Context.update_tracks(context2, parser2.ref, parser2.description)
Second example checks that we throw if we get a cycle
iex> import Ergo.{Terminals, Combinators}
iex> parser = many(choice([many(ws()), char(?})]))
iex> assert_raise Ergo.Context.CycleError, fn -> Ergo.parse(parser, "}}}") end