Skip to content

Commit

Permalink
Fail on uncovered lines
Browse files Browse the repository at this point in the history
  • Loading branch information
bjorng committed Aug 1, 2023
1 parent 68a8ab5 commit 6b2bc63
Show file tree
Hide file tree
Showing 22 changed files with 103 additions and 103 deletions.
4 changes: 2 additions & 2 deletions lib/compiler/src/beam_block.erl
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,9 @@ is_unused(X, [{call,A,_}|_]) when A =< X -> true;
is_unused(X, [{call_ext,A,_}|_]) when A =< X -> true;
is_unused(X, [{move,Src,Dst}|Is]) ->
case {Src,Dst} of
{{x,X},_} -> false;
{{x,X},_} -> error({?MODULE,?LINE}), false;
{_,{x,X}} -> true;
{_,_} -> is_unused(X, Is)
{_,_} -> error({?MODULE,?LINE}), is_unused(X, Is)
end;
is_unused(X, [{line,_}|Is]) -> is_unused(X, Is);
is_unused(_, _) -> false.
Expand Down
8 changes: 4 additions & 4 deletions lib/compiler/src/beam_call_types.erl
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,11 @@ will_succeed(erlang, map_size, [Arg]) ->
will_succeed(erlang, node, [Arg]) ->
succeeds_if_type(Arg, identifier);
will_succeed(erlang, 'and', [_, _]=Args) ->
succeeds_if_types(Args, beam_types:make_boolean());
error({?MODULE,?LINE}), succeeds_if_types(Args, beam_types:make_boolean());
will_succeed(erlang, 'not', [Arg]) ->
succeeds_if_type(Arg, beam_types:make_boolean());
will_succeed(erlang, 'or', [_, _]=Args) ->
succeeds_if_types(Args, beam_types:make_boolean());
error({?MODULE,?LINE}), succeeds_if_types(Args, beam_types:make_boolean());
will_succeed(erlang, 'xor', [_, _]=Args) ->
succeeds_if_types(Args, beam_types:make_boolean());
will_succeed(erlang, setelement, [Pos, Tuple0, _Value]=Args) ->
Expand Down Expand Up @@ -1143,11 +1143,11 @@ beam_bounds_type(Op, Type, [LHS, RHS]) ->
beam_bounds_type(Op, Type, [Arg]) ->
case beam_types:meet(Arg, Type) of
#t_float{elements=R} ->
#t_float{elements=beam_bounds:bounds(Op, R)};
error({?MODULE,?LINE}), #t_float{elements=beam_bounds:bounds(Op, R)};
#t_integer{elements=R} ->
#t_integer{elements=beam_bounds:bounds(Op, R)};
#t_number{elements=R} ->
#t_number{elements=beam_bounds:bounds(Op, R)};
error({?MODULE,?LINE}), #t_number{elements=beam_bounds:bounds(Op, R)};
none ->
none
end.
Expand Down
2 changes: 1 addition & 1 deletion lib/compiler/src/beam_clean.erl
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ function_renumber([{function,Name,Arity,_Entry,Asm0}|Fs], St0, Acc) ->
function_renumber([], St, Acc) -> {Acc,St}.

renumber_labels([{label,Old}|Is], [{label,New}|_]=Acc, #st{lmap=D0}=St) ->
D = [{Old,New}|D0],
error({?MODULE,?LINE}), D = [{Old,New}|D0],
renumber_labels(Is, Acc, St#st{lmap=D});
renumber_labels([{label,Old}|Is], Acc, St0) ->
New = St0#st.lc,
Expand Down
6 changes: 3 additions & 3 deletions lib/compiler/src/beam_core_to_ssa.erl
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,7 @@ translate_fc_args(As, Sub, Anno, #kern{fargs=Fargs}=St0) ->
%% The arguments for the `function_clause` exception are
%% the arguments for the current function in the correct
%% order.
{[], St0};
error({?MODULE,?LINE}), {[], St0};
false ->
%% The arguments in the `function_clause` exception don't
%% match the arguments for the current function because of
Expand All @@ -496,8 +496,8 @@ translate_fc_args(As, Sub, Anno, #kern{fargs=Fargs}=St0) ->
{As, ExtraAnno, St}.

same_args([#c_var{name=Cv}|Vs], [#b_var{name=Kv}|As], Sub) ->
get_vsub(Cv, Sub) =:= Kv andalso same_args(Vs, As, Sub);
same_args([], [], _Sub) -> true;
error({?MODULE,?LINE}), get_vsub(Cv, Sub) =:= Kv andalso same_args(Vs, As, Sub);
same_args([], [], _Sub) -> error({?MODULE,?LINE}), true;
same_args(_, _, _) -> false.

expr_map(A, Var0, Ces, Sub, St0) ->
Expand Down
4 changes: 2 additions & 2 deletions lib/compiler/src/beam_jump.erl
Original file line number Diff line number Diff line change
Expand Up @@ -576,7 +576,7 @@ extract_seq([{label,_}|_]=Is, Acc) ->
extract_seq(_, _) -> no.

extract_seq_1([{line,_}=Line|Is], Acc) ->
extract_seq_1(Is, [Line|Acc]);
error({?MODULE,?LINE}), extract_seq_1(Is, [Line|Acc]);
extract_seq_1([{label,_},{func_info,_,_,_}|_], _) ->
no;
extract_seq_1([{label,Lbl},{jump,{f,Lbl}}|_], _) ->
Expand Down Expand Up @@ -936,7 +936,7 @@ instr_labels({get_map_elements,Lbl,_Src,_List}) ->
do_instr_labels(Lbl);
instr_labels({bs_start_match4,Fail,_,_,_}) ->
case Fail of
{f,L} -> [L];
{f,L} -> error({?MODULE,?LINE}), [L];
{atom,_} -> []
end;
instr_labels({bs_match,{f,Fail},_Ctx,_List}) ->
Expand Down
4 changes: 2 additions & 2 deletions lib/compiler/src/beam_ssa.erl
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ successors(#b_blk{last=Terminator}) ->
#b_br{bool=#b_literal{val=true},succ=Succ} ->
[Succ];
#b_br{bool=#b_literal{val=false},fail=Fail} ->
[Fail];
error({?MODULE,?LINE}), [Fail];
#b_br{succ=Succ,fail=Fail} ->
[Fail,Succ];
#b_switch{fail=Fail,list=List} ->
Expand Down Expand Up @@ -554,7 +554,7 @@ mapfold_instrs(Fun, Labels, Acc0, Blocks) when is_map(Blocks) ->
Blocks :: block_map().

flatmapfold_instrs(Fun, Labels, Acc0, Blocks) when is_map(Blocks) ->
flatmapfold_instrs_1(Labels, Fun, Blocks, Acc0).
error({?MODULE,?LINE}), flatmapfold_instrs_1(Labels, Fun, Blocks, Acc0).

-type fold_fun() :: fun((label(), b_blk(), any()) -> any()).

Expand Down
6 changes: 3 additions & 3 deletions lib/compiler/src/beam_ssa_bool.erl
Original file line number Diff line number Diff line change
Expand Up @@ -1103,7 +1103,7 @@ redirect_test_1(V, SuccFail, G) ->
case SuccFail of
{fail,Fail} -> G;
{fail,_} -> not_possible();
{succ,_} -> not_possible()
{succ,_} -> error({?MODULE,?LINE}), not_possible()
end;
{br,Next} ->
case SuccFail of
Expand Down Expand Up @@ -1220,7 +1220,7 @@ redirect_phi_1(_PhiVtx, [{#b_literal{val=false},FalseExit},
beam_digraph:add_edge(G, TrueExit, Succ, next)
end;
redirect_phi_1(_PhiVtx, _Args, _SuccFail, _G, _St) ->
not_possible().
error({?MODULE,?LINE}), not_possible().

digraph_bool_def(G) ->
Vs = beam_digraph:vertices(G),
Expand Down Expand Up @@ -1353,7 +1353,7 @@ eval_safe_bool_expr(#b_set{op={bif,Bif},dst=Dst,args=Args0}, Vtx, G, Bs) ->
none ->
case {eval_instr(Succ, G, Bs#{Dst=>True}),
eval_instr(Fail, G, Bs#{Dst=>False})} of
{Same,Same} -> Same;
{Same,Same} -> error({?MODULE,?LINE}), Same;
{_,_} -> Vtx
end;
true ->
Expand Down
10 changes: 5 additions & 5 deletions lib/compiler/src/beam_ssa_bsm.erl
Original file line number Diff line number Diff line change
Expand Up @@ -965,7 +965,7 @@ collect_opt_info_1(#b_set{op=Op,anno=Anno,dst=Dst}=I, Where, UseMap, Acc0) ->
Uses0 = maps:get(Dst, UseMap, []),
case [E || {_, #b_set{op=bs_extract}=E} <- Uses0] of
[Use] -> add_unopt_binary_info(Use, false, Where, UseMap, Acc0);
[] -> Acc0
[] -> error({?MODULE,?LINE}), Acc0
end;
true ->
%% Add a warning for each use. Note that we don't do anything
Expand Down Expand Up @@ -1022,7 +1022,7 @@ add_unopt_binary_info(#b_set{anno=Anno}=I, Nested, Where, _UseMap, Acc) ->
add_unopt_binary_info(#b_ret{anno=Anno}=I, Nested, Where, _UseMap, Acc) ->
[make_promotion_warning(I, Nested, Anno, Where) | Acc];
add_unopt_binary_info(#b_br{anno=Anno}=I, Nested, Where, _UseMap, Acc) ->
[make_promotion_warning(I, Nested, Anno, Where) | Acc].
error({?MODULE,?LINE}), [make_promotion_warning(I, Nested, Anno, Where) | Acc].

make_promotion_warning(I, Nested, Anno, Where) ->
make_warning({binary_created, I, Nested}, Anno, Where).
Expand Down Expand Up @@ -1079,16 +1079,16 @@ format_opt_info_1({no_match_on_entry, Call}) ->
io_lib:format("binary is used in call to ~s which does not begin with a "
"suitable binary match", [format_call(Call)]);
format_opt_info_1({used_before_match, #b_set{op=call,args=[Call|_]}}) ->
io_lib:format("binary is used in call to ~s before being matched",
error({?MODULE,?LINE}), io_lib:format("binary is used in call to ~s before being matched",
[format_call(Call)]);
format_opt_info_1({used_before_match, #b_set{op={bif, BIF},args=Args}}) ->
io_lib:format("binary is used in ~p/~p before being matched",
[BIF, length(Args)]);
format_opt_info_1({used_before_match, #b_set{op=phi}}) ->
io_lib:format("binary is returned from an expression before being "
error({?MODULE,?LINE}), io_lib:format("binary is returned from an expression before being "
"matched", []);
format_opt_info_1({used_before_match, #b_set{op=Op}}) ->
io_lib:format("binary is used in '~p' before being matched",[Op]);
error({?MODULE,?LINE}), io_lib:format("binary is used in '~p' before being matched",[Op]);
format_opt_info_1(Term) ->
io_lib:format("~w", [Term]).

Expand Down
24 changes: 12 additions & 12 deletions lib/compiler/src/beam_ssa_codegen.erl
Original file line number Diff line number Diff line change
Expand Up @@ -873,7 +873,7 @@ will_bif_succeed(Bif, Args, ArgTypes) ->
Types = will_bif_succeed_types(Args, ArgTypes, 0),
case beam_call_types:will_succeed(erlang, Bif, Types) of
yes -> true;
_ -> false
_ -> error({?MODULE,?LINE}), false
end.

will_bif_succeed_types([#b_literal{val=Val}|Args], ArgTypes, N) ->
Expand Down Expand Up @@ -1003,7 +1003,7 @@ cg_block(Is0, Last, Next, St0) ->
%% An expression in this block *always* throws an exception, so we
%% terminate it with an 'if_end' to make sure the validator knows
%% that the following instructions won't actually be reached.
{Is,St} = cg_block(Is0, none, St0),
error({?MODULE,?LINE}), {Is,St} = cg_block(Is0, none, St0),
{Is++[if_end],St};
#cg_br{succ=Same,fail=Same} ->
{Fail,St1} = use_block_label(Same, St0),
Expand Down Expand Up @@ -1556,18 +1556,18 @@ opt_call_moves_1([{move,Src,{x,_}=Tmp}=M1,{move,Tmp,Dst}=M2|Is], Arity) ->
%% the two move instruction into one.
[{move,Src,Dst}|opt_call_moves_1(Is, Arity)];
false ->
[M1|opt_call_moves_1([M2|Is], Arity)]
error({?MODULE,?LINE}), [M1|opt_call_moves_1([M2|Is], Arity)]
end;
opt_call_moves_1([M|Ms], Arity) ->
[M|opt_call_moves_1(Ms, Arity)];
opt_call_moves_1([], _Arity) -> [].

is_killed(R, [{move,R,_}|_], _) ->
false;
error({?MODULE,?LINE}), false;
is_killed(R, [{move,_,R}|_], _) ->
true;
is_killed(R, [{move,_,_}|Is], Arity) ->
is_killed(R, Is, Arity);
error({?MODULE,?LINE}), is_killed(R, Is, Arity);
is_killed({x,_}=R, [{init_yregs,_}|Is], Arity) ->
is_killed(R, Is, Arity);
is_killed({x,X}, [], Arity) ->
Expand Down Expand Up @@ -1702,7 +1702,7 @@ build_stk([V|Vs], TmpReg, Tail) ->
I = {put_list,V,Tail,TmpReg},
[I|build_stk(Vs, TmpReg, TmpReg)];
build_stk([], _TmpReg, nil) ->
[{move,nil,{x,1}}].
error({?MODULE,?LINE}), [{move,nil,{x,1}}].

build_call(call_ext, 2, {extfunc,erlang,'!',2}, none, Dst) ->
[send|copy({x,0}, Dst)];
Expand All @@ -1716,7 +1716,7 @@ build_call(Prefix, Arity, Func, {return,Dst,none}, Dst) ->
end,
[{I,Arity,Func}];
build_call(call_ext, Arity, {extfunc,Mod,Name,Arity}=Func, {return,_,none}, _Dst) ->
true = erl_bifs:is_exit_bif(Mod, Name, Arity), %Assertion.
error({?MODULE,?LINE}), true = erl_bifs:is_exit_bif(Mod, Name, Arity), %Assertion.
[{call_ext_only,Arity,Func}];
build_call(Prefix, Arity, Func, {return,Dst,N}, Dst) when is_integer(N) ->
I = case Prefix of
Expand Down Expand Up @@ -1744,7 +1744,7 @@ build_fun_call(Arity, #tr{}=Func0, {return,Dst,N}, Dst, St0)
{Is, St};
build_fun_call(Arity, #tr{}=Func0, {return,Val,N}, _Dst, St0)
when is_integer(N) ->
Func = Func0#tr{r={x,Arity}},
error({?MODULE,?LINE}), Func = Func0#tr{r={x,Arity}},
{Tag, St} = fun_call_tag(Arity, Func, St0),
Is = [{call_fun2,Tag,Arity,Func},
{move,Val,{x,0}},
Expand All @@ -1755,7 +1755,7 @@ build_fun_call(Arity, _Func, none, Dst, St) ->
build_fun_call(Arity, _Func, {return,Dst,N}, Dst, St) when is_integer(N) ->
{[{call_fun,Arity},{deallocate,N},return], St};
build_fun_call(Arity, _Func, {return,Val,N}, _Dst, St) when is_integer(N) ->
{[{call_fun,Arity},{move,Val,{x,0}},{deallocate,N},return], St}.
error({?MODULE,?LINE}), {[{call_fun,Arity},{move,Val,{x,0}},{deallocate,N},return], St}.

fun_call_tag(Arity, #tr{t=#t_fun{arity=Arity,target={Name,TotalArity}}}, St0) ->
{FuncLbl, St} = local_func_label(Name, TotalArity, St0),
Expand All @@ -1768,7 +1768,7 @@ fun_call_tag(_Arity, _Func, St) ->
build_apply(Arity, {return,Dst,N}, Dst) when is_integer(N) ->
[{apply_last,Arity,N}];
build_apply(Arity, {return,Val,N}, _Dst) when is_integer(N) ->
[{apply,Arity}|copy(Val, {x,0})++[{deallocate,N},return]];
error({?MODULE,?LINE}), [{apply,Arity}|copy(Val, {x,0})++[{deallocate,N},return]];
build_apply(Arity, none, Dst) ->
[{apply,Arity}|copy({x,0}, Dst)].

Expand Down Expand Up @@ -1806,7 +1806,7 @@ cg_instr(put_map, [{atom,exact},SrcBadMap|_Ss], _Dst, #cg_set{anno=Anno}=Set) ->
%% optimization passes can figure out that the key is always
%% present in the map and that the operation therefore can never
%% fail.)
Live = get_live(Set),
error({?MODULE,?LINE}), Live = get_live(Set),
[{test_heap,3,Live},
{put_tuple2,{x,0},{list,[{atom,badmap},SrcBadMap]}},
line(Anno),
Expand Down Expand Up @@ -1886,7 +1886,7 @@ cg_test(put_map, Fail, [{atom,exact},SrcMap|Ss], Dst, #cg_set{anno=Anno}=Set) ->
Live = get_live(Set),
[line(Anno),{put_map_exact,Fail,SrcMap,Dst,Live,{list,Ss}}];
cg_test(set_tuple_element=Op, Fail, Args, Dst, Set) ->
{f,0} = Fail, %Assertion.
error({?MODULE,?LINE}), {f,0} = Fail, %Assertion.
cg_instr(Op, Args, Dst, Set);
cg_test(raw_raise, _Fail, Args, Dst, _I) ->
cg_instr(raw_raise, Args, Dst);
Expand Down
2 changes: 1 addition & 1 deletion lib/compiler/src/beam_ssa_dead.erl
Original file line number Diff line number Diff line change
Expand Up @@ -821,7 +821,7 @@ will_succeed_1('==', A, '/=', B) ->
A == B -> no;
true -> yes
end;
will_succeed_1('/=', A, '/=', B) when A == B -> yes;
will_succeed_1('/=', A, '/=', B) when A == B -> error({?MODULE,?LINE}), yes;
will_succeed_1('/=', A, '==', B) when A == B -> no;

will_succeed_1(_, _, _, _) -> 'maybe'.
Expand Down
14 changes: 7 additions & 7 deletions lib/compiler/src/beam_ssa_opt.erl
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,7 @@ merge_updates_bs([{LblA,
}=BlkB} | Bs]) ->
Spec = case SpecA =:= SpecB of
true -> SpecA;
false -> #b_literal{val=copy}
false -> error({?MODULE,?LINE}), #b_literal{val=copy}
end,
List = merge_update_record_lists(ListA ++ ListB, #{}),
Update = Update0#b_set{args=[Spec, Size, Src | List]},
Expand Down Expand Up @@ -606,7 +606,7 @@ c_rewrite_phi([{Value,Pred}|As], {_,Pred,Values}) ->
[{Value,P} || {_,P} <- Values] ++ As;
c_rewrite_phi([A|As], Info) ->
[A|c_rewrite_phi(As, Info)];
c_rewrite_phi([], _Info) -> [].
c_rewrite_phi([], _Info) -> error({?MODULE,?LINE}), [].

c_fix_branches([{_,Pred}|As], L, Blocks0) ->
#b_blk{last=Last0} = Blk0 = map_get(Pred, Blocks0),
Expand Down Expand Up @@ -986,7 +986,7 @@ update_tuple_merge(Src, SetOps, Updates0, Seen0) ->
%% previous index.
Updates = case sets:is_element(Index, Seen0) of
false -> [Index, Value | Updates0];
true -> Updates0
true -> error({?MODULE,?LINE}), Updates0
end,
Seen = sets:add_element(Index, Seen0),
update_tuple_merge(Ancestor, SetOps, Updates, Seen);
Expand Down Expand Up @@ -1585,7 +1585,7 @@ live_opt_is([#b_set{op={succeeded,guard},dst=SuccDst,args=[Dst]}=SuccI,
live_opt_is([I0|Is], Live, [SuccI|Acc])
end;
{false, true} ->
live_opt_is([I0|Is], Live0, Acc);
error({?MODULE,?LINE}), live_opt_is([I0|Is], Live0, Acc);
{false, false} ->
live_opt_is(Is, Live0, Acc)
end;
Expand Down Expand Up @@ -2927,7 +2927,7 @@ insert_def_is([#b_set{op=Op}=I|Is]=Is0, V, Def) ->
Action0 = case Op of
call -> beyond;
'catch_end' -> beyond;
wait_timeout -> beyond;
wait_timeout -> error({?MODULE,?LINE}), beyond;
_ -> here
end,
Action = case Is of
Expand Down Expand Up @@ -3626,7 +3626,7 @@ isolate_nifs(#b_module{body=Body0, exports=Exports0}=Module0) ->
fun(#b_set{op=call,args=[#b_local{name=N,arity=A}=Callee|Rest]}=I)->
case sets:is_element(Callee, NIFs) of
true ->
Args = [#b_remote{mod=?ISOLATION_MODULE,
error({?MODULE,?LINE}), Args = [#b_remote{mod=?ISOLATION_MODULE,
name=N,arity=A}|Rest],
I#b_set{args=Args};
false ->
Expand Down Expand Up @@ -3668,7 +3668,7 @@ restore_nifs(#b_module{exports=Exports0}=Module0, {NIFsToExport, NIFs}) ->
fun(#b_set{op=call,args=[#b_remote{name=N,arity=A}=Callee|Rest]}=I)->
case sets:is_element(Callee, NIFs) of
true ->
I#b_set{args=[#b_local{name=N,arity=A}|Rest]};
error({?MODULE,?LINE}), I#b_set{args=[#b_local{name=N,arity=A}|Rest]};
false ->
I
end;
Expand Down
12 changes: 6 additions & 6 deletions lib/compiler/src/beam_ssa_pre_codegen.erl
Original file line number Diff line number Diff line change
Expand Up @@ -959,7 +959,7 @@ sanitize_instr(is_tagged_tuple, [#b_literal{val=Tuple},
{subst,#b_literal{val=false}}
end;
sanitize_instr(succeeded, [#b_literal{}], _I) ->
{subst,#b_literal{val=true}};
error({?MODULE,?LINE}), {subst,#b_literal{val=true}};
sanitize_instr(_, _, _) ->
ok.

Expand Down Expand Up @@ -1515,7 +1515,7 @@ rce_reroute_terminator(#b_br{fail=Exit}=Last, Exit, New) ->
rce_reroute_terminator(#b_br{}=Last, _Exit, _New) ->
Last;
rce_reroute_terminator(#b_switch{fail=Exit}=Last, Exit, New) ->
rce_reroute_terminator(Last#b_switch{fail=New}, Exit, New);
error({?MODULE,?LINE}), rce_reroute_terminator(Last#b_switch{fail=New}, Exit, New);
rce_reroute_terminator(#b_switch{list=List0}=Last, Exit, New) ->
List = [if
Lbl =:= Exit -> {Arg, New};
Expand Down Expand Up @@ -1687,7 +1687,7 @@ find_rm_blocks_1([], _, _) -> [].
find_rm_act([#b_set{op=Op}|Is]) ->
case Op of
remove_message -> found;
peek_message -> prune;
peek_message -> error({?MODULE,?LINE}), prune;
recv_next -> prune;
wait_timeout -> prune;
_ -> find_rm_act(Is)
Expand Down Expand Up @@ -2452,7 +2452,7 @@ rename_vars(Vs, L, RPO, Blocks0, Count0) ->
{NewVars,Blocks,Count}.

insert_after_phis([#b_set{op=phi}=I|Is], InsertIs) ->
[I|insert_after_phis(Is, InsertIs)];
error({?MODULE,?LINE}), [I|insert_after_phis(Is, InsertIs)];
insert_after_phis(Is, InsertIs) ->
InsertIs ++ Is.

Expand Down Expand Up @@ -2733,7 +2733,7 @@ res_place_gc_instrs([], Acc) ->
res_place_test_heap(I, Acc) ->
case Acc of
[test_heap|Acc] ->
[test_heap,I|Acc];
error({?MODULE,?LINE}), [test_heap,I|Acc];
_ ->
[test_heap,I|Acc]
end.
Expand Down Expand Up @@ -2828,7 +2828,7 @@ reserve_terminator(L, Is, #b_br{bool=Bool,succ=Succ,fail=Fail},
{_, _} ->
%% Register hints from the success block may not
%% be safe at the failure block, and vice versa.
#{}
error({?MODULE,?LINE}), #{}
end;
reserve_terminator(_, _, _, _, _, _) ->
#{}.
Expand Down
Loading

0 comments on commit 6b2bc63

Please sign in to comment.