Implement xfer_partial TARGET_OBJECT_SIGNAL_INFO for NetBSD
[binutils-gdb.git] / gdb / c-exp.y
index f84691a62e7aff99838680cfa91263fe61a2b5b1..7fc23c4c8d285e0fed492a783120f68ab1bbb6d1 100644 (file)
@@ -1431,13 +1431,13 @@ scalar_type:
                                                0); }
        |       UNSIGNED type_name
                        { $$ = lookup_unsigned_typename (pstate->language (),
-                                                        TYPE_NAME($2.type)); }
+                                                        $2.type->name ()); }
        |       UNSIGNED
                        { $$ = lookup_unsigned_typename (pstate->language (),
                                                         "int"); }
        |       SIGNED_KEYWORD type_name
                        { $$ = lookup_signed_typename (pstate->language (),
-                                                      TYPE_NAME($2.type)); }
+                                                      $2.type->name ()); }
        |       SIGNED_KEYWORD
                        { $$ = lookup_signed_typename (pstate->language (),
                                                       "int"); }
@@ -1852,10 +1852,10 @@ typename_stoken (const char *type)
 static int
 type_aggregate_p (struct type *type)
 {
-  return (TYPE_CODE (type) == TYPE_CODE_STRUCT
-         || TYPE_CODE (type) == TYPE_CODE_UNION
-         || TYPE_CODE (type) == TYPE_CODE_NAMESPACE
-         || (TYPE_CODE (type) == TYPE_CODE_ENUM
+  return (type->code () == TYPE_CODE_STRUCT
+         || type->code () == TYPE_CODE_UNION
+         || type->code () == TYPE_CODE_NAMESPACE
+         || (type->code () == TYPE_CODE_ENUM
              && TYPE_DECLARED_CLASS (type)));
 }
 
@@ -1870,7 +1870,7 @@ check_parameter_typelist (std::vector<struct type *> *params)
   for (ix = 0; ix < params->size (); ++ix)
     {
       type = (*params)[ix];
-      if (type != NULL && TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID)
+      if (type != NULL && check_typedef (type)->code () == TYPE_CODE_VOID)
        {
          if (ix == 0)
            {
@@ -2551,17 +2551,13 @@ static const struct token ident_tokens[] =
 
 
 static void
-scan_macro_expansion (char *expansion)
+scan_macro_expansion (const char *expansion)
 {
-  const char *copy;
-
   /* We'd better not be trying to push the stack twice.  */
   gdb_assert (! cpstate->macro_original_text);
 
-  /* Copy to the obstack, and then free the intermediate
-     expansion.  */
-  copy = obstack_strdup (&cpstate->expansion_obstack, expansion);
-  xfree (expansion);
+  /* Copy to the obstack.  */
+  const char *copy = obstack_strdup (&cpstate->expansion_obstack, expansion);
 
   /* Save the old lexptr value, so we can return to it when we're done
      parsing the expanded text.  */
@@ -2631,12 +2627,11 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
   /* Check if this is a macro invocation that we need to expand.  */
   if (! scanning_macro_expansion ())
     {
-      char *expanded = macro_expand_next (&pstate->lexptr,
-                                          standard_macro_lookup,
-                                          expression_macro_scope);
+      gdb::unique_xmalloc_ptr<char> expanded
+       = macro_expand_next (&pstate->lexptr, *expression_macro_scope);
 
-      if (expanded)
-        scan_macro_expansion (expanded);
+      if (expanded != nullptr)
+        scan_macro_expansion (expanded.get ());
     }
 
   pstate->prev_lexptr = pstate->lexptr;
@@ -2748,7 +2743,7 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
     case '9':
       {
        /* It's a number.  */
-       int got_dot = 0, got_e = 0, toktype;
+       int got_dot = 0, got_e = 0, got_p = 0, toktype;
        const char *p = tokstart;
        int hex = input_radix > 10;
 
@@ -2768,13 +2763,16 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
            /* This test includes !hex because 'e' is a valid hex digit
               and thus does not indicate a floating point number when
               the radix is hex.  */
-           if (!hex && !got_e && (*p == 'e' || *p == 'E'))
+           if (!hex && !got_e && !got_p && (*p == 'e' || *p == 'E'))
              got_dot = got_e = 1;
+           else if (!got_e && !got_p && (*p == 'p' || *p == 'P'))
+             got_dot = got_p = 1;
            /* This test does not include !hex, because a '.' always indicates
               a decimal floating point number regardless of the radix.  */
            else if (!got_dot && *p == '.')
              got_dot = 1;
-           else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
+           else if (((got_e && (p[-1] == 'e' || p[-1] == 'E'))
+                     || (got_p && (p[-1] == 'p' || p[-1] == 'P')))
                     && (*p == '-' || *p == '+'))
              /* This is the sign of the exponent, not the end of the
                 number.  */
@@ -2787,7 +2785,7 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
              break;
          }
        toktype = parse_number (par_state, tokstart, p - tokstart,
-                               got_dot|got_e, &yylval);
+                               got_dot | got_e | got_p, &yylval);
         if (toktype == ERROR)
          {
            char *err_copy = (char *) alloca (p - tokstart + 1);