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:
Tom Tromey
2001-12-10 01:18:30 +00:00
committed by Tom Tromey
parent ec10f7c703
commit 6d8b12448d
4 changed files with 105 additions and 39 deletions

View File

@@ -940,7 +940,7 @@ _Jv_ClassReader::handleClassBegin
pool_data[super_class].clazz = the_super;
pool_tags[super_class] = JV_CONSTANT_ResolvedClass;
}
// now we've come past the circularity problem, we can
// now say that we're loading...
@@ -1315,15 +1315,6 @@ void _Jv_ClassReader::handleMethodsEnd ()
{
if (def->interpreted_methods[i] == 0)
throw_class_format_error ("method with no code");
if (verify)
{
_Jv_InterpMethod *m;
m = (reinterpret_cast<_Jv_InterpMethod *>
(def->interpreted_methods[i]));
// FIXME: enable once verifier is more fully tested.
// _Jv_VerifyMethod (m);
}
}
}
}