File otp_src_19.0.5-dializer-relax-check-plt.patch of Package erlang
diff -Ndurp otp_src_19.0.5/lib/dialyzer/src/dialyzer_plt.erl otp_src_19.0.5-dializer-relax-check-plt/lib/dialyzer/src/dialyzer_plt.erl
--- otp_src_19.0.5/lib/dialyzer/src/dialyzer_plt.erl 2016-08-16 11:25:33.000000000 +0300
+++ otp_src_19.0.5-dializer-relax-check-plt/lib/dialyzer/src/dialyzer_plt.erl 2016-09-01 17:58:15.178284788 +0300
@@ -249,10 +249,10 @@ from_file(FileName, ReturnInfo) ->
case get_record_from_file(FileName) of
{ok, Rec} ->
case check_version(Rec) of
- error ->
+ false ->
Msg = io_lib:format("Old PLT file ~s\n", [FileName]),
plt_error(Msg);
- ok ->
+ true ->
Plt = #plt{info = Rec#file_plt.info,
types = Rec#file_plt.types,
contracts = Rec#file_plt.contracts,
@@ -285,13 +285,8 @@ included_files(FileName) ->
Error
end.
-check_version(#file_plt{version = ?VSN, implementation_md5 = ImplMd5}) ->
- case compute_new_md5(ImplMd5, [], []) of
- ok -> ok;
- {differ, _, _} -> error;
- {error, _} -> error
- end;
-check_version(#file_plt{}) -> error.
+check_version(#file_plt{version = ?VSN}) -> true;
+check_version(#file_plt{}) -> false.
get_record_from_file(FileName) ->
case file:read_file(FileName) of
@@ -401,15 +396,16 @@ to_file(FileName,
check_plt(FileName, RemoveFiles, AddFiles) ->
case get_record_from_file(FileName) of
{ok, #file_plt{file_md5_list = Md5, mod_deps = ModDeps} = Rec} ->
+ Md5Res = compute_new_md5(Md5, RemoveFiles, AddFiles),
case check_version(Rec) of
- ok ->
- case compute_new_md5(Md5, RemoveFiles, AddFiles) of
+ true ->
+ case Md5Res of
ok -> ok;
{differ, NewMd5, DiffMd5} -> {differ, NewMd5, DiffMd5, ModDeps};
{error, _What} = Err -> Err
end;
- error ->
- case compute_new_md5(Md5, RemoveFiles, AddFiles) of
+ false ->
+ case Md5Res of
ok -> {old_version, Md5};
{differ, NewMd5, _DiffMd5} -> {old_version, NewMd5};
{error, _What} = Err -> Err
@@ -463,12 +459,9 @@ compute_md5_from_file(File) ->
Msg = io_lib:format("Not a regular file: ~s\n", [File]),
throw({dialyzer_error, Msg});
true ->
- case dialyzer_utils:get_abstract_code_from_beam(File) of
- error ->
- Msg = io_lib:format("Could not get abstract code for file: ~s (please recompile it with +debug_info)\n", [File]),
- throw({dialyzer_error, Msg});
- {ok, Abs} ->
- erlang:md5(term_to_binary(Abs))
+ case beam_lib:md5(File) of
+ {ok, {_, MD5}} -> MD5;
+ E -> throw({dialyzer_error, beam_lib:format_error(E)})
end
end.