@@ -370,11 +370,15 @@ format_error_1({redefine_bif_import,{F,A}}) ->
370
370
import directive overrides auto-imported BIF ~w /~w --
371
371
use "-compile({no_auto_import,[~w /~w ]})." to resolve name clash
372
372
""" , [F ,A ,F ,A ]};
373
- format_error_1 ({deprecated , MFA , String , Rel }) ->
373
+ format_error_1 ({deprecated , MFA , String , Rel }) when is_tuple (MFA ) ->
374
+ format_error_1 ({deprecated , format_mfa (MFA ), String , Rel });
375
+ format_error_1 ({deprecated , Thing , String , Rel }) when is_list (String ) ->
374
376
{~ " ~s is deprecated and will be removed in ~s ; ~s " ,
375
- [format_mfa (MFA ), Rel , String ]};
376
- format_error_1 ({deprecated , MFA , String }) when is_list (String ) ->
377
- {~ " ~s is deprecated; ~s " , [format_mfa (MFA ), String ]};
377
+ [Thing , Rel , String ]};
378
+ format_error_1 ({deprecated , MFA , String }) when is_tuple (MFA ) ->
379
+ format_error_1 ({deprecated , format_mfa (MFA ), String });
380
+ format_error_1 ({deprecated , Thing , String }) when is_list (String ) ->
381
+ {~ " ~s is deprecated; ~s " , [Thing , String ]};
378
382
format_error_1 ({deprecated_type , {M1 , F1 , A1 }, String , Rel }) ->
379
383
{~ " the type ~p :~p~s is deprecated and will be removed in ~s ; ~s " ,
380
384
[M1 , F1 , gen_type_paren (A1 ), Rel , String ]};
@@ -2485,14 +2489,23 @@ gexpr({op,_Anno,EqOp,L,R}, Vt, St0) when EqOp =:= '=:='; EqOp =:= '=/=' ->
2485
2489
gexpr ({op ,Anno ,Op ,L ,R }, Vt , St0 ) ->
2486
2490
{Avt ,St1 } = gexpr_list ([L ,R ], Vt , St0 ),
2487
2491
case is_gexpr_op (Op , 2 ) of
2488
- true -> {Avt ,St1 };
2492
+ true -> {Avt ,warn_obsolete_op ( Op , 2 , Anno , St1 ) };
2489
2493
false -> {Avt ,add_error (Anno , illegal_guard_expr , St1 )}
2490
2494
end ;
2491
2495
% % Everything else is illegal! You could put explicit tests here to
2492
2496
% % better error diagnostics.
2493
2497
gexpr (E , _Vt , St ) ->
2494
2498
{[],add_error (element (2 , E ), illegal_guard_expr , St )}.
2495
2499
2500
+ warn_obsolete_op (Op , A , Anno , St ) ->
2501
+ case {Op , A } of
2502
+ {'and' , 2 } ->
2503
+ add_warning (Anno , {deprecated , " 'and'" , " use 'andalso' instead" , " OTP 29" }, St );
2504
+ {'or' , 2 } ->
2505
+ add_warning (Anno , {deprecated , " 'or'" , " use 'orelse' instead" , " OTP 29" }, St );
2506
+ _ -> St
2507
+ end .
2508
+
2496
2509
% % gexpr_list(Expressions, VarTable, State) ->
2497
2510
% % {UsedVarTable,State'}
2498
2511
@@ -2857,8 +2870,9 @@ expr({op,Anno,Op,L,R}, Vt, St0) when Op =:= 'orelse'; Op =:= 'andalso' ->
2857
2870
expr ({op ,_Anno ,EqOp ,L ,R }, Vt , St0 ) when EqOp =:= '=:=' ; EqOp =:= '=/=' ->
2858
2871
St = expr_check_match_zero (R , expr_check_match_zero (L , St0 )),
2859
2872
expr_list ([L ,R ], Vt , St ); % They see the same variables
2860
- expr ({op ,_Anno ,_Op ,L ,R }, Vt , St ) ->
2861
- expr_list ([L ,R ], Vt , St ); % They see the same variables
2873
+ expr ({op ,Anno ,Op ,L ,R }, Vt , St ) ->
2874
+ St1 = warn_obsolete_op (Op , 2 , Anno , St ),
2875
+ expr_list ([L ,R ], Vt , St1 ); % They see the same variables
2862
2876
% % The following are not allowed to occur anywhere!
2863
2877
expr ({remote ,_Anno ,M ,_F }, _Vt , St ) ->
2864
2878
{[],add_error (erl_parse :first_anno (M ), illegal_expr , St )};
0 commit comments