aboutsummaryrefslogtreecommitdiff
path: root/gcc/cpplib.c
diff options
context:
space:
mode:
authorZack Weinberg <zack@gcc.gnu.org>2000-07-11 23:20:53 +0000
committerZack Weinberg <zack@gcc.gnu.org>2000-07-11 23:20:53 +0000
commit417f3e3a5efba3ed497f7971ab1254eaafadcadb (patch)
tree976249a00737110d95a5b5c760a60c97bb68595a /gcc/cpplib.c
parent268afb999d5d67e4083d42c64d32d49df28dee0e (diff)
downloadgcc-417f3e3a5efba3ed497f7971ab1254eaafadcadb.zip
gcc-417f3e3a5efba3ed497f7971ab1254eaafadcadb.tar.gz
gcc-417f3e3a5efba3ed497f7971ab1254eaafadcadb.tar.bz2
[multiple changes]
2000-07-11 Zack Weinberg <zack@wolery.cumb.org> * cpplex.c (parse_name): No longer inline (premature optimization). (do_pop_context): Fold into pop_context. (pop_context): Returns int. (lex_next): Hoist test for end of directive into pop_context. (push_macro_context): Returns int; takes just reader and token. Hoist test for excessive nesting to caller. (push_arg_context): Returns void; takes just reader and token. Do not call stringify_arg or get_raw_token. (get_raw_token): Convert tail recursion through push_arg_context to a loop at this level. Call stringify_arg here if appropriate. (maybe_paste_with_next): Convert tail recursion to a while loop. Hoist test of paste_level to caller. (stringify_arg): Push arg context at beginning. (cpp_get_token): Split out core into _cpp_get_token. Call process_directive here. Throw away CPP_PLACEMARKER tokens. (_cpp_get_token): Convert tail recursion through push_macro_context to a loop at this level. (_cpp_glue_header_name, is_macro_disabled, stringify_arg, _cpp_get_raw_token): Use _cpp_get_token. (_cpp_skip_rest_of_line): Drop the context stack directly; do not call pop_context. (_cpp_run_directive): Call lex_next directly. * cpphash.h: Prototype _cpp_get_token. * cppexp.c (lex): Use it. * cpphash.c (parse_define): Use it. * cpplib.c (get_define_node, do_undef, parse_include, read_line_number, do_line, do_ident, do_pragma, do_pragma_gcc, do_pragma_implementation, do_pragma_poison, do_pragma_dependency, parse_ifdef, validate_else): Use it. (cpp_push_buffer): Tweak error message; abort if anyone tries to push a buffer while macro expansions are stacked. 2000-07-11 Donn Terry <donnte@microsoft.com> * cpplex.c (free_macro_args, save_token): Cast arg of free and/or xrealloc to PTR. (_cpp_init_input_buffer): Clear all fields of the base context. From-SVN: r34972
Diffstat (limited to 'gcc/cpplib.c')
-rw-r--r--gcc/cpplib.c43
1 files changed, 24 insertions, 19 deletions
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index f6108f4..71859d7 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -250,7 +250,7 @@ get_define_node (pfile)
const cpp_token *token;
/* Skip any -C comments. */
- while ((token = cpp_get_token (pfile))->type == CPP_COMMENT)
+ while ((token = _cpp_get_token (pfile))->type == CPP_COMMENT)
;
if (token->type != CPP_NAME)
@@ -307,7 +307,7 @@ do_undef (pfile)
{
cpp_hashnode *node = get_define_node (pfile);
- if (cpp_get_token (pfile)->type != CPP_EOF)
+ if (_cpp_get_token (pfile)->type != CPP_EOF)
cpp_pedwarn (pfile, "junk on line after #undef");
/* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier
@@ -343,7 +343,7 @@ parse_include (pfile, dir, trail, strp, lenp, abp)
unsigned int *lenp;
int *abp;
{
- const cpp_token *name = cpp_get_token (pfile);
+ const cpp_token *name = _cpp_get_token (pfile);
if (name->type != CPP_STRING && name->type != CPP_HEADER_NAME)
{
@@ -361,7 +361,7 @@ parse_include (pfile, dir, trail, strp, lenp, abp)
return 1;
}
- if (!trail && cpp_get_token (pfile)->type != CPP_EOF)
+ if (!trail && _cpp_get_token (pfile)->type != CPP_EOF)
cpp_error (pfile, "junk at end of #%s", dir);
*lenp = name->val.str.len;
@@ -459,7 +459,7 @@ read_line_number (pfile, num)
cpp_reader *pfile;
int *num;
{
- const cpp_token *tok = cpp_get_token (pfile);
+ const cpp_token *tok = _cpp_get_token (pfile);
enum cpp_ttype type = tok->type;
const U_CHAR *p = tok->val.str.text;
unsigned int len = tok->val.str.len;
@@ -519,7 +519,7 @@ do_line (pfile)
unsigned int len;
const cpp_token *tok;
- tok = cpp_get_token (pfile);
+ tok = _cpp_get_token (pfile);
type = tok->type;
str = tok->val.str.text;
len = tok->val.str.len;
@@ -535,7 +535,7 @@ do_line (pfile)
old_lineno = ip->lineno;
ip->lineno = new_lineno;
- tok = cpp_get_token (pfile);
+ tok = _cpp_get_token (pfile);
type = tok->type;
str = tok->val.str.text;
len = tok->val.str.len;
@@ -645,9 +645,9 @@ do_ident (pfile)
cpp_reader *pfile;
{
/* Next token should be a string constant. */
- if (cpp_get_token (pfile)->type == CPP_STRING)
+ if (_cpp_get_token (pfile)->type == CPP_STRING)
/* And then a newline. */
- if (cpp_get_token (pfile)->type == CPP_EOF)
+ if (_cpp_get_token (pfile)->type == CPP_EOF)
{
/* Good - ship it. */
pass_thru_directive (pfile);
@@ -725,7 +725,7 @@ do_pragma (pfile)
const cpp_token *tok;
int pop;
- tok = cpp_get_token (pfile);
+ tok = _cpp_get_token (pfile);
if (tok->type == CPP_EOF)
return 0;
else if (tok->type != CPP_NAME)
@@ -746,7 +746,7 @@ do_pragma_gcc (pfile)
{
const cpp_token *tok;
- tok = cpp_get_token (pfile);
+ tok = _cpp_get_token (pfile);
if (tok->type == CPP_EOF)
return 1;
else if (tok->type != CPP_NAME)
@@ -780,13 +780,13 @@ do_pragma_implementation (pfile)
{
/* Be quiet about `#pragma implementation' for a file only if it hasn't
been included yet. */
- const cpp_token *tok = cpp_get_token (pfile);
+ const cpp_token *tok = _cpp_get_token (pfile);
char *copy;
if (tok->type == CPP_EOF)
return 0;
else if (tok->type != CPP_STRING
- || cpp_get_token (pfile)->type != CPP_EOF)
+ || _cpp_get_token (pfile)->type != CPP_EOF)
{
cpp_error (pfile, "malformed #pragma implementation");
return 1;
@@ -822,7 +822,7 @@ do_pragma_poison (pfile)
for (;;)
{
- tok = cpp_get_token (pfile);
+ tok = _cpp_get_token (pfile);
if (tok->type == CPP_EOF)
break;
if (tok->type != CPP_NAME)
@@ -887,7 +887,7 @@ do_pragma_dependency (pfile)
cpp_warning (pfile, "cannot find source %c%s%c", left, name, right);
else if (ordering > 0)
{
- const cpp_token *msg = cpp_get_token (pfile);
+ const cpp_token *msg = _cpp_get_token (pfile);
cpp_warning (pfile, "current file is older than %c%s%c",
left, name, right);
@@ -974,7 +974,7 @@ parse_ifdef (pfile, name)
enum cpp_ttype type;
const cpp_hashnode *node = 0;
- const cpp_token *token = cpp_get_token (pfile);
+ const cpp_token *token = _cpp_get_token (pfile);
type = token->type;
if (!CPP_TRADITIONAL (pfile))
@@ -983,7 +983,7 @@ parse_ifdef (pfile, name)
cpp_pedwarn (pfile, "#%s with no argument", name);
else if (type != CPP_NAME)
cpp_pedwarn (pfile, "#%s with invalid argument", name);
- else if (cpp_get_token (pfile)->type != CPP_EOF)
+ else if (_cpp_get_token (pfile)->type != CPP_EOF)
cpp_pedwarn (pfile, "garbage at end of #%s", name);
}
@@ -1186,7 +1186,7 @@ validate_else (pfile, directive)
cpp_reader *pfile;
const U_CHAR *directive;
{
- if (CPP_PEDANTIC (pfile) && cpp_get_token (pfile)->type != CPP_EOF)
+ if (CPP_PEDANTIC (pfile) && _cpp_get_token (pfile)->type != CPP_EOF)
cpp_pedwarn (pfile, "ISO C forbids text after #%s", directive);
}
@@ -1515,9 +1515,14 @@ cpp_push_buffer (pfile, buffer, length)
cpp_buffer *new;
if (++pfile->buffer_stack_depth == CPP_STACK_MAX)
{
- cpp_fatal (pfile, "#include recursion too deep");
+ cpp_fatal (pfile, "#include nested too deep");
return NULL;
}
+ if (pfile->cur_context > 0)
+ {
+ cpp_ice (pfile, "buffer pushed with contexts stacked");
+ _cpp_skip_rest_of_line (pfile);
+ }
new = xobnew (pfile->buffer_ob, cpp_buffer);
memset (new, 0, sizeof (cpp_buffer));