aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@gcc.gnu.org>2000-11-20 23:39:52 -0800
committerRichard Henderson <rth@gcc.gnu.org>2000-11-20 23:39:52 -0800
commit3aac38d70cbb15e40c377d39dd612df4d16ad259 (patch)
treebf302f0b96b0df7401aed3a7535da9fbf23c5932
parent66bc5940f137cfe9a38e37c2619189604fd246b7 (diff)
downloadgcc-3aac38d70cbb15e40c377d39dd612df4d16ad259.zip
gcc-3aac38d70cbb15e40c377d39dd612df4d16ad259.tar.gz
gcc-3aac38d70cbb15e40c377d39dd612df4d16ad259.tar.bz2
parse.y (yyparse_1): Rename the parser entry point.
* cp/parse.y (yyparse_1): Rename the parser entry point. * c-lex.c (orig_filename): New variable. (init_c_lex): Set it. Move call to cpp_start_read ... (yyparse): ... here. New function. * c-parse.in (yyparse_1): Rename the parser entry point. * c-tree.h: Declare it. From-SVN: r37607
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/c-lex.c20
-rw-r--r--gcc/c-parse.in5
-rw-r--r--gcc/c-tree.h1
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parse.y3
6 files changed, 38 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 52963ce..ed6b6fe 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2000-11-20 Richard Henderson <rth@redhat.com>
+
+ * c-lex.c (orig_filename): New variable.
+ (init_c_lex): Set it. Move call to cpp_start_read ...
+ (yyparse): ... here. New function.
+ * c-parse.in (yyparse_1): Rename the parser entry point.
+ * c-tree.h: Declare it.
+
2000-11-21 Jakub Jelinek <jakub@redhat.com>
* expr.c (do_compare_and_jump): If op0 was replaced by promoted
diff --git a/gcc/c-lex.c b/gcc/c-lex.c
index faa8e59..4f9b8cc 100644
--- a/gcc/c-lex.c
+++ b/gcc/c-lex.c
@@ -60,6 +60,9 @@ extern cpp_reader parse_in;
FILE *finput;
#endif
+/* The original file name, before changing "-" to "stdin". */
+static const char *orig_filename;
+
/* Private idea of the line number. See discussion in c_lex(). */
static int lex_lineno;
@@ -170,6 +173,8 @@ init_c_lex (filename)
{
struct c_fileinfo *toplevel;
+ orig_filename = filename;
+
/* Set up filename timing. Must happen before cpp_start_read. */
file_info_tree = splay_tree_new ((splay_tree_compare_fn)strcmp,
0,
@@ -214,9 +219,6 @@ init_c_lex (filename)
/* Make sure parse_in.digraphs matches flag_digraphs. */
CPP_OPTION (&parse_in, digraphs) = flag_digraphs;
- if (! cpp_start_read (&parse_in, filename))
- exit (FATAL_EXIT_CODE); /* cpplib has emitted an error. */
-
if (filename == 0 || !strcmp (filename, "-"))
filename = "stdin";
#endif
@@ -232,6 +234,18 @@ init_c_lex (filename)
return filename;
}
+/* A thin wrapper around the real parser that initializes the
+ integrated preprocessor after debug output has been initialized. */
+
+int
+yyparse()
+{
+ if (! cpp_start_read (&parse_in, orig_filename))
+ return 1; /* cpplib has emitted an error. */
+
+ return yyparse_1();
+}
+
struct c_fileinfo *
get_fileinfo (name)
const char *name;
diff --git a/gcc/c-parse.in b/gcc/c-parse.in
index 517b488..5943fa4 100644
--- a/gcc/c-parse.in
+++ b/gcc/c-parse.in
@@ -72,8 +72,11 @@ end ifc
/* Like YYERROR but do call yyerror. */
#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
-/* Cause the `yydebug' variable to be defined. */
+/* Cause the "yydebug" variable to be defined. */
#define YYDEBUG 1
+
+/* Rename the "yyparse" function so that we can override it elsewhere. */
+#define yyparse yyparse_1
%}
%start program
diff --git a/gcc/c-tree.h b/gcc/c-tree.h
index 669c89b..41a6075 100644
--- a/gcc/c-tree.h
+++ b/gcc/c-tree.h
@@ -154,6 +154,7 @@ extern tree lookup_objc_ivar PARAMS ((tree));
/* in c-parse.in */
extern void c_parse_init PARAMS ((void));
+extern int yyparse_1 PARAMS ((void));
/* in c-aux-info.c */
extern void gen_aux_info_record PARAMS ((tree, int, int, int));
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c75edb9..bc73be5 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,4 +1,8 @@
-2000-11-16 Alex Samuel <samuel@codesourcery.com>
+2000-11-20 Richard Henderson <rth@redhat.com>
+
+ * parse.y (yyparse_1): Rename the parser entry point.
+
+2000-11-20 Alex Samuel <samuel@codesourcery.com>
* mangle.c (write_name): Use <unscoped-name> for names directly in
function scope.
diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y
index 13c678b..d55f1b9 100644
--- a/gcc/cp/parse.y
+++ b/gcc/cp/parse.y
@@ -214,6 +214,9 @@ cp_parse_init ()
ggc_add_tree_root (&current_enum_type, 1);
ggc_add_tree_root (&saved_scopes, 1);
}
+
+/* Rename the "yyparse" function so that we can override it elsewhere. */
+#define yyparse yyparse_1
%}
%start program