public inbox for java-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: David Daney <ddaney@avtrex.com>
To: Ian Lance Taylor <iant@google.com>
Cc: gcc-patches <gcc-patches@gcc.gnu.org>,
	binutils@sourceware.org,
		Java Patch List <java-patches@gcc.gnu.org>
Subject: Re: [Patch 1/2] Add demangling for java resource files to libiberty
Date: Fri, 25 Jan 2008 22:10:00 -0000	[thread overview]
Message-ID: <479A5E18.6000100@avtrex.com> (raw)
In-Reply-To: <m3fxwuhq8d.fsf@localhost.localdomain>

[-- Attachment #1: Type: text/plain, Size: 2478 bytes --]

Ian Lance Taylor wrote:
> David Daney <ddaney@avtrex.com> writes:
>
>   
>> 2008-01-14  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-14  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_part): Same.
>> 	(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.
>>     
>
>
> This patch is OK.  It is OK for gcc 4.3 if the other part of the patch
> (to libjava) is committed to gcc 4.3.  Otherwise please wait until
> after the 4.3 release branch is made.
>
>   
A slightly different mangling scheme was committed based on IRC discussions:
http://gcc.gnu.org/ml/java-patches/2008-q1/msg00026.html

This is the corresponding demangler patch.

Tested on x86_64-pc-linux-gnu.

OK to commit to 4.3?  Or should it wait for the branch?

include/
2008-01-14  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-25  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.



[-- Attachment #2: demangle.patch --]
[-- Type: text/x-patch, Size: 6298 bytes --]

Index: include/demangle.h
===================================================================
RCS file: /cvs/src/src/include/demangle.h,v
retrieving revision 1.25
diff -u -p -r1.25 demangle.h
--- include/demangle.h	31 Aug 2007 20:20:44 -0000	1.25
+++ include/demangle.h	25 Jan 2008 21:51:32 -0000
@@ -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: libiberty/cp-demangle.c
===================================================================
RCS file: /cvs/src/src/libiberty/cp-demangle.c,v
retrieving revision 1.69
diff -u -p -r1.69 cp-demangle.c
--- libiberty/cp-demangle.c	31 Aug 2007 20:20:49 -0000	1.69
+++ libiberty/cp-demangle.c	25 Jan 2008 21:51:35 -0000
@@ -650,6 +650,15 @@ d_dump (struct demangle_component *dc, i
     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 dem
     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 dem
     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: libiberty/testsuite/demangle-expected
===================================================================
RCS file: /cvs/src/src/libiberty/testsuite/demangle-expected,v
retrieving revision 1.37
diff -u -p -r1.37 demangle-expected
--- libiberty/testsuite/demangle-expected	6 May 2007 00:25:11 -0000	1.37
+++ libiberty/testsuite/demangle-expected	25 Jan 2008 21:51:38 -0000
@@ -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

  reply	other threads:[~2008-01-25 22:10 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-15  1:02 David Daney
2008-01-15  1:23 ` [Patch 2/2] Make java compiled resources public David Daney
2008-01-19 18:41   ` Tom Tromey
2008-01-22 22:00     ` David Daney
2008-01-23 11:40       ` Andrew Haley
2008-01-23 23:05         ` David Daney
2008-01-18 19:46 ` [Patch 1/2] Add demangling for java resource files to libiberty Ian Lance Taylor
2008-01-25 22:10   ` David Daney [this message]
2008-01-27  5:41     ` Ian Lance Taylor
2008-01-27  6:29       ` David Daney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=479A5E18.6000100@avtrex.com \
    --to=ddaney@avtrex.com \
    --cc=binutils@sourceware.org \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=iant@google.com \
    --cc=java-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).