@@ -366,11 +366,15 @@ format_error_1({redefine_bif_import,{F,A}}) ->
366366 import directive overrides auto-imported BIF ~w /~w --
367367 use "-compile({no_auto_import,[~w /~w ]})." to resolve name clash
368368 """ , [F ,A ,F ,A ]};
369- format_error_1 ({deprecated , MFA , String , Rel }) ->
369+ format_error_1 ({deprecated , MFA , String , Rel }) when is_tuple (MFA ) ->
370+ format_error_1 ({deprecated , format_mfa (MFA ), String , Rel });
371+ format_error_1 ({deprecated , Thing , String , Rel }) when is_list (String ) ->
370372 {~ " ~s is deprecated and will be removed in ~s ; ~s " ,
371- [format_mfa (MFA ), Rel , String ]};
372- format_error_1 ({deprecated , MFA , String }) when is_list (String ) ->
373- {~ " ~s is deprecated; ~s " , [format_mfa (MFA ), String ]};
373+ [Thing , Rel , String ]};
374+ format_error_1 ({deprecated , MFA , String }) when is_tuple (MFA ) ->
375+ format_error_1 ({deprecated , format_mfa (MFA ), String });
376+ format_error_1 ({deprecated , Thing , String }) when is_list (String ) ->
377+ {~ " ~s is deprecated; ~s " , [Thing , String ]};
374378format_error_1 ({deprecated_type , {M1 , F1 , A1 }, String , Rel }) ->
375379 {~ " the type ~p :~p~s is deprecated and will be removed in ~s ; ~s " ,
376380 [M1 , F1 , gen_type_paren (A1 ), Rel , String ]};
@@ -2449,14 +2453,23 @@ gexpr({op,_Anno,EqOp,L,R}, Vt, St0) when EqOp =:= '=:='; EqOp =:= '=/=' ->
24492453gexpr ({op ,Anno ,Op ,L ,R }, Vt , St0 ) ->
24502454 {Avt ,St1 } = gexpr_list ([L ,R ], Vt , St0 ),
24512455 case is_gexpr_op (Op , 2 ) of
2452- true -> {Avt ,St1 };
2456+ true -> {Avt ,warn_obsolete_op ( Op , 2 , Anno , St1 ) };
24532457 false -> {Avt ,add_error (Anno , illegal_guard_expr , St1 )}
24542458 end ;
24552459% % Everything else is illegal! You could put explicit tests here to
24562460% % better error diagnostics.
24572461gexpr (E , _Vt , St ) ->
24582462 {[],add_error (element (2 , E ), illegal_guard_expr , St )}.
24592463
2464+ warn_obsolete_op (Op , A , Anno , St ) ->
2465+ case {Op , A } of
2466+ {'and' , 2 } ->
2467+ add_warning (Anno , {deprecated , " 'and'" , " use 'andalso' instead" , " OTP 29" }, St );
2468+ {'or' , 2 } ->
2469+ add_warning (Anno , {deprecated , " 'or'" , " use 'orelse' instead" , " OTP 29" }, St );
2470+ _ -> St
2471+ end .
2472+
24602473% % gexpr_list(Expressions, VarTable, State) ->
24612474% % {UsedVarTable,State'}
24622475
@@ -2869,8 +2882,9 @@ expr({op,Anno,Op,L,R}, Vt, St0) when Op =:= 'orelse'; Op =:= 'andalso' ->
28692882expr ({op ,_Anno ,EqOp ,L ,R }, Vt , St0 ) when EqOp =:= '=:=' ; EqOp =:= '=/=' ->
28702883 St = expr_check_match_zero (R , expr_check_match_zero (L , St0 )),
28712884 expr_list ([L ,R ], Vt , St ); % They see the same variables
2872- expr ({op ,_Anno ,_Op ,L ,R }, Vt , St ) ->
2873- expr_list ([L ,R ], Vt , St ); % They see the same variables
2885+ expr ({op ,Anno ,Op ,L ,R }, Vt , St ) ->
2886+ St1 = warn_obsolete_op (Op , 2 , Anno , St ),
2887+ expr_list ([L ,R ], Vt , St1 ); % They see the same variables
28742888% % The following are not allowed to occur anywhere!
28752889expr ({remote ,_Anno ,M ,_F }, _Vt , St ) ->
28762890 {[],add_error (erl_parse :first_anno (M ), illegal_expr , St )};
0 commit comments