input.h 2.82 KB
Newer Older
1 2
/* Declarations for variables relating to reading the source file.
   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 8 9 10
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
11

12 13 14 15
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.
16 17

You should have received a copy of the GNU General Public License
18 19 20
along with GCC; see the file COPYING.  If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.  */
21

22 23
#ifndef GCC_INPUT_H
#define GCC_INPUT_H
Richard Stallman committed
24

25
#include "line-map.h"
26 27
extern struct line_maps line_table;

28 29 30
/* The location for declarations in "<built-in>" */
#define BUILTINS_LOCATION ((source_location) 2)

31 32 33
#ifdef USE_MAPPED_LOCATION

typedef struct
34
{
35
  /* The name of the source file involved.  */
36
  const char *file;
Richard Stallman committed
37

38 39
  /* The line-location in the source file.  */
  int line;
40

41
  int column;
42 43 44 45 46 47 48 49 50 51
} expanded_location;

extern expanded_location expand_location (source_location);

#define UNKNOWN_LOCATION ((source_location) 0)
typedef source_location location_t; /* deprecated typedef */
typedef source_location source_locus; /* to be removed */

#else /* ! USE_MAPPED_LOCATION */

52 53 54 55 56 57 58 59 60 61
struct location_s GTY(())
{
  /* The name of the source file involved.  */
  const char *file;

  /* The line-location in the source file.  */
  int line;
};

typedef struct location_s expanded_location;
62
typedef struct location_s location_t;
63 64 65 66 67 68 69
typedef location_t *source_locus;

#define expand_location(FILELINE) (FILELINE)
extern location_t unknown_location;
#define UNKNOWN_LOCATION unknown_location

#endif /* ! USE_MAPPED_LOCATION */
Richard Stallman committed
70 71

struct file_stack
72 73 74 75 76 77 78 79 80
{
  struct file_stack *next;
  location_t location;
};

/* Top-level source file.  */
extern const char *main_input_filename;

extern location_t input_location;
81 82 83 84 85 86 87 88 89 90 91 92
#ifdef USE_MAPPED_LOCATION
extern void push_srcloc (location_t);
#else /* ! USE_MAPPED_LOCATION */
extern void push_srcloc (const char *name, int line);
#endif /* ! USE_MAPPED_LOCATION */
extern void pop_srcloc (void);

#define LOCATION_FILE(LOC) ((expand_location (LOC)).file)
#define LOCATION_LINE(LOC) ((expand_location (LOC)).line)

#define input_line LOCATION_LINE(input_location)
#define input_filename LOCATION_FILE(input_location)
Richard Stallman committed
93 94 95 96 97 98 99

/* Stack of currently pending input files.
   The line member is not accurate for the innermost file on the stack.  */
extern struct file_stack *input_file_stack;

/* Incremented on each change to input_file_stack.  */
extern int input_file_stack_tick;
100

101
#endif