OSDN Git Service

2008-01-23 Thiago Jung Bauermann <bauerman@br.ibm.com>
authorbje <bje@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Jan 2008 05:04:03 +0000 (05:04 +0000)
committerbje <bje@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Jan 2008 05:04:03 +0000 (05:04 +0000)
* cplus-dem.c (demangle_function_name): Changed to return value
indicating if a name was correctly demangled.
(iterate_demangle_function): Use demangle_function_name return
value.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131754 138bc75d-0d04-0410-961f-82ee72b054a4

libiberty/ChangeLog
libiberty/cplus-dem.c

index e2e3acb..5b085c3 100644 (file)
@@ -1,3 +1,10 @@
+2008-01-23  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+       * cplus-dem.c (demangle_function_name): Changed to return value
+       indicating if a name was correctly demangled.
+       (iterate_demangle_function): Use demangle_function_name return
+       value.
+
 2008-01-19  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
 
        PR other/33768
index 1f8b1fc..da01a06 100644 (file)
@@ -414,7 +414,7 @@ static int do_type (struct work_stuff *, const char **, string *);
 
 static int do_arg (struct work_stuff *, const char **, string *);
 
-static void
+static int
 demangle_function_name (struct work_stuff *, const char **, string *,
                         const char *);
 
@@ -2493,10 +2493,7 @@ iterate_demangle_function (struct work_stuff *work, const char **mangled,
      "__"-sequence.  This is the normal case.  */
   if (ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING
       || strstr (scan + 2, "__") == NULL)
-    {
-      demangle_function_name (work, mangled, declp, scan);
-      return 1;
-    }
+    return demangle_function_name (work, mangled, declp, scan);
 
   /* Save state so we can restart if the guess at the correct "__" was
      wrong.  */
@@ -2513,10 +2510,12 @@ iterate_demangle_function (struct work_stuff *work, const char **mangled,
 
   while (scan[2])
     {
-      demangle_function_name (work, mangled, declp, scan);
-      success = demangle_signature (work, mangled, declp);
-      if (success)
-       break;
+      if (demangle_function_name (work, mangled, declp, scan))
+       {
+         success = demangle_signature (work, mangled, declp);
+         if (success)
+           break;
+       }
 
       /* Reset demangle state for the next round.  */
       *mangled = mangle_init;
@@ -4421,7 +4420,9 @@ demangle_nested_args (struct work_stuff *work, const char **mangled,
   return result;
 }
 
-static void
+/* Returns 1 if a valid function name was found or 0 otherwise.  */
+
+static int 
 demangle_function_name (struct work_stuff *work, const char **mangled,
                         string *declp, const char *scan)
 {
@@ -4461,13 +4462,13 @@ demangle_function_name (struct work_stuff *work, const char **mangled,
        {
          work -> constructor += 1;
          string_clear (declp);
-         return;
+         return 1;
        }
       else if (strcmp (declp -> b, "__dt") == 0)
        {
          work -> destructor += 1;
          string_clear (declp);
-         return;
+         return 1;
        }
     }
 
@@ -4575,6 +4576,13 @@ demangle_function_name (struct work_stuff *work, const char **mangled,
            }
        }
     }
+
+  /* If a function name was obtained but it's not valid, we were not
+     successful.  */
+  if (LEN_STRING (declp) == 1 && declp->b[0] == '.')
+    return 0;
+  else
+    return 1;
 }
 
 /* a mini string-handling package */