diff options
Diffstat (limited to 'libcpp/expr.c')
| -rw-r--r-- | libcpp/expr.c | 34 | 
1 files changed, 12 insertions, 22 deletions
diff --git a/libcpp/expr.c b/libcpp/expr.c index 1078c07..317faf5 100644 --- a/libcpp/expr.c +++ b/libcpp/expr.c @@ -2195,11 +2195,6 @@ static cpp_num  parse_has_include (cpp_reader *pfile, enum include_type type)  {    cpp_num result; -  bool paren = false; -  cpp_hashnode *node = 0; -  const cpp_token *token; -  bool bracket = false; -  char *fname = 0;    result.unsignedp = false;    result.high = 0; @@ -2208,39 +2203,34 @@ parse_has_include (cpp_reader *pfile, enum include_type type)    pfile->state.in__has_include__++; -  token = cpp_get_token (pfile); -  if (token->type == CPP_OPEN_PAREN) -    { -      paren = true; -      token = cpp_get_token (pfile); -    } +  const cpp_token *token = cpp_get_token (pfile); +  bool paren = token->type == CPP_OPEN_PAREN; +  if (paren) +    token = cpp_get_token (pfile); +  bool bracket = token->type != CPP_STRING; +  cpp_hashnode *node = NULL; +  char *fname = NULL;    if (token->type == CPP_STRING || token->type == CPP_HEADER_NAME)      { -      if (token->type == CPP_HEADER_NAME) -	bracket = true;        fname = XNEWVEC (char, token->val.str.len - 1);        memcpy (fname, token->val.str.text + 1, token->val.str.len - 2);        fname[token->val.str.len - 2] = '\0';        node = token->val.node.node;      }    else if (token->type == CPP_LESS) -    { -      bracket = true; -      fname = _cpp_bracket_include (pfile); -    } +    fname = _cpp_bracket_include (pfile);    else      cpp_error (pfile, CPP_DL_ERROR,  	       "operator \"__has_include__\" requires a header string");    if (fname)      { -      int angle_brackets = (bracket ? 1 : 0); - -      if (_cpp_has_header (pfile, fname, angle_brackets, type)) +      /* Do not do the lookup if we're skipping, that's unnecessary +	 IO.  */ +      if (!pfile->state.skip_eval +	  && _cpp_has_header (pfile, fname, bracket, type))  	result.low = 1; -      else -	result.low = 0;        XDELETEVEC (fname);      }  | 
