Patch: PR gcj/343
Tom Tromey
tromey@cygnus.com
Thu Sep 7 18:55:00 GMT 2000
This patch fixes PR gcj/343. The bug is that Java arrays implement
java.io.Serializable, but the gcj front end doesn't realize this.
Ok to commit?
2000-09-07 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.
Tom
Index: lex.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/java/lex.c,v
retrieving revision 1.40
diff -u -r1.40 lex.c
--- lex.c 2000/06/29 17:03:49 1.40
+++ lex.c 2000/09/08 01:32:49
@@ -72,6 +72,8 @@
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: parse.y
===================================================================
RCS file: /cvs/gcc/egcs/gcc/java/parse.y,v
retrieving revision 1.207
diff -u -r1.207 parse.y
--- parse.y 2000/09/06 02:37:09 1.207
+++ parse.y 2000/09/08 01:33:01
@@ -387,6 +387,9 @@
/* 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;
@@ -12303,19 +12306,25 @@
}
else
return source == dest || interface_of_p (dest, source);
+ }
+ else
+ {
+ /* Array */
+ return (cast
+ && (DECL_NAME (TYPE_NAME (source)) == java_lang_cloneable
+ || (DECL_NAME (TYPE_NAME (source))
+ == java_io_serializable)));
}
- else /* Array */
- return (cast ?
- (DECL_NAME (TYPE_NAME (source)) == java_lang_cloneable) : 0);
}
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);
More information about the Gcc-patches
mailing list