akhamoth/src/akh_source_map.erl
2025-02-25 18:34:39 -05:00

21 lines
622 B
Erlang

-module(akh_source_map).
-include("akh_source_map.hrl").
-export([
empty/0,
insert/3,
get_loc/2
]).
-spec empty() -> source_map().
empty() -> gb_trees:empty().
-spec insert(Offset :: non_neg_integer(), Line :: pos_integer(), source_map()) ->
source_map().
insert(Offset, Line, SourceMap) -> gb_trees:insert(Offset, Line, SourceMap).
-spec get_loc(Offset :: non_neg_integer(), source_map()) -> #loc{}.
get_loc(Offset, SourceMap) ->
case gb_trees:smaller(Offset, SourceMap) of
{Start, Line} -> #loc{line = Line, col = Offset - Start - 1};
none -> #loc{line = 0, col = Offset}
end.