diff options
author | Tom Tromey <tromey@cygnus.com> | 2000-09-12 22:09:36 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2000-09-12 22:09:36 +0000 |
commit | ee17a29049f330ff40a486e56826468a223323c2 (patch) | |
tree | 0b6153fc2bd82325e0920acb3e0484fd0a0b659f /gcc | |
parent | 635a2a90714353ec2cb81138a59924d5a67fcb30 (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/java/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/java/lex.c | 2 | ||||
-rw-r--r-- | gcc/java/parse.y | 19 |
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); |