Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h are also on line-map.h.

* Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h
	are also on line-map.h.
	* cppfiles.c (stack_include_file): Update.
	* cpphash.h (struct cpp_buffer): New member return_at_eof.
	(_cpp_pop_buffer): New.
	* cppinit.c (cpp_destroy, cpp_finish): Update.
	(do_includes): Mark each buffer to return at EOF.
	* cpplex.c (_cpp_lex_token): Pop buffers at EOF.  Continue or
	return as requested.
	* cpplib.c (run_directive, do_line, cpp_push_buffer): Update.
	(cpp_pop_buffer): Rename _cpp_pop_buffer.  Stop skipping.
	* cpplib.h (cpp_pop_buffer): Remove.
	(cpp_scan_buffer_nooutput): Rename cpp_scan_nooutput.
	* cppmacro.c (cpp_scan_buffer_nooutput): Similarly.  No need to pop
	buffers.
	* cppmain.c (scan_buffer): Rename scan_translation_unit.  No need
	to pop buffers.
	(do_preprocessing): Update.
	* fix-header.c (read_scan_file): Update.  No need to pop buffers.
	* c-parse.in (_yylex): Similarly.
	* scan-decls.c (scan_decls): Similarly.
	* line-map.h: Update comments.

	* cp/spew.c (read_token): No need to pop buffers.

	* objc/Make-lang.in (objc-act.o): Update dependencies.

From-SVN: r44634
This commit is contained in:
Neil Booth 2001-08-04 12:01:59 +00:00 committed by Neil Booth
parent 03997728b4
commit ef6e958a86
17 changed files with 136 additions and 102 deletions

View File

@ -1,3 +1,30 @@
2001-08-04 Neil Booth <neil@cat.daikokuya.demon.co.uk>
* Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h
are also on line-map.h.
* cppfiles.c (stack_include_file): Update.
* cpphash.h (struct cpp_buffer): New member return_at_eof.
(_cpp_pop_buffer): New.
* cppinit.c (cpp_destroy, cpp_finish): Update.
(do_includes): Mark each buffer to return at EOF.
* cpplex.c (_cpp_lex_token): Pop buffers at EOF. Continue or
return as requested.
* cpplib.c (run_directive, do_line, cpp_push_buffer): Update.
(cpp_pop_buffer): Rename _cpp_pop_buffer. Stop skipping.
* cpplib.h (cpp_pop_buffer): Remove.
(cpp_scan_buffer_nooutput): Rename cpp_scan_nooutput.
* cppmacro.c (cpp_scan_buffer_nooutput): Similarly. No need to pop
buffers.
* cppmain.c (scan_buffer): Rename scan_translation_unit. No need
to pop buffers.
(do_preprocessing): Update.
* fix-header.c (read_scan_file): Update. No need to pop buffers.
* c-parse.in (_yylex): Similarly.
* scan-decls.c (scan_decls): Similarly.
* line-map.h: Update comments.
* objc/Make-lang.in (objc-act.o): Update dependencies.
2001-08-04 Stephane Carrez <Stephane.Carrez@worldnet.fr>
* config/m68hc11/m68hc11.md ("cmphi_1", "cmpqi_1"): Allow memory

View File

@ -579,6 +579,7 @@ C_COMMON_H = c-common.h $(SPLAY_TREE_H)
C_TREE_H = c-tree.h $(C_COMMON_H)
SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h
PREDICT_H = predict.h predict.def
CPPLIB_H = cpplib.h line-map.h
# sed inserts variable overrides after the following line.
####target overrides
@ -1152,7 +1153,7 @@ s-crt0: $(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H)
c-errors.o: c-errors.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) flags.h \
diagnostic.h $(TM_P_H)
c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h $(GGC_H) intl.h \
$(C_TREE_H) input.h flags.h $(SYSTEM_H) toplev.h output.h cpplib.h \
$(C_TREE_H) input.h flags.h $(SYSTEM_H) toplev.h output.h $(CPPLIB_H) \
diagnostic.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/c-parse.c
@ -1177,7 +1178,7 @@ c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) c-lex.h \
debug.h $(C_TREE_H) \
c-pragma.h input.h intl.h flags.h toplev.h output.h \
mbchar.h cpplib.h $(EXPR_H) $(TM_P_H)
mbchar.h $(CPPLIB_H) $(EXPR_H) $(TM_P_H)
c-aux-info.o : c-aux-info.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
flags.h toplev.h
c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h toplev.h
@ -1937,7 +1938,7 @@ LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o \
cpphash.o cpperror.o cppinit.o cppdefault.o \
hashtable.o line-map.o mkdeps.o prefix.o version.o mbchar.o
LIBCPP_DEPS = cpplib.h cpphash.h line-map.h hashtable.h intl.h \
LIBCPP_DEPS = $(CPPLIB_H) cpphash.h line-map.h hashtable.h intl.h \
$(OBSTACK_H) $(SYSTEM_H)
# Most of the other archives built/used by this makefile are for
@ -1951,7 +1952,7 @@ cpp0$(exeext): cppmain.o intl.o libcpp.a $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cpp0$(exeext) cppmain.o \
intl.o libcpp.a $(LIBS)
cppmain.o: cppmain.c $(CONFIG_H) cpplib.h intl.h $(SYSTEM_H)
cppmain.o: cppmain.c $(CONFIG_H) $(CPPLIB_H) intl.h $(SYSTEM_H)
cpperror.o: cpperror.c $(CONFIG_H) $(LIBCPP_DEPS)
cppexp.o: cppexp.c $(CONFIG_H) $(LIBCPP_DEPS)
@ -2194,10 +2195,10 @@ fix-header$(build_exeext): fix-header.o scan-decls.o scan.o xsys-protos.h \
scan-decls.o scan.o libcpp.a $(LIBS)
fix-header.o: fix-header.c $(OBSTACK_H) scan.h \
xsys-protos.h $(HCONFIG_H) $(SYSTEM_H) cpplib.h
xsys-protos.h $(HCONFIG_H) $(SYSTEM_H) $(CPPLIB_H)
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/fix-header.c
scan-decls.o: scan-decls.c scan.h cpplib.h $(HCONFIG_H) $(SYSTEM_H)
scan-decls.o: scan-decls.c scan.h $(CPPLIB_H) $(HCONFIG_H) $(SYSTEM_H)
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan-decls.c
# stmp-fixproto depends on this, not on fix-header directly.

View File

@ -3767,9 +3767,7 @@ _yylex ()
case CPP_SEMICOLON: OBJC_NEED_RAW_IDENTIFIER (0); return ';';
case CPP_EOF:
if (cpp_pop_buffer (parse_in) == 0)
return 0;
goto get_next;
return 0;
case CPP_NAME:
return yylexname ();

View File

@ -1,3 +1,7 @@
2001-08-04 Neil Booth <neil@cat.daikokuya.demon.co.uk>
* cp/spew.c (read_token): No need to pop buffers.
2001-08-02 Stan Shebs <shebs@apple.com>
* cp-tree.h (FNADDR_FROM_VTABLE_ENTRY): Remove, no longer used.

View File

@ -331,8 +331,6 @@ read_token (t)
#undef YYCODE
case CPP_EOF:
if (cpp_pop_buffer (parse_in) != 0)
goto retry;
t->yychar = 0;
break;

View File

@ -326,7 +326,7 @@ stack_include_file (pfile, inc)
}
/* Push a buffer. */
fp = cpp_push_buffer (pfile, inc->buffer, len, BUF_FILE, inc->name);
fp = cpp_push_buffer (pfile, inc->buffer, len, BUF_FILE, inc->name, 0);
fp->inc = inc;
fp->inc->refcnt++;
fp->sysp = sysp;

View File

@ -226,6 +226,11 @@ struct cpp_buffer
include files has been calculated and stored in "dir" below. */
unsigned char search_cached;
/* At EOF, a buffer is automatically popped. If RETURN_AT_EOF is
true, a CPP_EOF token is then returned. Otherwise, the next
token from the enclosing buffer is returned. */
bool return_at_eof;
/* Buffer type. */
ENUM_BITFIELD (cpp_buffer_type) type : 8;
@ -441,6 +446,7 @@ extern void _cpp_do__Pragma PARAMS ((cpp_reader *));
extern void _cpp_init_directives PARAMS ((cpp_reader *));
extern void _cpp_init_internal_pragmas PARAMS ((cpp_reader *));
extern void _cpp_do_file_change PARAMS ((cpp_reader *, enum lc_reason));
extern void _cpp_pop_buffer PARAMS ((cpp_reader *));
/* Utility routines and macros. */
#define DSC(str) (const U_CHAR *)str, sizeof str - 1

View File

@ -555,7 +555,7 @@ cpp_destroy (pfile)
cpp_context *context, *contextn;
while (CPP_BUFFER (pfile) != NULL)
cpp_pop_buffer (pfile);
_cpp_pop_buffer (pfile);
if (pfile->macro_buffer)
{
@ -883,7 +883,10 @@ do_includes (pfile, p, scan)
header.val.str.text = (const unsigned char *) p->arg;
header.val.str.len = strlen (p->arg);
if (_cpp_execute_include (pfile, &header, IT_CMDLINE) && scan)
cpp_scan_buffer_nooutput (pfile, 0);
{
pfile->buffer->return_at_eof = true;
cpp_scan_nooutput (pfile);
}
}
q = p->next;
free (p);
@ -1011,7 +1014,7 @@ cpp_finish (pfile)
{
cpp_ice (pfile, "buffers still stacked in cpp_finish");
while (CPP_BUFFER (pfile))
cpp_pop_buffer (pfile);
_cpp_pop_buffer (pfile);
}
/* Don't write the deps file if preprocessing has failed. */

View File

@ -893,16 +893,23 @@ _cpp_lex_token (pfile, result)
switch (c)
{
case EOF:
/* Non-empty files should end in a newline. Checking "bol" too
prevents multiple warnings when hitting the EOF more than
once, like in a directive. Don't warn for command line and
_Pragma buffers. */
if (pfile->lexer_pos.col != 0 && !bol && !buffer->from_stage3)
cpp_pedwarn (pfile, "no newline at end of file");
if (!pfile->state.in_directive)
{
unsigned char ret = pfile->buffer->return_at_eof;
/* Non-empty files should end in a newline. Don't warn for
command line and _Pragma buffers. */
if (pfile->lexer_pos.col != 0 && !buffer->from_stage3)
cpp_pedwarn (pfile, "no newline at end of file");
_cpp_pop_buffer (pfile);
if (pfile->buffer && !ret)
{
bol = 1;
goto done_directive;
}
}
pfile->state.next_bol = 1;
pfile->state.skipping = 0; /* In case missing #endif. */
result->type = CPP_EOF;
/* Don't do MI optimisation. */
return;
case ' ': case '\t': case '\f': case '\v': case '\0':

View File

@ -397,7 +397,7 @@ run_directive (pfile, dir_no, type, buf, count)
unsigned int output_line = pfile->lexer_pos.output_line;
cpp_buffer *buffer;
buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 0);
buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 0, 1);
if (dir_no == T_PRAGMA)
{
@ -414,8 +414,7 @@ run_directive (pfile, dir_no, type, buf, count)
pfile->state.prevent_expansion--;
check_eol (pfile);
end_directive (pfile, 1);
cpp_pop_buffer (pfile);
_cpp_pop_buffer (pfile);
}
/* Checks for validity the macro name in #define, #undef, #ifdef and
@ -770,7 +769,7 @@ do_line (pfile)
if (reason == LC_ENTER)
{
/* Fake a buffer stack for diagnostics. */
cpp_push_buffer (pfile, 0, 0, BUF_FAKE, fname);
cpp_push_buffer (pfile, 0, 0, BUF_FAKE, fname, 0);
/* Fake an include for cpp_included. */
_cpp_fake_include (pfile, fname);
buffer = pfile->buffer;
@ -782,7 +781,7 @@ do_line (pfile)
buffer->nominal_fname);
else
{
cpp_pop_buffer (pfile);
_cpp_pop_buffer (pfile);
buffer = pfile->buffer;
#ifdef ENABLE_CHECKING
if (strcmp (buffer->nominal_fname, fname))
@ -1775,12 +1774,13 @@ cpp_set_callbacks (pfile, cb)
doesn't fail. It does not generate a file change call back; that
is the responsibility of the caller. */
cpp_buffer *
cpp_push_buffer (pfile, buffer, len, type, filename)
cpp_push_buffer (pfile, buffer, len, type, filename, return_at_eof)
cpp_reader *pfile;
const U_CHAR *buffer;
size_t len;
enum cpp_buffer_type type;
const char *filename;
int return_at_eof;
{
cpp_buffer *new = xobnew (&pfile->buffer_ob, cpp_buffer);
@ -1826,6 +1826,7 @@ cpp_push_buffer (pfile, buffer, len, type, filename)
new->pfile = pfile;
new->include_stack_listed = 0;
new->lineno = 1;
new->return_at_eof = return_at_eof;
pfile->state.next_bol = 1;
pfile->buffer_stack_depth++;
@ -1837,8 +1838,8 @@ cpp_push_buffer (pfile, buffer, len, type, filename)
/* If called from do_line, pops a single buffer. Otherwise pops all
buffers until a real file is reached. Generates appropriate
call-backs. */
cpp_buffer *
cpp_pop_buffer (pfile)
void
_cpp_pop_buffer (pfile)
cpp_reader *pfile;
{
cpp_buffer *buffer;
@ -1884,7 +1885,8 @@ cpp_pop_buffer (pfile)
}
obstack_free (&pfile->buffer_ob, buffer);
return pfile->buffer;
pfile->state.skipping = 0; /* In case missing #endif. */
}
void

View File

@ -554,8 +554,7 @@ extern void cpp_unassert PARAMS ((cpp_reader *, const char *));
extern cpp_buffer *cpp_push_buffer PARAMS ((cpp_reader *,
const unsigned char *, size_t,
enum cpp_buffer_type,
const char *));
extern cpp_buffer *cpp_pop_buffer PARAMS ((cpp_reader *));
const char *, int));
extern int cpp_defined PARAMS ((cpp_reader *, const unsigned char *, int));
/* N.B. The error-message-printer prototypes have not been nicely
@ -611,7 +610,7 @@ extern void cpp_forall_identifiers PARAMS ((cpp_reader *,
cpp_cb, void *));
/* In cppmacro.c */
extern void cpp_scan_buffer_nooutput PARAMS ((cpp_reader *, int));
extern void cpp_scan_nooutput PARAMS ((cpp_reader *));
extern void cpp_start_lookahead PARAMS ((cpp_reader *));
extern void cpp_stop_lookahead PARAMS ((cpp_reader *, int));
extern int cpp_sys_macro_p PARAMS ((cpp_reader *));

View File

@ -1010,18 +1010,14 @@ cpp_sys_macro_p (pfile)
/* Read each token in, until EOF. Directives are transparently
processed. */
void
cpp_scan_buffer_nooutput (pfile, all_buffers)
cpp_scan_nooutput (pfile)
cpp_reader *pfile;
int all_buffers;
{
cpp_token token;
cpp_buffer *buffer = all_buffers ? 0: pfile->buffer->prev;
do
do
cpp_get_token (pfile, &token);
while (token.type != CPP_EOF);
while (cpp_pop_buffer (pfile) != buffer);
cpp_get_token (pfile, &token);
while (token.type != CPP_EOF);
}
/* Lookahead handling. */

View File

@ -44,7 +44,7 @@ static void do_preprocessing PARAMS ((int, char **));
static void setup_callbacks PARAMS ((void));
/* General output routines. */
static void scan_buffer PARAMS ((cpp_reader *));
static void scan_translation_unit PARAMS ((cpp_reader *));
static void check_multiline_token PARAMS ((cpp_string *));
static int printer_init PARAMS ((cpp_reader *));
static int dump_macro PARAMS ((cpp_reader *, cpp_hashnode *, void *));
@ -151,11 +151,11 @@ do_preprocessing (argc, argv)
if (cpp_start_read (pfile, options->in_fname))
{
/* A successful cpp_start_read guarantees that we can call
cpp_scan_buffer_nooutput or cpp_get_token next. */
cpp_scan_nooutput or cpp_get_token next. */
if (options->no_output)
cpp_scan_buffer_nooutput (pfile, 1);
cpp_scan_nooutput (pfile);
else
scan_buffer (pfile);
scan_translation_unit (pfile);
/* -dM command line option. Should this be in cpp_finish? */
if (options->dump_macros == dump_only)
@ -200,60 +200,56 @@ setup_callbacks ()
/* Writes out the preprocessed file. Alternates between two tokens,
so that we can avoid accidental token pasting. */
static void
scan_buffer (pfile)
scan_translation_unit (pfile)
cpp_reader *pfile;
{
unsigned int index, line;
cpp_token tokens[2], *token;
do
for (index = 0;; index = 1 - index)
{
for (index = 0;; index = 1 - index)
token = &tokens[index];
cpp_get_token (pfile, token);
if (token->type == CPP_EOF)
break;
line = cpp_get_line (pfile)->output_line;
if (print.lineno != line)
{
token = &tokens[index];
cpp_get_token (pfile, token);
unsigned int col = cpp_get_line (pfile)->col;
if (token->type == CPP_EOF)
break;
line = cpp_get_line (pfile)->output_line;
if (print.lineno != line)
/* Supply enough whitespace to put this token in its original
column. Don't bother trying to reconstruct tabs; we can't
get it right in general, and nothing ought to care. (Yes,
some things do care; the fault lies with them.) */
maybe_print_line (line);
if (col > 1)
{
unsigned int col = cpp_get_line (pfile)->col;
/* Supply enough whitespace to put this token in its original
column. Don't bother trying to reconstruct tabs; we can't
get it right in general, and nothing ought to care. (Yes,
some things do care; the fault lies with them.) */
maybe_print_line (line);
if (col > 1)
{
if (token->flags & PREV_WHITE)
col--;
while (--col)
putc (' ', print.outf);
}
if (token->flags & PREV_WHITE)
col--;
while (--col)
putc (' ', print.outf);
}
else if ((token->flags & (PREV_WHITE | AVOID_LPASTE))
== AVOID_LPASTE
&& cpp_avoid_paste (pfile, &tokens[1 - index], token))
token->flags |= PREV_WHITE;
/* Special case '# <directive name>': insert a space between
the # and the token. This will prevent it from being
treated as a directive when this code is re-preprocessed.
XXX Should do this only at the beginning of a line, but how? */
else if (token->type == CPP_NAME && token->val.node->directive_index
&& tokens[1 - index].type == CPP_HASH)
token->flags |= PREV_WHITE;
cpp_output_token (token, print.outf);
print.printed = 1;
if (token->type == CPP_STRING || token->type == CPP_WSTRING
|| token->type == CPP_COMMENT)
check_multiline_token (&token->val.str);
}
else if ((token->flags & (PREV_WHITE | AVOID_LPASTE))
== AVOID_LPASTE
&& cpp_avoid_paste (pfile, &tokens[1 - index], token))
token->flags |= PREV_WHITE;
/* Special case '# <directive name>': insert a space between
the # and the token. This will prevent it from being
treated as a directive when this code is re-preprocessed.
XXX Should do this only at the beginning of a line, but how? */
else if (token->type == CPP_NAME && token->val.node->directive_index
&& tokens[1 - index].type == CPP_HASH)
token->flags |= PREV_WHITE;
cpp_output_token (token, print.outf);
print.printed = 1;
if (token->type == CPP_STRING || token->type == CPP_WSTRING
|| token->type == CPP_COMMENT)
check_multiline_token (&token->val.str);
}
while (cpp_pop_buffer (pfile) != 0);
}
/* Adjust print.lineno for newlines embedded in tokens. */

View File

@ -658,7 +658,7 @@ read_scan_file (in_fname, argc, argv)
/* Scan the macro expansion of "getchar();". */
cpp_push_buffer (scan_in, getchar_call, sizeof(getchar_call) - 1,
BUF_BUILTIN, in_fname);
BUF_BUILTIN, in_fname, 1);
for (;;)
{
cpp_token t;
@ -669,7 +669,6 @@ read_scan_file (in_fname, argc, argv)
else if (cpp_ideq (&t, "_filbuf"))
seen_filbuf++;
}
cpp_pop_buffer (scan_in);
if (seen_filbuf)
{

View File

@ -25,7 +25,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/* The logical line FROM_LINE maps to physical source file TO_FILE at
line TO_LINE, and subsequently one-to-one until the next line_map
structure in the set. */
structure in the set. INCLUDED_FROM is an index into the set that
gives the line mapping at whose end the current one was included.
File(s) at the bottom of the include stack have this set to -1. */
struct line_map
{
const char *to_file;
@ -34,7 +36,7 @@ struct line_map
int included_from;
};
/* Contains a sequence of chronological line_map structures. */
/* A set of chronological line_map structures. */
struct line_maps
{
struct line_map *maps;
@ -75,6 +77,7 @@ extern struct line_map *lookup_line
of the #include, or other directive, that caused a map change. */
#define LAST_SOURCE_LINE(MAP) SOURCE_LINE (MAP, (MAP)[1].from_line - 1)
/* Non-zero if the map is at the bottom of the include stack. */
#define MAIN_FILE_P(MAP) ((MAP)->included_from < 0)
#endif /* !GCC_LINE_MAP_H */

View File

@ -59,7 +59,7 @@ objc-parse.o : $(srcdir)/objc/objc-parse.c \
$(CONFIG_H) $(TREE_H) $(srcdir)/toplev.h $(srcdir)/ggc.h \
$(srcdir)/c-lex.h $(srcdir)/c-tree.h $(srcdir)/c-common.h \
$(srcdir)/input.h $(srcdir)/flags.h $(srcdir)/output.h \
$(srcdir)/objc/objc-act.h $(SYSTEM_H) cpplib.h
$(srcdir)/objc/objc-act.h $(SYSTEM_H) $(CPPLIB_H)
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \
-c $(srcdir)/objc/objc-parse.c $(OUTPUT_OPTION)

View File

@ -111,13 +111,10 @@ scan_decls (pfile, argc, argv)
brace_nesting++;
goto new_statement;
}
if (token.type == CPP_EOF)
{
if (cpp_pop_buffer (pfile) == 0)
return 0;
goto new_statement;
}
if (token.type == CPP_EOF)
return 0;
if (token.type == CPP_SEMICOLON)
goto new_statement;
if (token.type != CPP_NAME)
@ -148,9 +145,7 @@ scan_decls (pfile, argc, argv)
goto new_statement;
case CPP_EOF:
if (cpp_pop_buffer (pfile) == 0)
return 0;
break;
return 0;
case CPP_OPEN_PAREN:
/* Looks like this is the start of a formal parameter list. */