[Demangle PATCH] Some pre-fix cleanups
authorNathan Sidwell <nathan@acm.org>
Fri, 15 Sep 2017 10:50:05 +0000 (10:50 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Fri, 15 Sep 2017 10:50:05 +0000 (10:50 +0000)
https://gcc.gnu.org/ml/gcc-patches/2017-09/msg00983.html

* cp-demangle.c (is_fnqual_component_type): Reimplement using
FNQUAL_COMPONENT_CASE.
(d_encoding): Hold bare_function_type in local var.
(d_local_name): Build name in both cases and build result once.
Collapse switch-if to single conditional.
* testsuite/demangle-expected: Realign blank lines with tests.

From-SVN: r252802

libiberty/ChangeLog
libiberty/cp-demangle.c
libiberty/testsuite/demangle-expected

index ca2b1a0aca289f431df32d7c6c1e6f8a4010d6c1..2ecd478f31e2561ac4355aae09e34d0cab32ab21 100644 (file)
@@ -1,3 +1,12 @@
+2017-09-15  Nathan Sidwell  <nathan@acm.org>
+
+       * cp-demangle.c (is_fnqual_component_type): Reimplement using
+       FNQUAL_COMPONENT_CASE.
+       (d_encoding): Hold bare_function_type in local var.
+       (d_local_name): Build name in both cases and build result once.
+       Collapse switch-if to single conditional.
+       * testsuite/demangle-expected: Realign blank lines with tests.
+
 2017-09-12  Jiong Wang  <jiong.wang@arm.com>
 
        * dwarfnames.c (DW_CFA_DUP): New define.
index 7b8d0b4cbaa699544f11e5cc78f081053e4c9dc8..e8705984c5276c0b9fe1addca107301a23e6cde5 100644 (file)
@@ -568,22 +568,6 @@ static int d_demangle_callback (const char *, int,
                                 demangle_callbackref, void *);
 static char *d_demangle (const char *, int, size_t *);
 
-/* True iff TYPE is a demangling component representing a
-   function-type-qualifier.  */
-
-static int
-is_fnqual_component_type (enum demangle_component_type type)
-{
-  return (type == DEMANGLE_COMPONENT_RESTRICT_THIS
-         || type == DEMANGLE_COMPONENT_VOLATILE_THIS
-         || type == DEMANGLE_COMPONENT_CONST_THIS
-         || type == DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS
-         || type == DEMANGLE_COMPONENT_TRANSACTION_SAFE
-         || type == DEMANGLE_COMPONENT_NOEXCEPT
-         || type == DEMANGLE_COMPONENT_THROW_SPEC
-         || type == DEMANGLE_COMPONENT_REFERENCE_THIS);
-}
-
 #define FNQUAL_COMPONENT_CASE                          \
     case DEMANGLE_COMPONENT_RESTRICT_THIS:             \
     case DEMANGLE_COMPONENT_VOLATILE_THIS:             \
@@ -594,6 +578,23 @@ is_fnqual_component_type (enum demangle_component_type type)
     case DEMANGLE_COMPONENT_NOEXCEPT:                  \
     case DEMANGLE_COMPONENT_THROW_SPEC
 
+/* True iff TYPE is a demangling component representing a
+   function-type-qualifier.  */
+
+static int
+is_fnqual_component_type (enum demangle_component_type type)
+{
+  switch (type)
+    {
+    FNQUAL_COMPONENT_CASE:
+      return 1;
+    default:
+      break;
+    }
+  return 0;
+}
+
+
 #ifdef CP_DEMANGLE_DEBUG
 
 static void
@@ -1305,7 +1306,7 @@ d_encoding (struct d_info *di, int top_level)
     return d_special_name (di);
   else
     {
-      struct demangle_component *dc;
+      struct demangle_component *dc, *dcr;
 
       dc = d_name (di);
 
@@ -1327,8 +1328,6 @@ d_encoding (struct d_info *di, int top_level)
             which is local to a function.  */
          if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
            {
-             struct demangle_component *dcr;
-
              dcr = d_right (dc);
              while (is_fnqual_component_type (dcr->type))
                dcr = d_left (dcr);
@@ -1341,8 +1340,8 @@ d_encoding (struct d_info *di, int top_level)
       peek = d_peek_char (di);
       if (dc == NULL || peek == '\0' || peek == 'E')
        return dc;
-      return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
-                         d_bare_function_type (di, has_return_type (dc)));
+      dcr = d_bare_function_type (di, has_return_type (dc));
+      return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc, dcr);
     }
 }
 
@@ -3571,6 +3570,7 @@ static struct demangle_component *
 d_local_name (struct d_info *di)
 {
   struct demangle_component *function;
+  struct demangle_component *name;
 
   if (! d_check_char (di, 'Z'))
     return NULL;
@@ -3585,13 +3585,10 @@ d_local_name (struct d_info *di)
       d_advance (di, 1);
       if (! d_discriminator (di))
        return NULL;
-      return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
-                         d_make_name (di, "string literal",
-                                      sizeof "string literal" - 1));
+      name = d_make_name (di, "string literal", sizeof "string literal" - 1);
     }
   else
     {
-      struct demangle_component *name;
       int num = -1;
 
       if (d_peek_char (di) == 'd')
@@ -3604,21 +3601,19 @@ d_local_name (struct d_info *di)
        }
 
       name = d_name (di);
-      if (name)
-       switch (name->type)
-         {
-           /* Lambdas and unnamed types have internal discriminators.  */
-         case DEMANGLE_COMPONENT_LAMBDA:
-         case DEMANGLE_COMPONENT_UNNAMED_TYPE:
-           break;
-         default:
-           if (! d_discriminator (di))
-             return NULL;
-         }
+      if (name
+         /* Lambdas and unnamed types have internal discriminators.  */
+         && name->type != DEMANGLE_COMPONENT_LAMBDA
+         && name->type != DEMANGLE_COMPONENT_UNNAMED_TYPE
+         /* Otherwise read and ignore an optional discriminator.  */
+         && ! d_discriminator (di))
+       return NULL;
+
       if (num >= 0)
        name = d_make_default_arg (di, num, name);
-      return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
     }
+
+  return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
 }
 
 /* <discriminator> ::= _ <number>    # when number < 10
index f2a12b9a7d1fd6a2678bc700ff5805d3b588edc4..519f6d05f27d3d7a773a6100432df74b9663a78e 100644 (file)
@@ -4720,18 +4720,19 @@ _ZdvMMMMMMMMMMMMMrrrrA_DTdvfp_fp_Eededilfdfdfdfd
 
 _Z1MA_aMMMMA_MMA_MMMMMMMMSt1MS_o11T0000000000t2M0oooozoooo
 _Z1MA_aMMMMA_MMA_MMMMMMMMSt1MS_o11T0000000000t2M0oooozoooo
-
 #
 # demangler/80513 Test for overflow in d_number
+
 _Z4294967297x
 _Z4294967297x
-
 #
 # demangler/80513 Test for bogus characters after __thunk_
+
 __thunk_16a_$_1x
 __thunk_16a_$_1x
-
 #
 # demangler/80513 Test for overflow in consume_count
+
 __thunk_4294967297__$_1x
 __thunk_4294967297__$_1x
+#