diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 0efcdc807bb..fbfead832ff 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2001-12-03 Tom Tromey + + * defineclass.cc (handleMethodsEnd): Invoke verifier here... + (handleCodeAttribute): ... not here. + * verify.cc (_Jv_BytecodeVerifier::state::state): Use `copy', not + structure assignment. + 2001-12-02 Bryce McKinlay * Makefile.am (nat_files, x_nat_files): Make sure the dependencies diff --git a/libjava/defineclass.cc b/libjava/defineclass.cc index 3a6eaba9227..31a46625320 100644 --- a/libjava/defineclass.cc +++ b/libjava/defineclass.cc @@ -500,10 +500,10 @@ void _Jv_ClassReader::read_methods () check_tag (name_index, JV_CONSTANT_Utf8); prepare_pool_entry (descriptor_index, JV_CONSTANT_Utf8); - + handleMethod (i, access_flags, name_index, descriptor_index); - + for (int j = 0; j < attributes_count; j++) { read_one_method_attribute (i); @@ -1282,10 +1282,6 @@ void _Jv_ClassReader::handleCodeAttribute code_length); def->interpreted_methods[method_index] = method; - - // FIXME: Shouldn't this be done after loading completes? -// if (verify) -// _Jv_VerifyMethod (method); } void _Jv_ClassReader::handleExceptionTableEntry @@ -1332,9 +1328,17 @@ 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); + } } } - } void _Jv_ClassReader::throw_class_format_error (char *msg) diff --git a/libjava/verify.cc b/libjava/verify.cc index 3b042e9963f..d4017eb7765 100644 --- a/libjava/verify.cc +++ b/libjava/verify.cc @@ -697,12 +697,12 @@ private: subroutine = 0; } - state (const state *copy, int max_stack, int max_locals) + state (const state *orig, int max_stack, int max_locals) { stack = new type[max_stack]; locals = new type[max_locals]; local_changed = (bool *) _Jv_Malloc (sizeof (bool) * max_locals); - *this = *copy; + copy (orig, max_stack, max_locals); next = INVALID; }