diff options
author | Andrew Haley <aph@cygnus.com> | 1999-02-17 02:01:59 +0000 |
---|---|---|
committer | Andrew Haley <aph@gcc.gnu.org> | 1999-02-17 02:01:59 +0000 |
commit | 7e57923cfc5fcf0182f8732dc7185edd270e6b6a (patch) | |
tree | 7638b4d2811e5f2af51147e536f2005bc7654aea /gcc/java/class.c | |
parent | 04f7a12f783ea0d1177a0f4cdec20051c56061c8 (diff) | |
download | gcc-7e57923cfc5fcf0182f8732dc7185edd270e6b6a.zip gcc-7e57923cfc5fcf0182f8732dc7185edd270e6b6a.tar.gz gcc-7e57923cfc5fcf0182f8732dc7185edd270e6b6a.tar.bz2 |
class.c (build_utf8_ref): Back out broken patch which was intended to to output signatures using '.' as a...
1999-02-09 Andrew Haley <aph@cygnus.com>
* class.c (build_utf8_ref): Back out broken patch which was
intended to to output signatures using '.' as a separator.
* class.c (make_class_data): Output signatures using '.' as a
separator, rather than '/'.
(mangled_classname): Likewise.
(make_field_value): Likewise.
(make_method_value): Likewise.
* constants.c (alloc_class_constant): Likewise.
* expr.c (build_invokeinterface): Likewise.
From-SVN: r25260
Diffstat (limited to 'gcc/java/class.c')
-rw-r--r-- | gcc/java/class.c | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/gcc/java/class.c b/gcc/java/class.c index 3f2adbd..6d748a4 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -103,7 +103,7 @@ mangled_classname (prefix, type) tree ident = TYPE_NAME (type); if (TREE_CODE (ident) != IDENTIFIER_NODE) ident = DECL_NAME (ident); - return identifier_subst (ident, prefix, '/', '_', ""); + return identifier_subst (ident, prefix, '.', '_', ""); } tree @@ -557,21 +557,10 @@ build_utf8_ref (name) PUSH_FIELD (ctype, field, "data", str_type); FINISH_RECORD (ctype); START_RECORD_CONSTRUCTOR (cinit, ctype); - { - int i; - /* Rewrite .class file internal form to canonical Java form. */ -#ifdef __GNUC__ - char buffer[name_len]; -#else - char *buffer = (char *)alloca (name_len); -#endif - for (i = 0; i < name_len; i++) - buffer[i] = (name_ptr[i] == '/' ? '.' : name_ptr[i]); - name_hash = hashUtf8String (buffer, name_len) & 0xFFFF; - PUSH_FIELD_VALUE (cinit, "hash", build_int_2 (name_hash, 0)); - PUSH_FIELD_VALUE (cinit, "length", build_int_2 (name_len, 0)); - string = build_string (name_len, buffer); - } + name_hash = hashUtf8String (name_ptr, name_len) & 0xFFFF; + PUSH_FIELD_VALUE (cinit, "hash", build_int_2 (name_hash, 0)); + PUSH_FIELD_VALUE (cinit, "length", build_int_2 (name_len, 0)); + string = build_string (name_len, name_ptr); TREE_TYPE (string) = str_type; PUSH_FIELD_VALUE (cinit, "data", string); FINISH_RECORD_CONSTRUCTOR (cinit); @@ -851,7 +840,12 @@ make_field_value (tree fdecl) if (resolved) type = build_class_ref (type); else - type = build_utf8_ref (build_java_signature (type)); + { + tree signature = build_java_signature (type); + type = build_utf8_ref (unmangle_classname + (IDENTIFIER_POINTER(signature), + IDENTIFIER_LENGTH(signature))); + } PUSH_FIELD_VALUE (finit, "type", type); flags = get_access_flags_from_decl (fdecl); if (! resolved) @@ -897,8 +891,14 @@ make_method_value (mdecl, this_class_addr) build_utf8_ref (DECL_CONSTRUCTOR_P (mdecl) ? init_identifier_node : DECL_NAME (mdecl))); - PUSH_FIELD_VALUE (minit, "signature", - build_utf8_ref (build_java_signature (TREE_TYPE (mdecl)))); + { + tree signature = build_java_signature (TREE_TYPE (mdecl)); + PUSH_FIELD_VALUE (minit, "signature", + (build_utf8_ref + (unmangle_classname + (IDENTIFIER_POINTER(signature), + IDENTIFIER_LENGTH(signature))))); + } PUSH_FIELD_VALUE (minit, "accflags", build_int_2 (accflags, 0)); PUSH_FIELD_VALUE (minit, "ncode", code); FINISH_RECORD_CONSTRUCTOR (minit); |