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 Free Software Foundation, Inc. 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify it under 8 the terms of the GNU General Public License as published by the Free 9 Software Foundation; either version 2, or (at your option) any later 10 version. 11 12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13 WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING. If not, write to the Free 19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 20 02110-1301, USA. */ 21 22 #ifndef GCC_INPUT_H 23 #define GCC_INPUT_H 24 25 #include "line-map.h" 26 extern struct line_maps line_table; 27 28 /* The location for declarations in "<built-in>" */ 29 #define BUILTINS_LOCATION ((source_location) 2) 30 31 #ifdef USE_MAPPED_LOCATION 32 33 typedef struct 34 { 35 /* The name of the source file involved. */ 36 const char *file; 37 38 /* The line-location in the source file. */ 39 int line; 40 41 int column; 42 } expanded_location; 43 44 extern expanded_location expand_location (source_location); 45 46 #define UNKNOWN_LOCATION ((source_location) 0) 47 typedef source_location location_t; /* deprecated typedef */ 48 typedef source_location source_locus; /* to be removed */ 49 50 #else /* ! USE_MAPPED_LOCATION */ 51 52 struct location_s GTY(()) 53 { 54 /* The name of the source file involved. */ 55 const char *file; 56 57 /* The line-location in the source file. */ 58 int line; 59 }; 60 61 typedef struct location_s expanded_location; 62 typedef struct location_s location_t; 63 typedef location_t *source_locus; 64 65 #define expand_location(FILELINE) (FILELINE) 66 extern location_t unknown_location; 67 #define UNKNOWN_LOCATION unknown_location 68 69 #endif /* ! USE_MAPPED_LOCATION */ 70 71 struct file_stack 72 { 73 struct file_stack *next; 74 location_t location; 75 }; 76 77 /* Top-level source file. */ 78 extern const char *main_input_filename; 79 80 extern location_t input_location; 81 #ifdef USE_MAPPED_LOCATION 82 extern void push_srcloc (location_t); 83 #else /* ! USE_MAPPED_LOCATION */ 84 extern void push_srcloc (const char *name, int line); 85 #endif /* ! USE_MAPPED_LOCATION */ 86 extern void pop_srcloc (void); 87 extern void restore_input_file_stack (int); 88 89 #define LOCATION_FILE(LOC) ((expand_location (LOC)).file) 90 #define LOCATION_LINE(LOC) ((expand_location (LOC)).line) 91 92 #define input_line LOCATION_LINE(input_location) 93 #define input_filename LOCATION_FILE(input_location) 94 95 /* Stack of currently pending input files. 96 The line member is not accurate for the innermost file on the stack. */ 97 extern struct file_stack *input_file_stack; 98 99 /* Incremented on each change to input_file_stack. */ 100 extern int input_file_stack_tick; 101 102 /* The number of bits available for input_file_stack_tick. */ 103 #define INPUT_FILE_STACK_BITS 31 104 105 #endif 106