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 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 2, or (at your option) any later 10version. 11 12GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License 18along with GCC; see the file COPYING. If not, write to the Free 19Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 2002110-1301, USA. */ 21 22#ifndef GCC_INPUT_H 23#define GCC_INPUT_H 24 25#include "line-map.h" 26extern 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 33typedef 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 44extern expanded_location expand_location (source_location); 45 46#define UNKNOWN_LOCATION ((source_location) 0) 47typedef source_location location_t; /* deprecated typedef */ 48typedef source_location source_locus; /* to be removed */ 49 50#else /* ! USE_MAPPED_LOCATION */ 51 52struct 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 61typedef struct location_s expanded_location; 62typedef struct location_s location_t; 63typedef location_t *source_locus; 64 65#define expand_location(FILELINE) (FILELINE) 66extern location_t unknown_location; 67#define UNKNOWN_LOCATION unknown_location 68 69#endif /* ! USE_MAPPED_LOCATION */ 70 71struct file_stack 72{ 73 struct file_stack *next; 74 location_t location; 75}; 76 77/* Top-level source file. */ 78extern const char *main_input_filename; 79 80extern location_t input_location; 81#ifdef USE_MAPPED_LOCATION 82extern void push_srcloc (location_t); 83#else /* ! USE_MAPPED_LOCATION */ 84extern void push_srcloc (const char *name, int line); 85#endif /* ! USE_MAPPED_LOCATION */ 86extern void pop_srcloc (void); 87extern 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. */ 97extern struct file_stack *input_file_stack; 98 99/* Incremented on each change to input_file_stack. */ 100extern 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