OSDN Git Service

1999-02-09 Andrew Haley <aph@cygnus.com>
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 Feb 1999 02:01:59 +0000 (02:01 +0000)
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 Feb 1999 02:01:59 +0000 (02:01 +0000)
        * 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@25260 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/class.c
gcc/java/constants.c
gcc/java/expr.c

index 1912ea7..f086f97 100644 (file)
@@ -1,3 +1,16 @@
+1999-02-17  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.
+
 Thu Feb 11 21:25:51 1999  Alexandre Petit-Bianco  <apbianco@cygnus.com>
  
        * parse.y (valid_builtin_assignconv_identity_widening_p): Got rid
index 3f2adbd..6d748a4 100644 (file)
@@ -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);
index 8eb9f54..3679d4e 100644 (file)
@@ -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. */
index 55e6ef6..dde41b9 100644 (file)
@@ -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));