include/
authorDavid Daney <ddaney@avtrex.com>
Sun, 27 Jan 2008 06:25:45 +0000 (06:25 +0000)
committerDavid Daney <ddaney@avtrex.com>
Sun, 27 Jan 2008 06:25:45 +0000 (06:25 +0000)
2008-01-26  David Daney  <ddaney@avtrex.com>

* demangle.h (demangle_component_type):  Add
DEMANGLE_COMPONENT_JAVA_RESOURCE,
DEMANGLE_COMPONENT_COMPOUND_NAME, and
DEMANGLE_COMPONENT_CHARACTER as new enum values.
(demangle_component): Add struct s_character to union u.

libiberty/
2008-01-26  David Daney  <ddaney@avtrex.com>

* cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_JAVA_RESOURCE,
DEMANGLE_COMPONENT_COMPOUND_NAME, and
DEMANGLE_COMPONENT_CHARACTER cases.
(d_make_comp): Handle DEMANGLE_COMPONENT_COMPOUND_NAME and
DEMANGLE_COMPONENT_JAVA_RESOURCE cases.
(d_make_character): New function.
(d_java_resource): Same.
(d_special_name): Handle "Gr" case.
(d_print_comp): Handle DEMANGLE_COMPONENT_JAVA_RESOURCE,
DEMANGLE_COMPONENT_COMPOUND_NAME, and
DEMANGLE_COMPONENT_CHARACTER cases.
* testsuite/demangle-expected: Add test for java resource name
mangling.

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

index 9e079f6251839c15bebaaf4eaac15c03e93163db..cf687ca783795ce69180ab5bbc667963ad35f1c7 100644 (file)
@@ -1,3 +1,11 @@
+2008-01-26  David Daney  <ddaney@avtrex.com>
+
+       * demangle.h (demangle_component_type):  Add
+       DEMANGLE_COMPONENT_JAVA_RESOURCE,
+       DEMANGLE_COMPONENT_COMPOUND_NAME, and
+       DEMANGLE_COMPONENT_CHARACTER as new enum values.
+       (demangle_component): Add struct s_character to union u.
+
 2008-01-23  Eric B. Weddington  <eric.weddington@atmel.com>
 
        * opcode/avr.h (AVR_ISA_RF401): Add new opcode set for at86rf401.
index b55226d8590a6b1e67102d6562897645f6760f5a..78e022dffe8d13fb14cdfe89931e6047d9a8cdf7 100644 (file)
@@ -362,7 +362,15 @@ enum demangle_component_type
      using 'n' instead of '-', we want a way to indicate a negative
      number which involves neither modifying the mangled string nor
      allocating a new copy of the literal in memory.  */
-  DEMANGLE_COMPONENT_LITERAL_NEG
+  DEMANGLE_COMPONENT_LITERAL_NEG,
+  /* A libgcj compiled resource.  The left subtree is the name of the
+     resource.  */
+  DEMANGLE_COMPONENT_JAVA_RESOURCE,
+  /* A name formed by the concatenation of two parts.  The left
+     subtree is the first part and the right subtree the second.  */
+  DEMANGLE_COMPONENT_COMPOUND_NAME,
+  /* A name formed by a single character.  */
+  DEMANGLE_COMPONENT_CHARACTER
 };
 
 /* Types which are only used internally.  */
@@ -448,6 +456,12 @@ struct demangle_component
       long number;
     } s_number;
 
+    /* For DEMANGLE_COMPONENT_CHARACTER.  */
+    struct
+    {
+      int character;
+    } s_character;
+
     /* For other types.  */
     struct
     {
index 5b085c32a17542e54424e2908e8093de108d67f5..f533060f9759bfaf6a6ef7f6dc9f7a19538edc0d 100644 (file)
@@ -1,3 +1,19 @@
+2008-01-26  David Daney  <ddaney@avtrex.com>
+
+       * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_JAVA_RESOURCE,
+       DEMANGLE_COMPONENT_COMPOUND_NAME, and
+       DEMANGLE_COMPONENT_CHARACTER cases.
+       (d_make_comp): Handle DEMANGLE_COMPONENT_COMPOUND_NAME and
+       DEMANGLE_COMPONENT_JAVA_RESOURCE cases.
+       (d_make_character): New function.
+       (d_java_resource): Same.
+       (d_special_name): Handle "Gr" case.
+       (d_print_comp): Handle DEMANGLE_COMPONENT_JAVA_RESOURCE,
+       DEMANGLE_COMPONENT_COMPOUND_NAME, and
+       DEMANGLE_COMPONENT_CHARACTER cases.
+       * testsuite/demangle-expected: Add test for java resource name
+       mangling.
+
 2008-01-23  Thiago Jung Bauermann  <bauerman@br.ibm.com>
 
        * cplus-dem.c (demangle_function_name): Changed to return value
index 3fc6a2197a32fddf31d255e15c0b0f9f7f9e60f0..edcfedca7a59f338a4a44afd3d298410a7f1ee85 100644 (file)
@@ -650,6 +650,15 @@ d_dump (struct demangle_component *dc, int indent)
     case DEMANGLE_COMPONENT_LITERAL_NEG:
       printf ("negative literal\n");
       break;
+    case DEMANGLE_COMPONENT_JAVA_RESOURCE:
+      printf ("java resource\n");
+      break;
+    case DEMANGLE_COMPONENT_COMPOUND_NAME:
+      printf ("compound name\n");
+      break;
+    case DEMANGLE_COMPONENT_CHARACTER:
+      printf ("character '%c'\n",  dc->u.s_character.character);
+      return;
     }
 
   d_dump (d_left (dc), indent + 2);
@@ -769,6 +778,7 @@ d_make_comp (struct d_info *di, enum demangle_component_type type,
     case DEMANGLE_COMPONENT_TRINARY_ARG2:
     case DEMANGLE_COMPONENT_LITERAL:
     case DEMANGLE_COMPONENT_LITERAL_NEG:
+    case DEMANGLE_COMPONENT_COMPOUND_NAME:
       if (left == NULL || right == NULL)
        return NULL;
       break;
@@ -795,6 +805,7 @@ d_make_comp (struct d_info *di, enum demangle_component_type type,
     case DEMANGLE_COMPONENT_ARGLIST:
     case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
     case DEMANGLE_COMPONENT_CAST:
+    case DEMANGLE_COMPONENT_JAVA_RESOURCE:
       if (left == NULL)
        return NULL;
       break;
@@ -1501,6 +1512,102 @@ d_operator_name (struct d_info *di)
     }
 }
 
+static struct demangle_component *
+d_make_character (struct d_info *di, int c)
+{
+  struct demangle_component *p;
+  p = d_make_empty (di);
+  if (p != NULL)
+    {
+      p->type = DEMANGLE_COMPONENT_CHARACTER;
+      p->u.s_character.character = c;
+    }
+  return p;
+}
+
+static struct demangle_component *
+d_java_resource (struct d_info *di)
+{
+  struct demangle_component *p = NULL;
+  struct demangle_component *next = NULL;
+  long len, i;
+  char c;
+  const char *str;
+
+  len = d_number (di);
+  if (len <= 1)
+    return NULL;
+
+  /* Eat the leading '_'.  */
+  if (d_next_char (di) != '_')
+    return NULL;
+  len--;
+
+  str = d_str (di);
+  i = 0;
+
+  while (len > 0)
+    {
+      c = str[i];
+      if (!c)
+       return NULL;
+
+      /* Each chunk is either a '$' escape...  */
+      if (c == '$')
+       {
+         i++;
+         switch (str[i++])
+           {
+           case 'S':
+             c = '/';
+             break;
+           case '_':
+             c = '.';
+             break;
+           case '$':
+             c = '$';
+             break;
+           default:
+             return NULL;
+           }
+         next = d_make_character (di, c);
+         d_advance (di, i);
+         str = d_str (di);
+         len -= i;
+         i = 0;
+         if (next == NULL)
+           return NULL;
+       }
+      /* ... or a sequence of characters.  */
+      else
+       {
+         while (i < len && str[i] && str[i] != '$')
+           i++;
+
+         next = d_make_name (di, str, i);
+         d_advance (di, i);
+         str = d_str (di);
+         len -= i;
+         i = 0;
+         if (next == NULL)
+           return NULL;
+       }
+
+      if (p == NULL)
+       p = next;
+      else
+       {
+         p = d_make_comp (di, DEMANGLE_COMPONENT_COMPOUND_NAME, p, next);
+         if (p == NULL)
+           return NULL;
+       }
+    }
+
+  p = d_make_comp (di, DEMANGLE_COMPONENT_JAVA_RESOURCE, p, NULL);
+
+  return p;
+}
+
 /* <special-name> ::= TV <type>
                   ::= TT <type>
                   ::= TI <type>
@@ -1514,6 +1621,7 @@ d_operator_name (struct d_info *di)
                   ::= TJ <type>
                   ::= GR <name>
                  ::= GA <encoding>
+                 ::= Gr <resource name>
 */
 
 static struct demangle_component *
@@ -1605,6 +1713,9 @@ d_special_name (struct d_info *di)
          return d_make_comp (di, DEMANGLE_COMPONENT_HIDDEN_ALIAS,
                              d_encoding (di, 0), NULL);
 
+       case 'r':
+         return d_java_resource (di);
+
        default:
          return NULL;
        }
@@ -3552,6 +3663,20 @@ d_print_comp (struct d_print_info *dpi,
       }
       return;
 
+    case DEMANGLE_COMPONENT_JAVA_RESOURCE:
+      d_append_string (dpi, "java resource ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_COMPOUND_NAME:
+      d_print_comp (dpi, d_left (dc));
+      d_print_comp (dpi, d_right (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_CHARACTER:
+      d_append_char (dpi, dc->u.s_character.character);
+      return;
+
     default:
       d_print_error (dpi);
       return;
index f1afc45c8c9b0bf80c237c066eafc2278902ab4c..7f9bc61f7b446ccdc4467bbb26baa7238eb60598 100644 (file)
@@ -3858,3 +3858,7 @@ foo()::var1
 --format=gnu-v3
 _ZZN7myspaceL3foo_1EvEN11localstruct1fEZNS_3fooEvE16otherlocalstruct
 myspace::foo()::localstruct::f(myspace::foo()::otherlocalstruct)
+# Java resource name
+--format=gnu-v3
+_ZGr32_java$Sutil$Siso4217$_properties
+java resource java/util/iso4217.properties