/lib/dialyzer/test/map_SUITE_data/src/contract_violation.erl

https://github.com/cmullaparthi/otp · Erlang · 29 lines · 21 code · 7 blank · 1 comment · 0 complexity · f3d16ce55e3610b76b10a358879fbb92 MD5 · raw file

  1. -module(contract_violation).
  2. -export([entry/1, beam_disasm_lines/2]).
  3. %%-----------------------------------------------------------------------
  4. -type lines() :: #{non_neg_integer() => {string(), non_neg_integer()}}.
  5. entry(Bin) ->
  6. I = 42,
  7. case beam_disasm_lines(Bin, ':-)') of
  8. #{I := Loc} -> {good, Loc};
  9. _ -> bad
  10. end.
  11. -spec beam_disasm_lines(binary() | none, module()) -> lines().
  12. beam_disasm_lines(none, _) -> #{};
  13. beam_disasm_lines(<<NumLines:32, LineBin:NumLines/binary, FileBin/binary>>,
  14. _Module) ->
  15. Lines = binary_to_term(LineBin),
  16. Files = binary_to_term(FileBin),
  17. lines_collect_items(Lines, Files, #{}).
  18. lines_collect_items([], _, Acc) -> Acc;
  19. lines_collect_items([{FileNo, LineNo}|Rest], Files, Acc) ->
  20. #{FileNo := File} = Files,
  21. lines_collect_items(
  22. Rest, Files, Acc#{map_size(Acc)+1 => {location, File, LineNo}}).