verify.cc (type::to_array): New method.

* verify.cc (type::to_array): New method.
	(_Jv_BytecodeVerifier::verify_instructions_0) [op_anewarray]:
	Construct new array type.

From-SVN: r47165
This commit is contained in:
Tom Tromey 2001-11-19 07:08:36 +00:00 committed by Tom Tromey
parent 755407600f
commit d68e5f555d
2 changed files with 22 additions and 1 deletions

View File

@ -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.

View File

@ -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:
{