@@ -356,11 +356,15 @@ format_error_1({redefine_bif_import,{F,A}}) ->
356356 import directive overrides auto-imported BIF ~w /~w --
357357 use "-compile({no_auto_import,[~w /~w ]})." to resolve name clash
358358 """ , [F ,A ,F ,A ]};
359- format_error_1 ({deprecated , MFA , String , Rel }) ->
359+ format_error_1 ({deprecated , MFA , String , Rel }) when is_tuple (MFA ) ->
360+ format_error_1 ({deprecated , format_mfa (MFA ), String , Rel });
361+ format_error_1 ({deprecated , Thing , String , Rel }) when is_list (String ) ->
360362 {~ " ~s is deprecated and will be removed in ~s ; ~s " ,
361- [format_mfa (MFA ), Rel , String ]};
362- format_error_1 ({deprecated , MFA , String }) when is_list (String ) ->
363- {~ " ~s is deprecated; ~s " , [format_mfa (MFA ), String ]};
363+ [Thing , Rel , String ]};
364+ format_error_1 ({deprecated , MFA , String }) when is_tuple (MFA ) ->
365+ format_error_1 ({deprecated , format_mfa (MFA ), String });
366+ format_error_1 ({deprecated , Thing , String }) when is_list (String ) ->
367+ {~ " ~s is deprecated; ~s " , [Thing , String ]};
364368format_error_1 ({deprecated_type , {M1 , F1 , A1 }, String , Rel }) ->
365369 {~ " the type ~p :~p~s is deprecated and will be removed in ~s ; ~s " ,
366370 [M1 , F1 , gen_type_paren (A1 ), Rel , String ]};
@@ -2392,14 +2396,23 @@ gexpr({op,_Anno,EqOp,L,R}, Vt, St0) when EqOp =:= '=:='; EqOp =:= '=/=' ->
23922396gexpr ({op ,Anno ,Op ,L ,R }, Vt , St0 ) ->
23932397 {Avt ,St1 } = gexpr_list ([L ,R ], Vt , St0 ),
23942398 case is_gexpr_op (Op , 2 ) of
2395- true -> {Avt ,St1 };
2399+ true -> {Avt ,warn_obsolete_op ( Op , 2 , Anno , St1 ) };
23962400 false -> {Avt ,add_error (Anno , illegal_guard_expr , St1 )}
23972401 end ;
23982402% % Everything else is illegal! You could put explicit tests here to
23992403% % better error diagnostics.
24002404gexpr (E , _Vt , St ) ->
24012405 {[],add_error (element (2 , E ), illegal_guard_expr , St )}.
24022406
2407+ warn_obsolete_op (Op , A , Anno , St ) ->
2408+ case {Op , A } of
2409+ {'and' , 2 } ->
2410+ add_warning (Anno , {deprecated , " 'and'" , " use 'andalso' instead" , " OTP 29" }, St );
2411+ {'or' , 2 } ->
2412+ add_warning (Anno , {deprecated , " 'or'" , " use 'orelse' instead" , " OTP 29" }, St );
2413+ _ -> St
2414+ end .
2415+
24032416% % gexpr_list(Expressions, VarTable, State) ->
24042417% % {UsedVarTable,State'}
24052418
@@ -2812,8 +2825,9 @@ expr({op,Anno,Op,L,R}, Vt, St0) when Op =:= 'orelse'; Op =:= 'andalso' ->
28122825expr ({op ,_Anno ,EqOp ,L ,R }, Vt , St0 ) when EqOp =:= '=:=' ; EqOp =:= '=/=' ->
28132826 St = expr_check_match_zero (R , expr_check_match_zero (L , St0 )),
28142827 expr_list ([L ,R ], Vt , St ); % They see the same variables
2815- expr ({op ,_Anno ,_Op ,L ,R }, Vt , St ) ->
2816- expr_list ([L ,R ], Vt , St ); % They see the same variables
2828+ expr ({op ,Anno ,Op ,L ,R }, Vt , St ) ->
2829+ St1 = warn_obsolete_op (Op , 2 , Anno , St ),
2830+ expr_list ([L ,R ], Vt , St1 ); % They see the same variables
28172831% % The following are not allowed to occur anywhere!
28182832expr ({remote ,_Anno ,M ,_F }, _Vt , St ) ->
28192833 {[],add_error (erl_parse :first_anno (M ), illegal_expr , St )};
0 commit comments