]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re GNATS gcj/343 (can't cast array to serializable)
authorTom Tromey <tromey@cygnus.com>
Tue, 12 Sep 2000 22:09:36 +0000 (22:09 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Tue, 12 Sep 2000 22:09:36 +0000 (22:09 +0000)
Fix for PR gcj/343:
* lex.c (java_init_lex): Initialize java_io_serializable.
* parse.y (java_io_serializable): New global.
(valid_ref_assignconv_cast_p): An array can be cast to
serializable.

From-SVN: r36376

gcc/java/ChangeLog
gcc/java/lex.c
gcc/java/parse.y

index 2f248f47241aa4e04b095fee87586a569ebf7136..642f4a79164c3960c081b196cdd22ab3a28d4667 100644 (file)
@@ -1,3 +1,11 @@
+2000-09-12  Tom Tromey  <tromey@cygnus.com>
+
+       Fix for PR gcj/343:
+       * lex.c (java_init_lex): Initialize java_io_serializable.
+       * parse.y (java_io_serializable): New global.
+       (valid_ref_assignconv_cast_p): An array can be cast to
+       serializable.
+
 2000-09-10  Zack Weinberg  <zack@wolery.cumb.org>
 
        * decl.c, expr.c: Include defaults.h if not already included.
index 6efb907178014c5279add119ae7f3abb802a1e4b..535733fe2e2309bcf5a36c44fd5c860194a802c6 100644 (file)
@@ -72,6 +72,8 @@ java_init_lex ()
     java_lang_id = get_identifier ("java.lang");
   if (!java_lang_cloneable)
     java_lang_cloneable = get_identifier ("java.lang.Cloneable");
+  if (!java_io_serializable)
+    java_io_serializable = get_identifier ("java.io.Serializable");
   if (!inst_id)
     inst_id = get_identifier ("inst$");
   if (!wpv_id)
index d37a7f1b32b4a2186b5931214afc5e952bf026df..9c92e58242aa402997afea9c156e181df439a259 100644 (file)
@@ -387,6 +387,9 @@ static tree inst_id = NULL_TREE;
 /* The "java.lang.Cloneable" qualified name.  */
 static tree java_lang_cloneable = NULL_TREE;
 
+/* The "java.io.Serializable" qualified name.  */
+static tree java_io_serializable = NULL_TREE; 
+
 /* Context and flag for static blocks */
 static tree current_static_block = NULL_TREE;
 
@@ -12304,18 +12307,24 @@ valid_ref_assignconv_cast_p (source, dest, cast)
          else
            return source == dest || interface_of_p (dest, source);
        }
-      else                     /* Array */
-       return (cast ? 
-               (DECL_NAME (TYPE_NAME (source)) == java_lang_cloneable) : 0);
+      else
+       {
+         /* Array */
+         return (cast
+                 && (DECL_NAME (TYPE_NAME (source)) == java_lang_cloneable
+                     || (DECL_NAME (TYPE_NAME (source))
+                         == java_io_serializable)));
+       }
     }
   if (TYPE_ARRAY_P (source))
     {
       if (TYPE_CLASS_P (dest))
        return dest == object_type_node;
       /* Can't cast an array to an interface unless the interface is
-        java.lang.Cloneable */
+        java.lang.Cloneable or java.io.Serializable.  */
       if (TYPE_INTERFACE_P (dest))
-       return (DECL_NAME (TYPE_NAME (dest)) == java_lang_cloneable ? 1 : 0);
+       return (DECL_NAME (TYPE_NAME (dest)) == java_lang_cloneable
+               || DECL_NAME (TYPE_NAME (dest)) == java_io_serializable);
       else                     /* Arrays */
        {
          tree source_element_type = TYPE_ARRAY_ELEMENT (source);