Home | History | Annotate | Download | only in include
      1 /* Declarations for variables relating to reading the source file.
      2    Used by parsers, lexical analyzers, and error message routines.
      3    Copyright (C) 1993, 1997, 1998, 2000, 2003, 2004, 2007, 2008
      4    Free Software Foundation, Inc.
      5 
      6 This file is part of GCC.
      7 
      8 GCC is free software; you can redistribute it and/or modify it under
      9 the terms of the GNU General Public License as published by the Free
     10 Software Foundation; either version 3, or (at your option) any later
     11 version.
     12 
     13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
     14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
     15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     16 for more details.
     17 
     18 You should have received a copy of the GNU General Public License
     19 along with GCC; see the file COPYING3.  If not see
     20 <http://www.gnu.org/licenses/>.  */
     21 
     22 #ifndef GCC_INPUT_H
     23 #define GCC_INPUT_H
     24 
     25 #include "line-map.h"
     26 
     27 extern GTY(()) struct line_maps *line_table;
     28 
     29 /* A value which will never be used to represent a real location.  */
     30 #define UNKNOWN_LOCATION ((source_location) 0)
     31 
     32 /* The location for declarations in "<built-in>" */
     33 #define BUILTINS_LOCATION ((source_location) 2)
     34 
     35 typedef struct GTY (())
     36 {
     37   /* The name of the source file involved.  */
     38   const char *file;
     39 
     40   /* The line-location in the source file.  */
     41   int line;
     42 
     43   int column;
     44 
     45   /* In a system header?. */
     46   bool sysp;
     47 } expanded_location;
     48 
     49 extern expanded_location expand_location (source_location);
     50 
     51 /* Historically GCC used location_t, while cpp used source_location.
     52    This could be removed but it hardly seems worth the effort.  */
     53 typedef source_location location_t;
     54 
     55 /* Top-level source file.  */
     56 extern const char *main_input_filename;
     57 
     58 extern location_t input_location;
     59 
     60 #define LOCATION_FILE(LOC) ((expand_location (LOC)).file)
     61 #define LOCATION_LINE(LOC) ((expand_location (LOC)).line)
     62 
     63 #define input_line LOCATION_LINE (input_location)
     64 #define input_filename LOCATION_FILE (input_location)
     65 #define in_system_header_at(LOC) ((expand_location (LOC)).sysp != 0)
     66 #define in_system_header (in_system_header_at (input_location))
     67 
     68 #endif
     69