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-2011, 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 26with Err_Vars; 27with Output; use Output; 28with Stringt; use Stringt; 29 30package 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 Debug_Output ("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 Debug_Output ("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 125end Prj.Err; 126