File 3521-Quote-all-occurrences-of-the-maybe-atom.patch of Package erlang
From 8ba0863a1409d4e51209c6c4671702fe4ff23c30 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Mon, 14 Feb 2022 11:46:28 +0100
Subject: [PATCH] Quote all occurrences of the `maybe` atom
`maybe` will (most likely) become a keyword in a future release.
---
lib/compiler/src/beam_call_types.erl | 16 +++++++-------
lib/compiler/src/beam_ssa_dead.erl | 26 +++++++++++------------
lib/compiler/src/beam_ssa_pre_codegen.erl | 4 ++--
lib/compiler/src/beam_ssa_type.erl | 20 ++++++++---------
lib/compiler/src/beam_validator.erl | 12 +++++------
lib/compiler/src/sys_core_fold.erl | 8 +++----
6 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/lib/compiler/src/beam_call_types.erl b/lib/compiler/src/beam_call_types.erl
index 0926f60195..fbed43b43f 100644
--- a/lib/compiler/src/beam_call_types.erl
+++ b/lib/compiler/src/beam_call_types.erl
@@ -38,7 +38,7 @@
Mod :: atom(),
Func :: atom(),
ArgTypes :: [normal_type()],
- Result :: yes | no | maybe.
+ Result :: 'yes' | 'no' | 'maybe'.
will_succeed(erlang, Op, [LHS, RHS])
when Op =:= '+'; Op =:= '-'; Op =:= '*' ->
@@ -62,7 +62,7 @@ will_succeed(erlang, '--', [LHS, RHS]) -
{yes, yes} -> yes;
{no, _} -> no;
{_, no} -> no;
- {_, _} -> maybe
+ {_, _} -> 'maybe'
end;
will_succeed(erlang, BoolOp, [LHS, RHS]) when BoolOp =:= 'and';
BoolOp =:= 'or' ->
@@ -71,7 +71,7 @@ will_succeed(erlang, BoolOp, [LHS, RHS])
{yes, yes} -> yes;
{no, _} -> no;
{_, no} -> no;
- {_, _} -> maybe
+ {_, _} -> 'maybe'
end;
will_succeed(erlang, bit_size, [Arg]) ->
succeeds_if_type(Arg, #t_bitstring{});
@@ -139,26 +139,26 @@ fails_on_conflict([ArgType | Args], [Req
_ -> fails_on_conflict(Args, Types)
end;
fails_on_conflict([], []) ->
- maybe.
+ 'maybe'.
succeeds_if_type(ArgType, Required) ->
case beam_types:meet(ArgType, Required) of
ArgType -> yes;
none -> no;
- _ -> maybe
+ _ -> 'maybe'
end.
succeeds_if_smallish(#t_integer{elements={Min,Max}})
when abs(Min) bsr 128 =:= 0, abs(Max) bsr 128 =:= 0 ->
yes;
succeeds_if_smallish(_) ->
- maybe.
+ 'maybe'.
succeeds_if_smallish(LHS, RHS) ->
case {succeeds_if_smallish(LHS),
succeeds_if_smallish(RHS)} of
{yes, yes} -> yes;
- {_, _} -> maybe
+ {_, _} -> 'maybe'
end.
%%
diff --git a/lib/compiler/src/beam_ssa_dead.erl b/lib/compiler/src/beam_ssa_dead.erl
index 1d53dfab81..1d12666ba1 100644
--- a/lib/compiler/src/beam_ssa_dead.erl
+++ b/lib/compiler/src/beam_ssa_dead.erl
@@ -543,7 +543,7 @@ eval_switch_1([{Lit,Lbl}|T], Arg, PrevOp, Fail) ->
no ->
%% This branch will never be taken.
eval_switch_1(T, Arg, PrevOp, Fail);
- maybe ->
+ 'maybe' ->
%% This label could be reached.
eval_switch_1(T, Arg, PrevOp, none)
end;
@@ -707,11 +707,11 @@ eval_test(Bif, Args, #st{test=Prev}) ->
case will_succeed(Prev, Test) of
yes -> #b_literal{val=true};
no -> #b_literal{val=false};
- maybe -> none
+ 'maybe' -> none
end
end.
-%% will_succeed(PrevCondition, Condition) -> yes | no | maybe
+%% will_succeed(PrevCondition, Condition) -> yes | no | 'maybe'
%% PrevCondition is a condition known to be true. This function
%% will tell whether Condition will succeed.
@@ -733,29 +733,29 @@ will_succeed({{'not',is_boolean},Var}, {'=:=',Var,#b_literal{val=Lit}})
when is_boolean(Lit) ->
no;
will_succeed({_,_}, {_,_}) ->
- maybe;
+ 'maybe';
will_succeed({_,_}, {_,_,_}) ->
- maybe;
+ 'maybe';
will_succeed({_,_,_}, {_,_}) ->
- maybe;
+ 'maybe';
will_succeed({_,_,_}, {_,_,_}) ->
- maybe.
+ 'maybe'.
will_succeed_test({'not',Test1}, Test2) ->
case Test1 =:= Test2 of
true -> no;
- false -> maybe
+ false -> 'maybe'
end;
will_succeed_test(is_tuple, {is_tagged_tuple,_,_}) ->
- maybe;
+ 'maybe';
will_succeed_test({is_tagged_tuple,_,_}, is_tuple) ->
yes;
will_succeed_test(is_list, is_nonempty_list) ->
- maybe;
+ 'maybe';
will_succeed_test(is_nonempty_list, is_list) ->
yes;
will_succeed_test(_T1, _T2) ->
- maybe.
+ 'maybe'.
will_succeed_1('=:=', A, '<', B) ->
if
@@ -824,7 +824,7 @@ will_succeed_1('==', A, '/=', B) ->
will_succeed_1('/=', A, '/=', B) when A == B -> yes;
will_succeed_1('/=', A, '==', B) when A == B -> no;
-will_succeed_1(_, _, _, _) -> maybe.
+will_succeed_1(_, _, _, _) -> 'maybe'.
will_succeed_vars('=/=', Var, '=:=', Var) -> no;
will_succeed_vars('=:=', Var, '=/=', Var) -> no;
@@ -834,7 +834,7 @@ will_succeed_vars('=:=', Val, '=<', Val) -> yes;
will_succeed_vars('/=', Var, '==', Var) -> no;
will_succeed_vars('==', Var, '/=', Var) -> no;
-will_succeed_vars(_, _, _, _) -> maybe.
+will_succeed_vars(_, _, _, _) -> 'maybe'.
eval_type_test(Test, Arg) ->
case eval_type_test_1(Test, Arg) of
diff --git a/lib/compiler/src/beam_ssa_pre_codegen.erl b/lib/compiler/src/beam_ssa_pre_codegen.erl
index cfd2d196fb..46ed12490f 100644
--- a/lib/compiler/src/beam_ssa_pre_codegen.erl
+++ b/lib/compiler/src/beam_ssa_pre_codegen.erl
@@ -2509,7 +2509,7 @@ reserve_zreg([#b_set{op=Op,dst=Dst}], #b_br{bool=Dst}, ShortLived, A) ->
case use_zreg(Op) of
yes -> [{Dst,z} | A];
no -> A;
- maybe -> reserve_test_zreg(Dst, ShortLived, A)
+ 'maybe' -> reserve_test_zreg(Dst, ShortLived, A)
end;
reserve_zreg([#b_set{op=Op,dst=Dst} | Is], Last, ShortLived, A) ->
case use_zreg(Op) of
@@ -2541,7 +2541,7 @@ use_zreg(get_tl) -> no;
use_zreg(get_tuple_element) -> no;
%% Assume the instruction can use a z register, provided it's the last in its
%% block and that the result is only used in the terminator.
-use_zreg(_) -> maybe.
+use_zreg(_) -> 'maybe'.
%% If V is defined just before a branch, we may be able to combine it into a
%% test instruction.
Type = case will_succeed(I, Ts0, Ds0, Sub) of
yes -> beam_types:make_atom(true);
no -> beam_types:make_atom(false);
- maybe -> beam_types:make_boolean()
+ 'maybe' -> beam_types:make_boolean()
end,
case Type of
#t_atom{elements=[true]} ->
@@ -1097,7 +1097,7 @@ will_succeed_1(#b_set{op=bs_start_match,
%% Is it at all possible to match?
case beam_types:meet(ArgType, #t_bs_matchable{}) of
none -> no;
- _ -> maybe
+ _ -> 'maybe'
end
end;
@@ -1127,17 +1127,17 @@ will_succeed_1(#b_set{op=bs_create_bin},
%% fail. Construction is unlikely to fail, and if it fails, the
%% instruction in the runtime system will generate an exception with
%% better information of what went wrong.
- maybe;
+ 'maybe';
will_succeed_1(#b_set{op=bs_match,
args=[#b_literal{val=Type},_,_,#b_literal{val=Size},_]},
_Src, _Ts, _Sub) ->
if
is_integer(Size), Size >= 0 ->
- maybe;
+ 'maybe';
Type =:= binary, Size =:= all ->
%% `all` is a legal size for binary segments at the end of
%% a binary pattern.
- maybe;
+ 'maybe';
true ->
%% Invalid size. Matching will fail.
no
@@ -1145,18 +1145,18 @@ will_succeed_1(#b_set{op=bs_match,
%% These operations may fail even though we know their return value on success.
will_succeed_1(#b_set{op=call}, _Src, _Ts, _Sub) ->
- maybe;
+ 'maybe';
will_succeed_1(#b_set{op=get_map_element}, _Src, _Ts, _Sub) ->
- maybe;
+ 'maybe';
will_succeed_1(#b_set{op=wait_timeout}, _Src, _Ts, _Sub) ->
%% It is essential to keep the {succeeded,body} instruction to
%% ensure that the failure edge, which potentially leads to a
%% landingpad, is preserved. If the failure edge is removed, a Y
%% register holding a `try` tag could be reused prematurely.
- maybe;
+ 'maybe';
will_succeed_1(#b_set{}, _Src, _Ts, _Sub) ->
- maybe.
+ 'maybe'.
simplify_is_record(I, #t_tuple{exact=Exact,
size=Size,
@@ -1170,7 +1170,7 @@ simplify_is_record(I, #t_tuple{exact=Exa
%% Is it at all possible for the tag to match?
case beam_types:meet(raw_type(RecTag, Ts), TagType) of
none -> no;
- _ -> maybe
+ _ -> 'maybe'
end
end,
if
diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl
index 8a5fd5b416..7471da226d 100644
--- a/lib/compiler/src/beam_validator.erl
+++ b/lib/compiler/src/beam_validator.erl
@@ -1236,7 +1236,7 @@ validate_tail_call(Deallocate, Func, Live, #vst{current=#st{numy=NumY}}=Vst0) ->
%% The call cannot fail; we don't need to handle exceptions
Vst = deallocate(Vst0),
verify_return(Vst);
- maybe when Deallocate =:= NumY ->
+ 'maybe' when Deallocate =:= NumY ->
%% The call may fail; make sure we update exception state
Vst = deallocate(Vst0),
branch(?EXCEPTION_LABEL, Vst, fun verify_return/1);
@@ -1269,7 +1269,7 @@ validate_body_call(Func, Live,
case will_call_succeed(Func, Vst) of
yes ->
SuccFun(Vst);
- maybe ->
+ 'maybe' ->
branch(?EXCEPTION_LABEL, Vst, SuccFun);
no ->
branch(?EXCEPTION_LABEL, Vst, fun kill_state/1)
@@ -1482,7 +1482,7 @@ validate_bif(Kind, Op, Fail, Ss, Dst, OrigVst, Vst) ->
%% This BIF always fails; jump directly to the fail block or
%% exception handler.
branch(Fail, Vst, fun kill_state/1);
- maybe ->
+ 'maybe' ->
validate_bif_1(Kind, Op, Fail, Ss, Dst, OrigVst, Vst)
end.
@@ -3102,7 +3102,7 @@ will_bif_succeed(raise, [_,_], _Vst) ->
will_bif_succeed(Op, Ss, Vst) ->
case is_float_arith_bif(Op, Ss) of
true ->
- maybe;
+ 'maybe';
false ->
Args = [normalize(get_term_type(Arg, Vst)) || Arg <- Ss],
beam_call_types:will_succeed(erlang, Op, Args)
@@ -3119,10 +3119,10 @@ will_call_succeed({f,Lbl}, #vst{ft=Ft}) ->
#{Lbl := #{always_fails := true}} ->
no;
#{} ->
- maybe
+ 'maybe'
end;
will_call_succeed(_Call, _Vst) ->
- maybe.
+ 'maybe'.
get_call_args(Arity, Vst) ->
get_call_args_1(0, Arity, Vst).
diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl
index c8d1b00378..c25702f63a 100644
--- a/lib/compiler/src/sys_core_fold.erl
+++ b/lib/compiler/src/sys_core_fold.erl
@@ -1433,15 +1433,15 @@ shadow_warning([C|Cs], Line, Anno) ->
shadow_warning(Cs, Line, Anno);
shadow_warning([], _, _) -> ok.
-%% will_succeed(Guard) -> yes | maybe | no.
+%% will_succeed(Guard) -> yes | 'maybe' | no.
%% Test if we know whether a guard will succeed/fail or just don't
%% know. Be VERY conservative!
will_succeed(#c_literal{val=true}) -> yes;
will_succeed(#c_literal{val=false}) -> no;
-will_succeed(_Guard) -> maybe.
+will_succeed(_Guard) -> 'maybe'.
-%% will_match(Expr, [Pattern]) -> yes | maybe.
+%% will_match(Expr, [Pattern]) -> yes | 'maybe'.
%% We KNOW that this function is only used after optimizations
%% in case_opt/4. Therefore clauses that can definitely not match
%% have already been pruned.
@@ -1451,7 +1451,7 @@ will_match(#c_values{es=Es}, Ps) ->
will_match(E, [P]) ->
will_match_1(cerl_clauses:match(P, E)).
-will_match_1({false,_}) -> maybe;
+will_match_1({false,_}) -> 'maybe';
will_match_1({true,_}) -> yes.
%% opt_bool_case(CoreExpr, Sub) - CoreExpr'.
--
2.34.1