OSDN Git Service

2009-08-28 Sebastian Pop <sebastian.pop@amd.com>
[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-2009, 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 Output;  use Output;
27 with Stringt; use Stringt;
28
29 package body Prj.Err is
30
31    -----------------------
32    -- Obsolescent_Check --
33    -----------------------
34
35    procedure Obsolescent_Check (S : Source_Ptr) is
36       pragma Warnings (Off, S);
37    begin
38       null;
39    end Obsolescent_Check;
40
41    ---------------
42    -- Post_Scan --
43    ---------------
44
45    procedure Post_Scan is
46       Debug_Tokens : constant Boolean := False;
47
48    begin
49       --  Change operator symbol to literal strings, since that's the way
50       --  we treat all strings in a project file.
51
52       if Token = Tok_Operator_Symbol
53         or else Token = Tok_String_Literal
54       then
55          Token := Tok_String_Literal;
56          String_To_Name_Buffer (String_Literal_Id);
57          Token_Name := Name_Find;
58       end if;
59
60       if Debug_Tokens then
61          Write_Line (Token_Type'Image (Token));
62
63          if Token = Tok_Identifier
64            or else Token = Tok_String_Literal
65          then
66             Write_Line ("  " & Get_Name_String (Token_Name));
67          end if;
68       end if;
69    end Post_Scan;
70
71    ---------------
72    -- Error_Msg --
73    ---------------
74
75    procedure Error_Msg
76      (Flags    : Processing_Flags;
77       Msg      : String;
78       Location : Source_Ptr := No_Location;
79       Project  : Project_Id := null)
80    is
81       Real_Location : Source_Ptr := Location;
82
83    begin
84       --  Display the error message in the traces so that it appears in the
85       --  correct location in the traces (otherwise error messages are only
86       --  displayed at the end and it is difficult to see when they were
87       --  triggered)
88
89       if Current_Verbosity = High then
90          Write_Line ("ERROR: " & Msg);
91       end if;
92
93       --  If location of error is unknown, use the location of the project
94
95       if Real_Location = No_Location
96         and then Project /= null
97       then
98          Real_Location := Project.Location;
99       end if;
100
101       if Real_Location = No_Location then
102
103          --  If still null, we are parsing a project that was created in-memory
104          --  so we shouldn't report errors for projects that the user has no
105          --  access to in any case.
106
107          return;
108       end if;
109
110       --  Report the error through Errutil, so that duplicate errors are
111       --  properly removed, messages are sorted, and correctly interpreted,...
112
113       Errutil.Error_Msg (Msg, Real_Location);
114
115       --  Let the application know there was an error
116
117       if Flags.Report_Error /= null then
118          Flags.Report_Error
119            (Project,
120             Is_Warning => Msg (Msg'First) = '?' or else Msg (Msg'First) = '<');
121       end if;
122    end Error_Msg;
123
124 end Prj.Err;