Skip to content

Commit 289ff70

Browse files
committed
Merge branch 'maint'
2 parents 9b606bc + 4448feb commit 289ff70

2 files changed

Lines changed: 37 additions & 3 deletions

File tree

lib/dialyzer/src/typer_core.erl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -593,12 +593,19 @@ write_typed_file([Ch|Chs] = Chars, File, Info, LineNo, Acc, Analysis) ->
593593
_ ->
594594
{Info, [Ch|Acc]}
595595
end,
596-
write_typed_file(Chs, File, NewInfo, NewLineNo, NewAcc, Analysis);
596+
NewFuncs = flush_line(Line, RestFuncs, Info, File, [], Analysis),
597+
write_typed_file(Chs, File, NewInfo#info{functions=NewFuncs}, NewLineNo, NewAcc, Analysis);
597598
_ ->
598599
write_typed_file(Chs, File, Info, LineNo, [Ch|Acc], Analysis)
599600
end
600601
end.
601602

603+
flush_line(Line, [{Line,F,A}|RestFuncs], Info, File, Acc, Analysis) ->
604+
ok = raw_write(F, A, Info, File, Acc, Analysis),
605+
flush_line(Line, RestFuncs, Info, File, Acc, Analysis);
606+
flush_line(_Line, Rest, _Info, _File, _Acc, _Analysis) ->
607+
Rest.
608+
602609
raw_write(F, A, Info, File, Content, #analysis{mode = Mode} = Analysis) ->
603610
TypeInfo = get_type_string(F, A, Info, file, Analysis),
604611
ContentList =

lib/dialyzer/test/typer_SUITE.erl

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
smoke/1,
2626
smoke_incremental_plt/1,
2727
gh_6296_no_spec_flag_does_not_break_records/1,
28-
contract_violation/1]).
28+
contract_violation/1,
29+
typer_multiple_fun_in_same_line/1]).
2930

3031
-include_lib("common_test/include/ct.hrl").
3132

@@ -35,7 +36,8 @@ all() ->
3536
[smoke,
3637
smoke_incremental_plt,
3738
gh_6296_no_spec_flag_does_not_break_records,
38-
contract_violation].
39+
contract_violation,
40+
typer_multiple_fun_in_same_line].
3941

4042
smoke(Config) ->
4143
OutDir = proplists:get_value(priv_dir, Config),
@@ -92,6 +94,31 @@ gh_6296_no_spec_flag_does_not_break_records(Config) ->
9294
run(Config, Args, Src, Res),
9395
ok.
9496

97+
typer_multiple_fun_in_same_line(Config) ->
98+
Code = <<"-module(typer_multiple_fun).
99+
f() -> ok. g() -> ok.">>,
100+
PrivDir = proplists:get_value(priv_dir, Config),
101+
Src = filename:join(PrivDir, "typer_multiple_fun.erl"),
102+
ok = file:write_file(Src, Code),
103+
{ok, Beam} = compile(Config, Code, typer_multiple_fun, []),
104+
Plt = PrivDir ++ "dialyzer_iplt",
105+
_ = dialyzer:run([{analysis_type, incremental},
106+
{files, [Beam]},
107+
{apps, [stdlib, kernel, erts]},
108+
{from, byte_code},
109+
{init_plt, Plt},
110+
{output_plt, Plt}]),
111+
Args = io_lib:format("--no_spec --show --plt ~ts", [Plt]),
112+
Res = ["^$",
113+
"^%% File:",
114+
"^%% ----",
115+
"^-spec f",
116+
"^-spec g",
117+
"^_OK_"],
118+
119+
run(Config, Args, Src, Res),
120+
ok.
121+
95122
smoke_incremental_plt(Config) ->
96123
Code = <<"-module(typer_test_module).
97124
-compile([export_all,nowarn_export_all]).

0 commit comments

Comments
 (0)