aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src/compile.erl
diff options
context:
space:
mode:
authorFredrik Gustafsson <[email protected]>2012-08-14 15:27:18 +0200
committerFredrik Gustafsson <[email protected]>2012-08-14 15:27:18 +0200
commitdf8e67e203b83f95d1e098fec88ad5d0ad840069 (patch)
tree7609e4eddc4fd4757791ce131f6dc131060b7bfc /lib/compiler/src/compile.erl
parent0c9d90f314f364e5b1301ec89d762baabc57c7aa (diff)
parentd932ad582676f1593d917f222b1d8dec71fe88b3 (diff)
downloadotp-df8e67e203b83f95d1e098fec88ad5d0ad840069.tar.gz
otp-df8e67e203b83f95d1e098fec88ad5d0ad840069.tar.bz2
otp-df8e67e203b83f95d1e098fec88ad5d0ad840069.zip
Merge branch 'nox/compile-column-numbers' into maint
* nox/compile-column-numbers: Fix messages ordering with column numbers Fix type compile:err_info/0 Test column number reporting in error_SUITE Fix printing of errors with column numbers Create a new "column" option in compile Allow setting of initial position in epp Export type erl_scan:location/0
Diffstat (limited to 'lib/compiler/src/compile.erl')
-rw-r--r--lib/compiler/src/compile.erl25
1 files changed, 21 insertions, 4 deletions
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index 7365706b94..fbaacc08da 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -41,7 +41,7 @@
-type option() :: atom() | {atom(), term()} | {'d', atom(), term()}.
--type err_info() :: {erl_scan:line(), module(), term()}. %% ErrorDescriptor
+-type err_info() :: erl_scan:error_info(). %% ErrorDescriptor
-type errors() :: [{file:filename(), [err_info()]}].
-type warnings() :: [{file:filename(), [err_info()]}].
-type mod_ret() :: {'ok', module()}
@@ -363,7 +363,17 @@ messages_per_file(Ms) ->
(_) -> false
end, A)
end, T, PrioMs),
- Prio = lists:sort(fun({_,{L1,_,_}}, {_,{L2,_,_}}) -> L1 =< L2 end,
+ Prio = lists:sort(fun({_,{As1,_,_}}, {_,{As2,_,_}}) ->
+ {location, Loc1} =
+ erl_scan:attributes_info(As1, location),
+ {location, Loc2} =
+ erl_scan:attributes_info(As2, location),
+ case {Loc1, Loc2} of
+ {{L1, _}, L2} when is_integer(L2) -> L1 < L2;
+ {L1, {L2, _}} when is_integer(L1) -> L1 =< L2;
+ {_, _} -> Loc1 =< Loc2
+ end
+ end,
lists:append(Prio0)),
flatmap(fun mpf/1, [Prio, Rest]).
@@ -773,7 +783,8 @@ parse_module(St) ->
Opts = St#compile.options,
Cwd = ".",
IncludePath = [Cwd, St#compile.dir|inc_paths(Opts)],
- R = epp:parse_file(St#compile.ifile, IncludePath, pre_defs(Opts)),
+ AtPos = initial_position(Opts),
+ R = epp:parse_file(St#compile.ifile, AtPos, IncludePath, pre_defs(Opts)),
case R of
{ok,Forms} ->
{ok,St#compile{code=Forms}};
@@ -1423,7 +1434,7 @@ report_warnings(#compile{options=Opts,warnings=Ws0}) ->
end.
format_message(F, P, [{{Line,Column}=Loc,Mod,E}|Es]) ->
- M = {{F,Loc},io_lib:format("~s:~w:~w ~s~s\n",
+ M = {{F,Loc},io_lib:format("~s:~w:~w: ~s~s\n",
[F,Line,Column,P,Mod:format_error(E)])},
[M|format_message(F, P, Es)];
format_message(F, P, [{Line,Mod,E}|Es]) ->
@@ -1479,6 +1490,12 @@ objfile(Base, St) ->
tmpfile(Ofile) ->
reverse([$#|tl(reverse(Ofile))]).
+initial_position(Opts) ->
+ case lists:member(column, Opts) of
+ true -> {1, 1};
+ false -> 1
+ end.
+
%% pre_defs(Options)
%% inc_paths(Options)
%% Extract the predefined macros and include paths from the option list.