From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14635 invoked by alias); 25 Jan 2008 22:10:06 -0000 Received: (qmail 14236 invoked by uid 22791); 25 Jan 2008 22:10:04 -0000 X-Spam-Check-By: sourceware.org Received: from smtp1.dnsmadeeasy.com (HELO smtp1.dnsmadeeasy.com) (205.234.170.144) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 25 Jan 2008 22:09:33 +0000 Received: from smtp1.dnsmadeeasy.com (localhost [127.0.0.1]) by smtp1.dnsmadeeasy.com (Postfix) with ESMTP id CDC423119E0; Fri, 25 Jan 2008 22:09:46 +0000 (UTC) X-Authenticated-Name: js.dnsmadeeasy X-Transit-System: In case of SPAM please contact abuse@dnsmadeeasy.com Received: from avtrex.com (unknown [67.116.42.147]) by smtp1.dnsmadeeasy.com (Postfix) with ESMTP; Fri, 25 Jan 2008 22:09:46 +0000 (UTC) Received: from [192.168.7.45] ([192.168.7.45]) by avtrex.com with Microsoft SMTPSVC(6.0.3790.1830); Fri, 25 Jan 2008 14:09:29 -0800 Message-ID: <479A5E18.6000100@avtrex.com> Date: Mon, 28 Jan 2008 15:42:00 -0000 From: David Daney User-Agent: Thunderbird 1.5.0.12 (X11/20071019) MIME-Version: 1.0 To: Ian Lance Taylor Cc: gcc-patches , binutils@sourceware.org, Java Patch List Subject: Re: [Patch 1/2] Add demangling for java resource files to libiberty References: <478C061B.1040003@avtrex.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------080401000201020103080302" X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2008-01/txt/msg00296.txt.bz2 This is a multi-part message in MIME format. --------------080401000201020103080302 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 2478 Ian Lance Taylor wrote: > David Daney writes: > > >> 2008-01-14 David Daney >> >> * 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 >> >> * 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 * 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 * 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. --------------080401000201020103080302 Content-Type: text/x-patch; name="demangle.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="demangle.patch" Content-length: 6298 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; +} + /* ::= TV ::= TT ::= TI @@ -1514,6 +1621,7 @@ d_operator_name (struct d_info *di) ::= TJ ::= GR ::= GA + ::= Gr */ 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 --------------080401000201020103080302--