From 7e57923cfc5fcf0182f8732dc7185edd270e6b6a Mon Sep 17 00:00:00 2001 From: Andrew Haley Date: Wed, 17 Feb 1999 02:01:59 +0000 Subject: [PATCH] class.c (build_utf8_ref): Back out broken patch which was intended to to output signatures using '.' as a... 1999-02-09 Andrew Haley * 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 --- gcc/java/ChangeLog | 13 +++++++++++++ gcc/java/class.c | 38 +++++++++++++++++++------------------- gcc/java/constants.c | 7 +++++-- gcc/java/expr.c | 6 +++++- 4 files changed, 42 insertions(+), 22 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 1912ea7..f086f97 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,16 @@ +1999-02-17 Andrew Haley + + * 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. + Thu Feb 11 21:25:51 1999 Alexandre Petit-Bianco * parse.y (valid_builtin_assignconv_identity_widening_p): Got rid 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); diff --git a/gcc/java/constants.c b/gcc/java/constants.c index 8eb9f54..3679d4e 100644 --- a/gcc/java/constants.c +++ b/gcc/java/constants.c @@ -368,9 +368,12 @@ int alloc_class_constant (clas) tree clas; { - + tree class_name = build_internal_class_name (clas); + return alloc_name_constant (CONSTANT_Class, - build_internal_class_name (clas)); + (unmangle_classname + (IDENTIFIER_POINTER(class_name), + IDENTIFIER_LENGTH(class_name)))); } /* Return a reference to the data array of the current constant pool. */ diff --git a/gcc/java/expr.c b/gcc/java/expr.c index 55e6ef6..dde41b9 100644 --- a/gcc/java/expr.c +++ b/gcc/java/expr.c @@ -1473,7 +1473,11 @@ build_invokeinterface (dtable, method_name, method_signature) dtable = build1 (INDIRECT_REF, dtable_type, dtable); dtable = build (COMPONENT_REF, class_ptr_type, dtable, lookup_field (&dtable_type, class_ident)); - lookup_arg = build_tree_list (NULL_TREE, build_utf8_ref (method_signature)); + lookup_arg = build_tree_list (NULL_TREE, + (build_utf8_ref + (unmangle_classname + (IDENTIFIER_POINTER(method_signature), + IDENTIFIER_LENGTH(method_signature))))); lookup_arg = tree_cons (NULL_TREE, dtable, tree_cons (NULL_TREE, build_utf8_ref (method_name), lookup_arg)); -- 2.7.4