[Ada] Consistently use explicit Entity_Id type instead of alias
[gcc.git] / libcpp / traditional.c
index 3c3b8ac3f1a7a665c58c7a722b0d988c2aff44e6..225e3c2c2f2127d22030963ac40ab8a9006a4552 100644 (file)
@@ -1,5 +1,5 @@
 /* CPP Library - traditional lexical analysis and macro expansion.
-   Copyright (C) 2002-2018 Free Software Foundation, Inc.
+   Copyright (C) 2002-2020 Free Software Foundation, Inc.
    Contributed by Neil Booth, May 2002
 
 This program is free software; you can redistribute it and/or modify it
@@ -60,7 +60,7 @@ struct fun_macro
   size_t offset;
 
   /* The line the macro name appeared on.  */
-  source_location line;
+  location_t line;
 
   /* Number of parameters.  */
   unsigned int paramc;
@@ -77,9 +77,8 @@ enum ls {ls_none = 0,         /* Normal state.  */
         ls_defined_close,      /* Looking for ')' of defined().  */
         ls_hash,               /* After # in preprocessor conditional.  */
         ls_predicate,          /* After the predicate, maybe paren?  */
-        ls_answer,             /* In answer to predicate.  */
-        ls_has_include,        /* After __has_include__.  */
-        ls_has_include_close}; /* Looking for ')' of __has_include__.  */
+        ls_answer              /* In answer to predicate.  */
+};
 
 /* Lexing TODO: Maybe handle space in escaped newlines.  Stop lex.c
    from recognizing comments and directives during its lexing pass.  */
@@ -161,7 +160,7 @@ static const uchar *
 copy_comment (cpp_reader *pfile, const uchar *cur, int in_define)
 {
   bool unterminated, copy = false;
-  source_location src_loc = pfile->line_table->highest_line;
+  location_t src_loc = pfile->line_table->highest_line;
   cpp_buffer *buffer = pfile->buffer;
 
   buffer->cur = cur;
@@ -313,7 +312,11 @@ _cpp_read_logical_line_trad (cpp_reader *pfile)
   do
     {
       if (pfile->buffer->need_line && !_cpp_get_fresh_line (pfile))
-       return false;
+       {
+         /* Now pop the buffer that _cpp_get_fresh_line did not.  */
+         _cpp_pop_buffer (pfile);
+         return false;
+       }
     }
   while (!_cpp_scan_out_logical_line (pfile, NULL, false)
         || pfile->state.skipping);
@@ -326,9 +329,12 @@ static inline bool
 fun_like_macro (cpp_hashnode *node)
 {
   if (cpp_builtin_macro_p (node))
-    return node->value.builtin == BT_HAS_ATTRIBUTE;
-  else
-    return node->value.macro->fun_like;
+    return (node->value.builtin == BT_HAS_ATTRIBUTE
+           || node->value.builtin == BT_HAS_STD_ATTRIBUTE
+           || node->value.builtin == BT_HAS_BUILTIN
+           || node->value.builtin == BT_HAS_INCLUDE
+           || node->value.builtin == BT_HAS_INCLUDE_NEXT);
+  return node->value.macro->fun_like;
 }
 
 /* Set up state for finding the opening '(' of a function-like
@@ -545,7 +551,7 @@ _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro,
                      goto new_context;
                    }
                }
-             else if (macro && (node->flags & NODE_MACRO_ARG) != 0)
+             else if (macro && node->type == NT_MACRO_ARG)
                {
                  /* Found a parameter in the replacement text of a
                     #define.  Remove its name from the output.  */
@@ -564,13 +570,6 @@ _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro,
                  lex_state = ls_defined;
                  continue;
                }
-             else if (pfile->state.in_expression
-                      && (node == pfile->spec_nodes.n__has_include__
-                       || node == pfile->spec_nodes.n__has_include_next__))
-               {
-                 lex_state = ls_has_include;
-                 continue;
-               }
            }
          break;
 
@@ -594,8 +593,6 @@ _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro,
                lex_state = ls_answer;
              else if (lex_state == ls_defined)
                lex_state = ls_defined_close;
-             else if (lex_state == ls_has_include)
-               lex_state = ls_has_include_close;
            }
          break;
 
@@ -729,8 +726,7 @@ _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro,
                      goto new_context;
                    }
                }
-             else if (lex_state == ls_answer || lex_state == ls_defined_close
-                       || lex_state == ls_has_include_close)
+             else if (lex_state == ls_answer || lex_state == ls_defined_close)
                lex_state = ls_none;
            }
          break;
@@ -811,8 +807,7 @@ _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro,
        lex_state = ls_none;
       else if (lex_state == ls_hash
               || lex_state == ls_predicate
-              || lex_state == ls_defined
-              || lex_state == ls_has_include)
+              || lex_state == ls_defined)
        lex_state = ls_none;
 
       /* ls_answer and ls_defined_close keep going until ')'.  */
@@ -918,7 +913,7 @@ _cpp_replacement_text_len (const cpp_macro *macro)
          len += b->text_len;
          if (b->arg_index == 0)
            break;
-         len += NODE_LEN (macro->params[b->arg_index - 1]);
+         len += NODE_LEN (macro->parm.params[b->arg_index - 1]);
          exp += BLOCK_LEN (b->text_len);
        }
     }
@@ -947,7 +942,7 @@ _cpp_copy_replacement_text (const cpp_macro *macro, uchar *dest)
          dest += b->text_len;
          if (b->arg_index == 0)
            break;
-         param = macro->params[b->arg_index - 1];
+         param = macro->parm.params[b->arg_index - 1];
          memcpy (dest, NODE_NAME (param), NODE_LEN (param));
          dest += NODE_LEN (param);
          exp += BLOCK_LEN (b->text_len);
@@ -1210,7 +1205,7 @@ _cpp_create_trad_definition (cpp_reader *pfile)
     {
       macro = _cpp_new_macro (pfile, cmk_traditional,
                              _cpp_aligned_alloc (pfile, sizeof (cpp_macro)));
-      macro->params = params;
+      macro->parm.params = params;
       macro->paramc = nparms;
       macro->fun_like = fun_like != 0;
     }