anchor.diff:  	 lambdas = [],				%[{...}]
   	 literals = dict:new()	    :: literal_tab(),
   	 fnames = gb_trees:empty()  :: fname_tab(),
  -	 lines = gb_trees:empty()   :: line_tab(),
  +	 lines = #{}                :: line_tab(),
   	 num_lines = 0		    :: non_neg_integer(), %Number of line instructions
   	 next_import = 0	    :: non_neg_integer(),
   	 string_offset = 0	    :: non_neg_integer(),
  
positive.code:     %% No location available. Return the special pre-defined
      %% index 0.
      {0,Dict#asm{num_lines=N+1}};
  line([{location,Name,Line}], #asm{lines=Lines0,num_lines=N}=Dict0) ->
      {FnameIndex,Dict1} = fname(Name, Dict0),
      case gb_trees:lookup({FnameIndex,Line}, Lines0) of
  	{value,Index} ->
  	    {Index,Dict1#asm{num_lines=N+1}};
  	none ->
  	    Index = gb_trees:size(Lines0) + 1,
  	    Lines = gb_trees:insert({FnameIndex,Line}, Index, Lines0),
  	    Dict = Dict1#asm{lines=Lines,num_lines=N+1},
  	    {Index,Dict}
      end.
  
  fname(Name, #asm{fnames=Fnames0}=Dict) ->
  
negative.code: -type atom_tab()   :: #{atom() => index()}.
  -type import_tab() :: gb_trees:tree(mfa(), index()).
  -type fname_tab()  :: gb_trees:tree(Name :: term(), index()).
  -type line_tab()   :: #{{Fname :: index(), Line :: term()} => index()}.
  -type literal_tab() :: dict:dict(Literal :: term(), index()).
  
  -record(asm,
  