resolve.cc (_Jv_PrepareClass): Verify method here...
* resolve.cc (_Jv_PrepareClass): Verify method here... * defineclass.cc (handleMethodsEnd): ... not here. * verify.cc (_Jv_BytecodeVerifier::initialize_stack): New method. (_Jv_BytecodeVerifier::verify_instructions_0) [op_return]: Ensure there are no uninitialized objects. (_Jv_BytecodeVerifier::state::this_type): New field. (_Jv_BytecodeVerifier::state::state): Initialize this_type. (_Jv_BytecodeVerifier::state::copy): Copy this_type. (_Jv_BytecodeVerifier::state::merge): Merge this_type. (_Jv_BytecodeVerifier::state::check_no_uninitialized_objects): Handle this_type. (_Jv_BytecodeVerifier::state::check_this_initialized): New method. (_Jv_BytecodeVerifier::state::set_initialized): Handle this_type. (_Jv_BytecodeVerifier::state::set_this_type): New method. (_Jv_BytecodeVerifier::verify_instructions_0) [op_putfield]: Allow assignment to fields of `this' before another initializer is run. From-SVN: r47826
This commit is contained in:
parent
ec10f7c703
commit
6d8b12448d
4 changed files with 105 additions and 39 deletions
|
@ -578,7 +578,7 @@ _Jv_PrepareClass(jclass klass)
|
|||
|
||||
// set the instance size for the class
|
||||
clz->size_in_bytes = instance_size;
|
||||
|
||||
|
||||
// allocate static memory
|
||||
if (static_size != 0)
|
||||
{
|
||||
|
@ -628,6 +628,8 @@ _Jv_PrepareClass(jclass klass)
|
|||
else if (imeth != 0) // it could be abstract
|
||||
{
|
||||
_Jv_InterpMethod *im = reinterpret_cast<_Jv_InterpMethod *> (imeth);
|
||||
// FIXME: enable once verifier is more fully tested.
|
||||
// _Jv_VerifyMethod (im);
|
||||
clz->methods[i].ncode = im->ncode ();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue