This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: Combine C/C++ RIDs
- To: gcc-patches at gcc dot gnu dot org
- Subject: PATCH: Combine C/C++ RIDs
- From: Mark Mitchell <mark at codesourcery dot com>
- Date: Fri, 30 Jun 2000 11:23:00 -0700
- Organization: CodeSourcery, LLC
C and C++ shared most of the same reserved identifiers, but not the
same RID_ enumerals. This patch allows us to share this enumeration
between the two front-ends, which is a) the Right Thing, and b) will
be convenient for some work that Ben is finishing up. :-)
--
Mark Mitchell mark@codesourcery.com
CodeSourcery, LLC http://www.codesourcery.com
2000-06-30 Mark Mitchell <mark@codesourcery.com>
* Makefile.in (c-common.o): Don't depend on c-tree.h or c-lex.h.
* c-common.c (ridpointers): Declare.
* c-common.h (enum rid): Declare.
(NORID): Likewise.
(ridpointers): Likewise.
* c-lex.c (ridpointers): Don't declare.
(init_lex): Initialize ridpointers.
* c-lex.h (enum rid): Don't declare.
(NORID): Likewise.
(RID_FIRST_MODIFIER): Likewise.
(ridpointers): Likewise.
2000-06-30 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (ridpointers): Don't declare.
* decl.c (record_builtin_type): Use CP_RID_MAX instead of RID_MAX.
(record_builtin_java_type): Likewise.
(init_decl_processing): Likewise.
* lex.c: Move inclusion of lex.h.
(ridpointers): Don't define.
(init_parse): Initialize ripdointers. Use CP_RID_MAX instead of
RID_MAX.
* lex.h (enum rid): Rename to ...
(enum cp_rid): ... this.
(ridpointers): Don't declare.
* parse.y: Move inclusion of lex.h.
* parse.c: Regenerated.
* spew.c: Move inclusion of lex.h.
Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/egcs/gcc/Makefile.in,v
retrieving revision 1.471
diff -c -p -r1.471 Makefile.in
*** Makefile.in 2000/06/29 17:31:03 1.471
--- Makefile.in 2000/06/30 17:57:04
*************** s-under: $(GCC_PASSES)
*** 1154,1160 ****
# A file used by all variants of C.
! c-common.o : c-common.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-lex.h \
c-common.h flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
$(EXPR_H)
--- 1154,1160 ----
# A file used by all variants of C.
! c-common.o : c-common.c $(CONFIG_H) system.h $(TREE_H) \
c-common.h flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
$(EXPR_H)
Index: c-common.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/c-common.c,v
retrieving revision 1.122
diff -c -p -r1.122 c-common.c
*** c-common.c 2000/06/30 00:26:00 1.122
--- c-common.c 2000/06/30 17:57:06
*************** enum cpp_token cpp_token;
*** 134,139 ****
--- 134,143 ----
tree c_global_trees[CTI_MAX];
+ /* The elements of `ridpointers' are identifier nodes for the reserved
+ type names and storage classes. It is indexed by a RID_... value. */
+ tree *ridpointers;
+
tree (*make_fname_decl) PARAMS ((tree, const char *, int));
/* Nonzero means the expression being parsed will never be evaluated.
Index: c-common.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/c-common.h,v
retrieving revision 1.19
diff -c -p -r1.19 c-common.h
*** c-common.h 2000/06/30 00:26:01 1.19
--- c-common.h 2000/06/30 17:57:07
*************** along with GNU CC; see the file COPYING.
*** 19,24 ****
--- 19,75 ----
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+ /* Reserved identifiers. */
+
+ enum rid
+ {
+ RID_UNUSED,
+ RID_INT,
+ RID_CHAR,
+ RID_FLOAT,
+ RID_DOUBLE,
+ RID_VOID,
+ RID_UNUSED1,
+
+ /* The first seven are in the order of most frequently used,
+ as emiprically determined. */
+ RID_FIRST_MODIFIER,
+ RID_EXTERN = RID_FIRST_MODIFIER,
+ RID_CONST,
+ RID_LONG,
+ RID_TYPEDEF,
+ RID_UNSIGNED,
+ RID_SHORT,
+ RID_INLINE,
+ RID_AUTO,
+ RID_STATIC,
+ RID_REGISTER,
+ RID_SIGNED,
+ RID_RESTRICT,
+ RID_VOLATILE,
+ RID_BOUNDED,
+ RID_UNBOUNDED,
+ RID_NOALIAS,
+ RID_ITERATOR,
+ RID_COMPLEX,
+
+ RID_IN,
+ RID_OUT,
+ RID_INOUT,
+ RID_BYCOPY,
+ RID_BYREF,
+ RID_ONEWAY,
+ RID_ID,
+
+ RID_MAX
+ };
+
+ #define NORID RID_UNUSED
+
+ /* The elements of `ridpointers' are identifier nodes for the reserved
+ type names and storage classes. It is indexed by a RID_... value. */
+ extern tree *ridpointers;
+
/* Standard named or nameless data types of the C compiler. */
enum c_tree_index
Index: c-lex.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/c-lex.c,v
retrieving revision 1.85
diff -c -p -r1.85 c-lex.c
*** c-lex.c 2000/06/26 16:42:22 1.85
--- c-lex.c 2000/06/30 17:57:12
*************** FILE *finput;
*** 62,72 ****
extern void yyprint PARAMS ((FILE *, int, YYSTYPE));
- /* The elements of `ridpointers' are identifier nodes
- for the reserved type names and storage classes.
- It is indexed by a RID_... value. */
- tree ridpointers[(int) RID_MAX];
-
/* Cause the `yydebug' variable to be defined. */
#define YYDEBUG 1
--- 62,67 ----
*************** init_lex ()
*** 284,289 ****
--- 279,285 ----
maxtoken = 40;
token_buffer = (char *) xmalloc (maxtoken + 2);
+ ridpointers = (tree *) xcalloc ((int) RID_MAX, sizeof (tree));
ridpointers[(int) RID_INT] = get_identifier ("int");
ridpointers[(int) RID_CHAR] = get_identifier ("char");
ridpointers[(int) RID_VOID] = get_identifier ("void");
Index: c-lex.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/c-lex.h,v
retrieving revision 1.14
diff -c -p -r1.14 c-lex.h
*** c-lex.h 2000/06/19 22:28:28 1.14
--- c-lex.h 2000/06/30 17:57:12
*************** along with GNU CC; see the file COPYING.
*** 18,74 ****
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-
-
- enum rid
- {
- RID_UNUSED,
- RID_INT,
- RID_CHAR,
- RID_FLOAT,
- RID_DOUBLE,
- RID_VOID,
- RID_UNUSED1,
-
- RID_UNSIGNED,
- RID_SHORT,
- RID_LONG,
- RID_AUTO,
- RID_STATIC,
- RID_EXTERN,
- RID_REGISTER,
- RID_TYPEDEF,
- RID_SIGNED,
- RID_CONST,
- RID_RESTRICT,
- RID_VOLATILE,
- RID_BOUNDED,
- RID_UNBOUNDED,
- RID_INLINE,
- RID_NOALIAS,
- RID_ITERATOR,
- RID_COMPLEX,
-
- RID_IN,
- RID_OUT,
- RID_INOUT,
- RID_BYCOPY,
- RID_BYREF,
- RID_ONEWAY,
- RID_ID,
-
- RID_MAX
- };
-
- #define NORID RID_UNUSED
-
- #define RID_FIRST_MODIFIER RID_UNSIGNED
-
- /* The elements of `ridpointers' are identifier nodes
- for the reserved type names and storage classes.
- It is indexed by a RID_... value. */
- extern tree ridpointers[(int) RID_MAX];
-
extern char *token_buffer; /* Pointer to token buffer. */
extern tree make_pointer_declarator PARAMS ((tree, tree));
--- 18,23 ----
Index: cp/cp-tree.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/cp-tree.h,v
retrieving revision 1.493
diff -c -p -r1.493 cp-tree.h
*** cp-tree.h 2000/06/30 07:16:34 1.493
--- cp-tree.h 2000/06/30 17:57:21
*************** struct language_function
*** 1034,1041 ****
extern tree current_function_return_value;
extern tree global_namespace;
- extern tree ridpointers[];
-
#define ansi_opname(CODE) \
(operator_name_info[(int) (CODE)].identifier)
#define ansi_assopname(CODE) \
--- 1034,1039 ----
Index: cp/decl.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/decl.c,v
retrieving revision 1.647
diff -c -p -r1.647 decl.c
*** decl.c 2000/06/30 07:16:34 1.647
--- decl.c 2000/06/30 17:57:29
*************** signal_catch (sig)
*** 6123,6129 ****
}
/* Push the declarations of builtin types into the namespace.
! RID_INDEX, if < RID_MAX is the index of the builtin type
in the array RID_POINTERS. NAME is the name used when looking
up the builtin type. TYPE is the _TYPE node for the builtin type. */
--- 6123,6129 ----
}
/* Push the declarations of builtin types into the namespace.
! RID_INDEX, if < CP_RID_MAX is the index of the builtin type
in the array RID_POINTERS. NAME is the name used when looking
up the builtin type. TYPE is the _TYPE node for the builtin type. */
*************** record_builtin_type (rid_index, name, ty
*** 6136,6142 ****
tree rname = NULL_TREE, tname = NULL_TREE;
tree tdecl = NULL_TREE;
! if ((int) rid_index < (int) RID_MAX)
rname = ridpointers[(int) rid_index];
if (name)
tname = get_identifier (name);
--- 6136,6142 ----
tree rname = NULL_TREE, tname = NULL_TREE;
tree tdecl = NULL_TREE;
! if ((int) rid_index < (int) CP_RID_MAX)
rname = ridpointers[(int) rid_index];
if (name)
tname = get_identifier (name);
*************** record_builtin_type (rid_index, name, ty
*** 6147,6153 ****
{
tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
set_identifier_type_value (tname, NULL_TREE);
! if ((int) rid_index < (int) RID_MAX)
/* Built-in types live in the global namespace. */
SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
}
--- 6147,6153 ----
{
tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
set_identifier_type_value (tname, NULL_TREE);
! if ((int) rid_index < (int) CP_RID_MAX)
/* Built-in types live in the global namespace. */
SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
}
*************** record_builtin_java_type (name, size)
*** 6190,6196 ****
TYPE_PRECISION (type) = - size;
layout_type (type);
}
! record_builtin_type (RID_MAX, name, type);
decl = TYPE_NAME (type);
/* Suppress generate debug symbol entries for these types,
--- 6190,6196 ----
TYPE_PRECISION (type) = - size;
layout_type (type);
}
! record_builtin_type (CP_RID_MAX, name, type);
decl = TYPE_NAME (type);
/* Suppress generate debug symbol entries for these types,
*************** init_decl_processing ()
*** 6372,6394 ****
record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
record_builtin_type (RID_LONG, "long int", long_integer_type_node);
record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
! record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
! record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
! record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
! record_builtin_type (RID_MAX, "long long unsigned int",
long_long_unsigned_type_node);
! record_builtin_type (RID_MAX, "long long unsigned",
long_long_unsigned_type_node);
record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
! record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
! record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
ptrdiff_type_node
= TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
/* Define both `signed char' and `unsigned char'. */
! record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
! record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
/* `unsigned long' is the standard type for sizeof.
Note that stddef.h uses `unsigned long',
--- 6372,6398 ----
record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
record_builtin_type (RID_LONG, "long int", long_integer_type_node);
record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
! record_builtin_type (CP_RID_MAX, "long unsigned int",
! long_unsigned_type_node);
! record_builtin_type (CP_RID_MAX, "unsigned long", long_unsigned_type_node);
! record_builtin_type (CP_RID_MAX, "long long int",
! long_long_integer_type_node);
! record_builtin_type (CP_RID_MAX, "long long unsigned int",
long_long_unsigned_type_node);
! record_builtin_type (CP_RID_MAX, "long long unsigned",
long_long_unsigned_type_node);
record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
! record_builtin_type (CP_RID_MAX, "short unsigned int",
! short_unsigned_type_node);
! record_builtin_type (CP_RID_MAX, "unsigned short",
! short_unsigned_type_node);
ptrdiff_type_node
= TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
/* Define both `signed char' and `unsigned char'. */
! record_builtin_type (CP_RID_MAX, "signed char", signed_char_type_node);
! record_builtin_type (CP_RID_MAX, "unsigned char", unsigned_char_type_node);
/* `unsigned long' is the standard type for sizeof.
Note that stddef.h uses `unsigned long',
*************** init_decl_processing ()
*** 6451,6457 ****
signed_size_zero_node = build_int_2 (0, 0);
record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
! record_builtin_type (RID_MAX, "long double", long_double_type_node);
pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
complex_integer_type_node));
--- 6455,6461 ----
signed_size_zero_node = build_int_2 (0, 0);
record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
! record_builtin_type (CP_RID_MAX, "long double", long_double_type_node);
pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
complex_integer_type_node));
*************** init_decl_processing ()
*** 6478,6484 ****
TYPE_QUAL_CONST));
empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
#if 0
! record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
#endif
/* Make a type to be the domain of a few array types
--- 6482,6488 ----
TYPE_QUAL_CONST));
empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
#if 0
! record_builtin_type (CP_RID_MAX, NULL_PTR, string_type_node);
#endif
/* Make a type to be the domain of a few array types
*************** init_decl_processing ()
*** 6595,6610 ****
vtable_entry_type = build_qualified_type (vtable_entry_type,
TYPE_QUAL_CONST);
}
! record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
vtbl_type_node
= build_cplus_array_type (vtable_entry_type, NULL_TREE);
layout_type (vtbl_type_node);
vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
! record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
layout_type (vtbl_ptr_type_node);
! record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
std_node = build_decl (NAMESPACE_DECL,
flag_honor_std
--- 6599,6614 ----
vtable_entry_type = build_qualified_type (vtable_entry_type,
TYPE_QUAL_CONST);
}
! record_builtin_type (CP_RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
vtbl_type_node
= build_cplus_array_type (vtable_entry_type, NULL_TREE);
layout_type (vtbl_type_node);
vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
! record_builtin_type (CP_RID_MAX, NULL_PTR, vtbl_type_node);
vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
layout_type (vtbl_ptr_type_node);
! record_builtin_type (CP_RID_MAX, NULL_PTR, vtbl_ptr_type_node);
std_node = build_decl (NAMESPACE_DECL,
flag_honor_std
Index: cp/lex.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/lex.c,v
retrieving revision 1.208
diff -c -p -r1.208 lex.c
*** lex.c 2000/06/17 02:37:23 1.208
--- lex.c 2000/06/30 17:57:32
*************** Boston, MA 02111-1307, USA. */
*** 30,37 ****
#include "system.h"
#include "input.h"
#include "tree.h"
- #include "lex.h"
#include "cp-tree.h"
#include "parse.h"
#include "flags.h"
#include "obstack.h"
--- 30,37 ----
#include "system.h"
#include "input.h"
#include "tree.h"
#include "cp-tree.h"
+ #include "lex.h"
#include "parse.h"
#include "flags.h"
#include "obstack.h"
*************** YYLTYPE yylloc; /* location data for
*** 162,172 ****
used in a context which makes it a reference to a variable. */
tree lastiddecl;
- /* The elements of `ridpointers' are identifier nodes
- for the reserved type names and storage classes.
- It is indexed by a RID_... value. */
- tree ridpointers[(int) RID_MAX];
-
/* We may keep statistics about how long which files took to compile. */
static int header_time, body_time;
static tree filename_times;
--- 162,167 ----
*************** init_parse (filename)
*** 610,615 ****
--- 605,612 ----
maxtoken = 40;
token_buffer = (char *) xmalloc (maxtoken + 2);
+ my_friendly_assert ((int) CP_RID_MAX < 64, 20000630);
+ ridpointers = (tree *) xcalloc ((int) CP_RID_MAX, sizeof (tree));
ridpointers[(int) RID_INT] = get_identifier ("int");
ridpointers[(int) RID_BOOL] = get_identifier ("bool");
ridpointers[(int) RID_CHAR] = get_identifier ("char");
*************** init_parse (filename)
*** 708,714 ****
interface_unknown = 1;
ggc_add_string_root (&internal_filename, 1);
! ggc_add_tree_root (ridpointers, RID_MAX);
ggc_add_tree_root (&defarg_fns, 1);
ggc_add_tree_root (&defarg_parm, 1);
ggc_add_tree_root (&this_filename_time, 1);
--- 705,711 ----
interface_unknown = 1;
ggc_add_string_root (&internal_filename, 1);
! ggc_add_tree_root (ridpointers, CP_RID_MAX);
ggc_add_tree_root (&defarg_fns, 1);
ggc_add_tree_root (&defarg_parm, 1);
ggc_add_tree_root (&this_filename_time, 1);
Index: cp/lex.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/lex.h,v
retrieving revision 1.11
diff -c -p -r1.11 lex.h
*** lex.h 2000/02/26 20:15:46 1.11
--- lex.h 2000/06/30 17:57:32
*************** can know your rights and responsibilitie
*** 21,38 ****
file named COPYING. Among other things, the copyright notice
and this notice must be preserved on all copies. */
!
!
! enum rid
{
! RID_UNUSED,
! RID_INT,
RID_BOOL,
- RID_CHAR,
RID_WCHAR,
- RID_FLOAT,
- RID_DOUBLE,
- RID_VOID,
/* C++ extension */
RID_CLASS,
--- 21,37 ----
file named COPYING. Among other things, the copyright notice
and this notice must be preserved on all copies. */
! enum cp_rid
{
! RID_FRIEND = RID_MAX,
! RID_VIRTUAL,
! RID_EXPLICIT,
! RID_EXPORT,
! RID_MUTABLE,
! RID_LAST_MODIFIER = RID_MUTABLE,
!
RID_BOOL,
RID_WCHAR,
/* C++ extension */
RID_CLASS,
*************** enum rid
*** 41,77 ****
RID_ENUM,
RID_LONGLONG,
- /* This is where grokdeclarator starts its search when setting the specbits.
- The first seven are in the order of most frequently used, as found
- building libg++. */
- RID_FIRST_MODIFIER,
-
- RID_EXTERN = RID_FIRST_MODIFIER,
- RID_CONST,
- RID_LONG,
- RID_TYPEDEF,
- RID_UNSIGNED,
- RID_SHORT,
- RID_INLINE,
-
- RID_STATIC,
-
- RID_REGISTER,
- RID_VOLATILE,
- RID_FRIEND,
- RID_VIRTUAL,
- RID_EXPLICIT,
- RID_EXPORT,
- RID_SIGNED,
- RID_AUTO,
- RID_MUTABLE,
- RID_COMPLEX,
- RID_RESTRICT,
-
- RID_LAST_MODIFIER = RID_RESTRICT,
- /* This is where grokdeclarator ends its search when setting the
- specbits. */
-
RID_PUBLIC,
RID_PRIVATE,
RID_PROTECTED,
--- 40,45 ----
*************** enum rid
*** 80,86 ****
RID_NULL,
/* Before adding enough to get up to 64, the RIDBIT_* macros
will have to be changed a little. */
! RID_MAX
};
/* The type that can represent all values of RIDBIT. */
--- 48,54 ----
RID_NULL,
/* Before adding enough to get up to 64, the RIDBIT_* macros
will have to be changed a little. */
! CP_RID_MAX
};
/* The type that can represent all values of RIDBIT. */
*************** typedef struct { unsigned long idata[2];
*** 105,115 ****
(V).idata[1] = 0; \
} while (0)
#define RIDBIT_ANY_SET(V) ((V).idata[0] || (V).idata[1])
-
- /* The elements of `ridpointers' are identifier nodes
- for the reserved type names and storage classes.
- It is indexed by a RID_... value. */
- extern tree ridpointers[(int) RID_MAX];
/* the declaration found for the last IDENTIFIER token read in.
yylex must look this up to detect typedefs, which get token type TYPENAME,
--- 73,78 ----
Index: cp/parse.y
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/parse.y,v
retrieving revision 1.180
diff -c -p -r1.180 parse.y
*** parse.y 2000/06/24 22:17:18 1.180
--- parse.y 2000/06/30 17:57:40
*************** Boston, MA 02111-1307, USA. */
*** 38,45 ****
#include "tree.h"
#include "input.h"
#include "flags.h"
- #include "lex.h"
#include "cp-tree.h"
#include "output.h"
#include "except.h"
#include "toplev.h"
--- 38,45 ----
#include "tree.h"
#include "input.h"
#include "flags.h"
#include "cp-tree.h"
+ #include "lex.h"
#include "output.h"
#include "except.h"
#include "toplev.h"
Index: cp/spew.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/spew.c,v
retrieving revision 1.28
diff -c -p -r1.28 spew.c
*** spew.c 2000/02/26 20:15:46 1.28
--- spew.c 2000/06/30 17:57:40
*************** Boston, MA 02111-1307, USA. */
*** 28,35 ****
#include "system.h"
#include "input.h"
#include "tree.h"
- #include "lex.h"
#include "cp-tree.h"
#include "parse.h"
#include "flags.h"
#include "obstack.h"
--- 28,35 ----
#include "system.h"
#include "input.h"
#include "tree.h"
#include "cp-tree.h"
+ #include "lex.h"
#include "parse.h"
#include "flags.h"
#include "obstack.h"