OSDN Git Service

PR target/50678
[pf3gnuchains/gcc-fork.git] / gcc / ada / prj-err.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT COMPILER COMPONENTS                         --
4 --                                                                          --
5 --                              P R J . E R R                               --
6 --                                                                          --
7 --                                 B o d y                                  --
8 --                                                                          --
9 --          Copyright (C) 2002-2010, Free Software Foundation, Inc.         --
10 --                                                                          --
11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
12 -- terms of the  GNU General Public License as published  by the Free Soft- --
13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
17 -- for  more details.  You should have  received  a copy of the GNU General --
18 -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
19 -- http://www.gnu.org/licenses for a complete copy of the license.          --
20 --                                                                          --
21 -- GNAT was originally developed  by the GNAT team at  New York University. --
22 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
23 --                                                                          --
24 ------------------------------------------------------------------------------
25
26 with Err_Vars;
27 with Output;   use Output;
28 with Stringt;  use Stringt;
29
30 package body Prj.Err is
31
32    ---------------
33    -- Post_Scan --
34    ---------------
35
36    procedure Post_Scan is
37       Debug_Tokens : constant Boolean := False;
38
39    begin
40       --  Change operator symbol to literal strings, since that's the way
41       --  we treat all strings in a project file.
42
43       if Token = Tok_Operator_Symbol
44         or else Token = Tok_String_Literal
45       then
46          Token := Tok_String_Literal;
47          String_To_Name_Buffer (String_Literal_Id);
48          Token_Name := Name_Find;
49       end if;
50
51       if Debug_Tokens then
52          Write_Line (Token_Type'Image (Token));
53
54          if Token = Tok_Identifier
55            or else Token = Tok_String_Literal
56          then
57             Write_Line ("  " & Get_Name_String (Token_Name));
58          end if;
59       end if;
60    end Post_Scan;
61
62    ---------------
63    -- Error_Msg --
64    ---------------
65
66    procedure Error_Msg
67      (Flags    : Processing_Flags;
68       Msg      : String;
69       Location : Source_Ptr := No_Location;
70       Project  : Project_Id := null)
71    is
72       Real_Location : Source_Ptr := Location;
73
74    begin
75       --  Display the error message in the traces so that it appears in the
76       --  correct location in the traces (otherwise error messages are only
77       --  displayed at the end and it is difficult to see when they were
78       --  triggered)
79
80       if Current_Verbosity = High then
81          Write_Line ("ERROR: " & Msg);
82       end if;
83
84       --  If location of error is unknown, use the location of the project
85
86       if Real_Location = No_Location
87         and then Project /= null
88       then
89          Real_Location := Project.Location;
90       end if;
91
92       if Real_Location = No_Location then
93
94          --  If still null, we are parsing a project that was created in-memory
95          --  so we shouldn't report errors for projects that the user has no
96          --  access to in any case.
97
98          if Current_Verbosity = High then
99             Write_Line ("Error in in-memory project, ignored");
100          end if;
101
102          return;
103       end if;
104
105       --  Report the error through Errutil, so that duplicate errors are
106       --  properly removed, messages are sorted, and correctly interpreted,...
107
108       Errutil.Error_Msg (Msg, Real_Location);
109
110       --  Let the application know there was an error
111
112       if Flags.Report_Error /= null then
113          Flags.Report_Error
114            (Project,
115             Is_Warning =>
116               Msg (Msg'First) = '?'
117                 or else (Msg (Msg'First) = '<'
118                           and then Err_Vars.Error_Msg_Warn)
119                 or else (Msg (Msg'First) = '\'
120                           and then Msg (Msg'First + 1) = '<'
121                           and then Err_Vars.Error_Msg_Warn));
122       end if;
123    end Error_Msg;
124
125 end Prj.Err;