Commit c9666c01 by Richard Kenner

(cpp_lex) New arg skip_evaluation.

(cpp_parse_expr): Pass skip_evaluation to cpp_lex.
Abort if cpp_lex returns NAME.
(cpp_lex): Optionally warn about undefined identifiers that evaluate to 0.

From-SVN: r13880
parent dfb45725
......@@ -278,8 +278,9 @@ static struct token tokentab2[] = {
/* Read one token. */
struct operation
cpp_lex (pfile)
cpp_lex (pfile, skip_evaluation)
cpp_reader *pfile;
int skip_evaluation;
{
register int c;
register int namelen;
......@@ -443,6 +444,9 @@ cpp_lex (pfile)
return op;
case CPP_NAME:
if (CPP_WARN_UNDEF (pfile) && !skip_evaluation)
cpp_warning (pfile, "`%.*s' is not defined",
(int) (tok_end - tok_start), tok_start);
return parse_number (pfile, "0", 0);
case CPP_OTHER:
......@@ -684,7 +688,7 @@ cpp_parse_expr (pfile)
char flags = 0;
/* Read a token */
op = cpp_lex (pfile);
op = cpp_lex (pfile, skip_evaluation);
/* See if the token is an operand, in which case go to set_value.
If the token is an operator, figure out its left and right
......@@ -693,8 +697,7 @@ cpp_parse_expr (pfile)
switch (op.op)
{
case NAME:
top->value = 0, top->unsignedp = 0;
goto set_value;
abort ();
case INT: case CHAR:
top->value = op.value;
top->unsignedp = op.unsignedp;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment