diff options
author | Hans Bolinder <hasse@erlang.org> | 2021-03-15 06:51:34 +0100 |
---|---|---|
committer | Hans Bolinder <hasse@erlang.org> | 2021-03-15 06:51:34 +0100 |
commit | 337be5f912eb7acef3b59f3752600df4e331fe45 (patch) | |
tree | 505c6796480318f7e14a49cfbad8fcb183de50d9 /lib | |
parent | 13f941d2ed90b3dcb0f8fc97bbad79bcdc474f64 (diff) | |
parent | 67100e3243fd1bc56a00e0987bafb58e8a19f0e4 (diff) | |
download | erlang-337be5f912eb7acef3b59f3752600df4e331fe45.tar.gz |
Merge branch 'hasse/stdlib/column_fixes/PR-16824'
* hasse/stdlib/column_fixes/PR-16824:
stdlib: Fix minor issues regarding error locations
Diffstat (limited to 'lib')
-rw-r--r-- | lib/compiler/src/v3_core.erl | 6 | ||||
-rw-r--r-- | lib/compiler/test/compile_SUITE.erl | 10 | ||||
-rw-r--r-- | lib/compiler/test/warnings_SUITE.erl | 4 | ||||
-rw-r--r-- | lib/stdlib/src/erl_expand_records.erl | 11 | ||||
-rw-r--r-- | lib/stdlib/src/erl_lint.erl | 4 | ||||
-rw-r--r-- | lib/stdlib/src/erl_parse.yrl | 34 | ||||
-rw-r--r-- | lib/stdlib/test/qlc_SUITE.erl | 2 |
7 files changed, 37 insertions, 34 deletions
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl index cd5c4f5090..396ae6f25d 100644 --- a/lib/compiler/src/v3_core.erl +++ b/lib/compiler/src/v3_core.erl @@ -960,8 +960,8 @@ maybe_warn_repeated_keys(Ck, K0, Used, St) -> K = cerl:concrete(Ck), case sets:is_element(K,Used) of true -> - Location = element(2, K0), - {Used, add_warning(Location, {map_key_repeated,K}, St)}; + L = erl_parse:first_anno(K0), + {Used, add_warning(L, {map_key_repeated,K}, St)}; false -> {sets:add_element(K,Used), St} end @@ -1008,7 +1008,7 @@ try_after(Line, Es0, As0, St0) -> %% to suppress false "unmatched return" warnings in tools that look at core %% Erlang, such as `dialyzer`. ta_sanitize_as([Expr], Line) -> - [{match, Line, {var,[],'_'}, Expr}]; + [{match, Line, {var,Line,'_'}, Expr}]; ta_sanitize_as([Expr | Exprs], Line) -> [Expr | ta_sanitize_as(Exprs, Line)]. diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl index 222143858e..e3f03d4959 100644 --- a/lib/compiler/test/compile_SUITE.erl +++ b/lib/compiler/test/compile_SUITE.erl @@ -915,11 +915,13 @@ tuple_calls(Config) when is_list(Config) -> Anno = erl_anno:new(1), Forms = [{attribute,Anno,export,[{size,1},{store,1}]}, {function,Anno,size,1, - [{clause,Anno,[{var,[],mod}],[], - [{call,[],{remote,[],{var,[],mod},{atom,[],size}},[]}]}]}, + [{clause,Anno,[{var,Anno,mod}],[], + [{call,Anno,{remote,Anno,{var,Anno,mod},{atom,Anno,size}}, + []}]}]}, {function,Anno,store,1, - [{clause,Anno,[{var,[],mod}],[], - [{call,[],{remote,[],{var,[],mod},{atom,[],store}},[{atom,[],key},{atom,[],value}]}]}]}], + [{clause,Anno,[{var,Anno,mod}],[], + [{call,Anno,{remote,Anno,{var,Anno,mod},{atom,Anno,store}}, + [{atom,Anno,key},{atom,Anno,value}]}]}]}], TupleCallsFalse = [{attribute,Anno,module,tuple_calls_false}|Forms], {ok,_,TupleCallsFalseBinary} = compile:forms(TupleCallsFalse, [binary]), diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl index 58ab08fb5a..6aebf61b09 100644 --- a/lib/compiler/test/warnings_SUITE.erl +++ b/lib/compiler/test/warnings_SUITE.erl @@ -101,7 +101,7 @@ pattern(Config) when is_list(Config) -> {warnings, [{{2,15},v3_core,{nomatch,pattern}}, {{6,20},v3_core,{nomatch,pattern}}, - {{11,20},v3_core,{nomatch,pattern}} + {{11,18},v3_core,{nomatch,pattern}} ]}}], [] = run(Config, Ts), ok. @@ -984,8 +984,8 @@ bit_syntax(Config) -> {{9,19},sys_core_fold,{nomatch,{bit_syntax_type,a,utf16}}}, {{10,19},sys_core_fold,{nomatch,{bit_syntax_type,a,utf32}}}, {{11,19},sys_core_fold,{nomatch,{bit_syntax_type,a,utf32}}}, + {{12,35},sys_core_fold,{nomatch,no_clause}}, {{12,37},sys_core_fold,{nomatch,{bit_syntax_size,bad}}}, - {{12,45},sys_core_fold,{nomatch,no_clause}}, {{15,21},sys_core_fold,{nomatch,{bit_syntax_unsigned,-42}}}, {{17,21},sys_core_fold,{nomatch,{bit_syntax_type,42,binary}}}, {{19,19},sys_core_fold,{nomatch,{bit_syntax_unicode,1114112}}} diff --git a/lib/stdlib/src/erl_expand_records.erl b/lib/stdlib/src/erl_expand_records.erl index ad824dae3a..08b968f18b 100644 --- a/lib/stdlib/src/erl_expand_records.erl +++ b/lib/stdlib/src/erl_expand_records.erl @@ -540,13 +540,8 @@ normalise_fields(Fs) -> record_fields(R, Anno, St) -> Fields = maps:get(R, St#exprec.records), - case St#exprec.dialyzer of - true -> - [{record_field,Anno,{atom,Anno,F},copy_expr(Di, Anno)} || - {record_field,_Anno,{atom,_AnnoA,F},Di} <- Fields]; - false -> - Fields - end. + [{record_field,Anno,{atom,Anno,F},copy_expr(Di, Anno)} || + {record_field,_Anno,{atom,_AnnoA,F},Di} <- Fields]. find_field(F, [{record_field,_,{atom,_,F},Val} | _]) -> {ok,Val}; find_field(F, [_ | Fs]) -> find_field(F, Fs); @@ -707,7 +702,7 @@ record_update(R, Name, Fs, Us0, St0) -> end, {{block,Anno,Pre ++ [{match,Anno,Var,R},Update]},St}. -%% record_match(Record, RecordName, [RecDefField], [Update], State) +%% record_match(Record, RecordName, Anno, [RecDefField], [Update], State) %% Build a 'case' expression to modify record fields. record_match(R, Name, AnnoR, Fs, Us, St0) -> diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl index db2a5f57db..4cfc3306cb 100644 --- a/lib/stdlib/src/erl_lint.erl +++ b/lib/stdlib/src/erl_lint.erl @@ -2576,8 +2576,8 @@ expr({op,Anno,Op,L,R}, Vt, St0) when Op =:= 'orelse'; Op =:= 'andalso' -> expr({op,_Anno,_Op,L,R}, Vt, St) -> expr_list([L,R], Vt, St); %They see the same variables %% The following are not allowed to occur anywhere! -expr({remote,Anno,_M,_F}, _Vt, St) -> - {[],add_error(Anno, illegal_expr, St)}. +expr({remote,_Anno,M,_F}, _Vt, St) -> + {[],add_error(erl_parse:first_anno(M), illegal_expr, St)}. %% expr_list(Expressions, Variables, State) -> %% {UsedVarTable,State} diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl index e3e72c9444..4e6f70b2ee 100644 --- a/lib/stdlib/src/erl_parse.yrl +++ b/lib/stdlib/src/erl_parse.yrl @@ -226,7 +226,7 @@ clause_body -> '->' exprs: '$2'. expr -> 'catch' expr : {'catch',?anno('$1'),'$2'}. -expr -> expr '=' expr : {match,?anno('$2'),'$1','$3'}. +expr -> expr '=' expr : {match,first_anno('$1'),'$1','$3'}. expr -> expr '!' expr : ?mkop2('$1', '$2', '$3'). expr -> expr 'orelse' expr : ?mkop2('$1', '$2', '$3'). expr -> expr 'andalso' expr : ?mkop2('$1', '$2', '$3'). @@ -240,7 +240,7 @@ expr -> function_call : '$1'. expr -> record_expr : '$1'. expr -> expr_remote : '$1'. -expr_remote -> expr_max ':' expr_max : {remote,first_anno('$1'),'$1','$3'}. +expr_remote -> expr_max ':' expr_max : {remote,?anno('$2'),'$1','$3'}. expr_remote -> expr_max : '$1'. expr_max -> var : '$1'. @@ -258,7 +258,7 @@ expr_max -> receive_expr : '$1'. expr_max -> fun_expr : '$1'. expr_max -> try_expr : '$1'. -pat_expr -> pat_expr '=' pat_expr : {match,?anno('$2'),'$1','$3'}. +pat_expr -> pat_expr '=' pat_expr : {match,first_anno('$1'),'$1','$3'}. pat_expr -> pat_expr comp_op pat_expr : ?mkop2('$1', '$2', '$3'). pat_expr -> pat_expr list_op pat_expr : ?mkop2('$1', '$2', '$3'). pat_expr -> pat_expr add_op pat_expr : ?mkop2('$1', '$2', '$3'). @@ -370,13 +370,13 @@ record_expr -> '#' atom '.' atom : record_expr -> '#' atom record_tuple : {record,?anno('$1'),element(3, '$2'),'$3'}. record_expr -> expr_max '#' atom '.' atom : - {record_field,first_anno('$1'),'$1',element(3, '$3'),'$5'}. + {record_field,?anno('$2'),'$1',element(3, '$3'),'$5'}. record_expr -> expr_max '#' atom record_tuple : - {record,first_anno('$1'),'$1',element(3, '$3'),'$4'}. + {record,?anno('$2'),'$1',element(3, '$3'),'$4'}. record_expr -> record_expr '#' atom '.' atom : - {record_field,first_anno('$1'),'$1',element(3, '$3'),'$5'}. + {record_field,?anno('$2'),'$1',element(3, '$3'),'$5'}. record_expr -> record_expr '#' atom record_tuple : - {record,first_anno('$1'),'$1',element(3, '$3'),'$4'}. + {record,?anno('$2'),'$1',element(3, '$3'),'$4'}. record_tuple -> '{' '}' : []. record_tuple -> '{' record_fields '}' : '$2'. @@ -1350,7 +1350,17 @@ first_anno(Abstract) -> catch fold_anno(F, Anno0, Abstract). last_anno(Abstract) -> - Anno = lists:last(sort_annos(Abstract)), + Fun = fun(Anno, '*') -> + Anno; + (Anno, Anno0) -> + case loc_lte(Anno, Anno0) of + true -> + Anno0; + false -> + Anno + end + end, + Anno = find_anno(Abstract, Fun), case erl_anno:end_location(Anno) of undefined -> Anno; @@ -1358,12 +1368,8 @@ last_anno(Abstract) -> erl_anno:set_location(EndLocation, Anno) end. -sort_annos(Abstract) -> - AllAnnos = fold_anno(fun(Anno, Acc) -> [Anno|Acc] end, [], Abstract), - CF = fun(Anno1, Anno2) -> - loc_lte(erl_anno:location(Anno1), erl_anno:location(Anno2)) - end, - lists:sort(CF, AllAnnos). +find_anno(Abstract, Fun) -> + fold_anno(Fun, '*', Abstract). loc_lte(Line1, Location2) when is_integer(Line1) -> loc_lte({Line1, 1}, Location2); diff --git a/lib/stdlib/test/qlc_SUITE.erl b/lib/stdlib/test/qlc_SUITE.erl index 1c1885eec4..827af0bb18 100644 --- a/lib/stdlib/test/qlc_SUITE.erl +++ b/lib/stdlib/test/qlc_SUITE.erl @@ -6289,7 +6289,7 @@ otp_7238(Config) when is_list(Config) -> <<"nomatch_template1() -> qlc:q([{X} = {} || X <- []]).">>, [], - {warnings,[{{2,27},sys_core_fold,{nomatch,no_clause}}]}} + {warnings,[{{2,23},sys_core_fold,{nomatch,no_clause}}]}} ], [] = compile(Config, T1), |