aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>2000-09-12 22:09:36 +0000
committerTom Tromey <tromey@gcc.gnu.org>2000-09-12 22:09:36 +0000
commitee17a29049f330ff40a486e56826468a223323c2 (patch)
tree0b6153fc2bd82325e0920acb3e0484fd0a0b659f /gcc/java
parent635a2a90714353ec2cb81138a59924d5a67fcb30 (diff)
downloadgcc-ee17a29049f330ff40a486e56826468a223323c2.zip
gcc-ee17a29049f330ff40a486e56826468a223323c2.tar.gz
gcc-ee17a29049f330ff40a486e56826468a223323c2.tar.bz2
re GNATS gcj/343 (can't cast array to serializable)
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
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog8
-rw-r--r--gcc/java/lex.c2
-rw-r--r--gcc/java/parse.y19
3 files changed, 24 insertions, 5 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 2f248f4..642f4a7 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -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.
diff --git a/gcc/java/lex.c b/gcc/java/lex.c
index 6efb907..535733f 100644
--- a/gcc/java/lex.c
+++ b/gcc/java/lex.c
@@ -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)
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index d37a7f1b..9c92e58 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -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);