diff options
author | David Daney <ddaney@avtrex.com> | 2008-01-23 23:00:39 +0000 |
---|---|---|
committer | David Daney <daney@gcc.gnu.org> | 2008-01-23 23:00:39 +0000 |
commit | 3e603aef40cb6ac7e1e900ab8d2d74ce71cb6595 (patch) | |
tree | c5724340e6d582282ffea2d456a266bb7efcdf72 /gcc/java/mangle.c | |
parent | 6c660aeb0e8079ee3267af0dc3682ce9cdc91385 (diff) | |
download | gcc-3e603aef40cb6ac7e1e900ab8d2d74ce71cb6595.zip gcc-3e603aef40cb6ac7e1e900ab8d2d74ce71cb6595.tar.gz gcc-3e603aef40cb6ac7e1e900ab8d2d74ce71cb6595.tar.bz2 |
2008-01-23 David Daney <ddaney@avtrex.com>
* class.c (hide) Rename to...
(java_hide_decl) ... this throughout, and make public.
* resource.c (Jr_count): Remove.
(compile_resource_data): Call java_mangle_resource_name to generate
decl name. Make resource decl public and hidden.
* mangle.c (java_mangle_resource_name): New function.
* java-tree.h (java_hide_decl, java_mangle_resource_name): Declare
functions.
From-SVN: r131767
Diffstat (limited to 'gcc/java/mangle.c')
-rw-r--r-- | gcc/java/mangle.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/gcc/java/mangle.c b/gcc/java/mangle.c index c7624d5..c92be1c 100644 --- a/gcc/java/mangle.c +++ b/gcc/java/mangle.c @@ -796,6 +796,59 @@ compression_table_add (tree type) TREE_VEC_ELT (compression_table, compression_next++) = type; } +/* Mangle an embedded resource file name. "_ZGr" is the prefix. A + '_' is prepended to the name so that names starting with a digit + can be demangled. The length and then the resulting name itself + are appended while escaping '$', '.', and '/' to: "$$", "$_", and + "$S". */ + +tree +java_mangle_resource_name (const char *name) +{ + int len = strlen (name); + char *buf = (char *) alloca (2 * len + 1); + char *pos; + const unsigned char *w1 = (const unsigned char *) name; + const unsigned char *w2; + const unsigned char *limit = w1 + len; + + pos = buf; + + init_mangling (); + MANGLE_RAW_STRING ("Gr"); + + *pos++ = '_'; + while (w1 < limit) + { + int ch; + w2 = w1; + ch = UTF8_GET (w1, limit); + gcc_assert (ch > 0); + switch (ch) + { + case '$': + *pos++ = '$'; + *pos++ = '$'; + break; + case '.': + *pos++ = '$'; + *pos++ = '_'; + break; + case '/': + *pos++ = '$'; + *pos++ = 'S'; + break; + default: + memcpy (pos, w2, w1 - w2); + pos += w1 - w2; + break; + } + } + append_gpp_mangled_name (buf, pos - buf); + + return finish_mangling (); +} + /* Mangling initialization routine. */ static void |