summaryrefslogtreecommitdiff
path: root/gcc/cp/lex.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp/lex.c')
-rw-r--r--gcc/cp/lex.c38
1 files changed, 20 insertions, 18 deletions
diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c
index f5fdc0f3db4..21e359402f8 100644
--- a/gcc/cp/lex.c
+++ b/gcc/cp/lex.c
@@ -53,7 +53,6 @@ extern void yyprint PARAMS ((FILE *, int, YYSTYPE));
static int interface_strcmp PARAMS ((const char *));
static int *init_cpp_parse PARAMS ((void));
-static void init_reswords PARAMS ((void));
static void init_cp_pragma PARAMS ((void));
static tree parse_strconst_pragma PARAMS ((const char *, int));
@@ -248,7 +247,7 @@ cxx_post_options ()
void
cxx_init_options ()
{
- parse_in = cpp_create_reader (ident_hash, CLK_GNUCXX);
+ parse_in = cpp_create_reader (CLK_GNUCXX);
/* Default exceptions on. */
flag_exceptions = 1;
@@ -263,15 +262,6 @@ cxx_init_options ()
}
void
-cxx_init ()
-{
- c_common_lang_init ();
-
- if (flag_gnu_xref) GNU_xref_begin (input_filename);
- init_repo (input_filename);
-}
-
-void
cxx_finish ()
{
if (flag_gnu_xref)
@@ -636,7 +626,7 @@ const short rid_to_yy[RID_MAX] =
/* RID_AT_IMPLEMENTATION */ 0
};
-static void
+void
init_reswords ()
{
unsigned int i;
@@ -676,17 +666,18 @@ init_cp_pragma ()
handle_pragma_java_exceptions);
}
+/* Initialize the C++ front end. This function is very sensitive to
+ the exact order that things are done here. It would be nice if the
+ initialization done by this routine were moved to its subroutines,
+ and the ordering dependencies clarified and reduced. */
const char *
-init_parse (filename)
+cxx_init (filename)
const char *filename;
{
decl_printable_name = lang_printable_name;
-
input_filename = "<internal>";
init_reswords ();
- init_pragma ();
- init_cp_pragma ();
init_spew ();
init_tree ();
init_cplus_expand ();
@@ -726,17 +717,28 @@ init_parse (filename)
TREE_TYPE (enum_type_node) = enum_type_node;
ridpointers[(int) RID_ENUM] = enum_type_node;
+ cxx_init_decl_processing ();
+
/* Create the built-in __null node. Note that we can't yet call for
type_for_size here because integer_type_node and so forth are not
set up. Therefore, we don't set the type of these nodes until
- init_decl_processing. */
+ cxx_init_decl_processing. */
null_node = build_int_2 (0, 0);
+ TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
ridpointers[RID_NULL] = null_node;
token_count = init_cpp_parse ();
interface_unknown = 1;
- return init_c_lex (filename);
+ filename = c_common_lang_init (filename);
+
+ init_cp_pragma ();
+
+ if (flag_gnu_xref)
+ GNU_xref_begin (filename);
+ init_repo (filename);
+
+ return filename;
}
void