diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-11-19 07:08:36 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-11-19 07:08:36 +0000 |
commit | 629b3566e16e6e48db7762cff517bfdcc5583bed (patch) | |
tree | ffae3bbbb68e0f88dec21fdae51b13c8b1584b17 | |
parent | 25037517df7782dbe35170dbe7864ddd9e2c4c9a (diff) | |
download | gcc-629b3566e16e6e48db7762cff517bfdcc5583bed.tar.gz |
* verify.cc (type::to_array): New method.
(_Jv_BytecodeVerifier::verify_instructions_0) [op_anewarray]:
Construct new array type.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47165 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | libjava/ChangeLog | 4 | ||||
-rw-r--r-- | libjava/verify.cc | 19 |
2 files changed, 22 insertions, 1 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 39670efbf7b..af02f3ecf6d 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,9 @@ 2001-11-18 Tom Tromey <tromey@redhat.com> + * verify.cc (type::to_array): New method. + (_Jv_BytecodeVerifier::verify_instructions_0) [op_anewarray]: + Construct new array type. + * verify.cc (_Jv_BytecodeVerifier::branch_prepass) [op_sipush]: Skip a short, not a byte. [op_newarray]: Skip a byte, not a short. diff --git a/libjava/verify.cc b/libjava/verify.cc index 423edaa1609..8c290a38d28 100644 --- a/libjava/verify.cc +++ b/libjava/verify.cc @@ -491,6 +491,23 @@ private: return type (k); } + // Return the array type corresponding to an initialized + // reference. We could expand this to work for other kinds of + // types, but currently we don't need to. + type to_array () + { + // Resolving isn't ideal, because it might force us to load + // another class, but it's easy. FIXME? + if (key == unresolved_reference_type) + resolve (); + + if (key == reference_type) + return type (_Jv_GetArrayClass (data.klass, + data.klass->getClassLoader ())); + else + verify_fail ("internal error in type::to_array()"); + } + bool isreference () const { return key >= reference_type; @@ -2426,7 +2443,7 @@ private: break; case op_anewarray: pop_type (int_type); - push_type (check_class_constant (get_ushort ())); + push_type (check_class_constant (get_ushort ()).to_array ()); break; case op_arraylength: { |