src/share/vm/oops/constMethod.cpp

Print this page

        

*** 114,124 **** extra_bytes += sizes->exception_table_length() * sizeof(ExceptionTableElement); } if (sizes->generic_signature_index() != 0) { extra_bytes += sizeof(u2); } ! if (sizes->method_parameters_length() > 0) { extra_bytes += sizeof(u2); extra_bytes += sizes->method_parameters_length() * sizeof(MethodParametersElement); } // Align sizes up to a word. --- 114,128 ---- extra_bytes += sizes->exception_table_length() * sizeof(ExceptionTableElement); } if (sizes->generic_signature_index() != 0) { extra_bytes += sizeof(u2); } ! // This has to be a less-than-or-equal check, because we might be ! // storing information from a zero-length MethodParameters ! // attribute. We have to store these, because in some cases, they ! // cause the reflection API to throw a MalformedParametersException. ! if (sizes->method_parameters_length() >= 0) { extra_bytes += sizeof(u2); extra_bytes += sizes->method_parameters_length() * sizeof(MethodParametersElement); } // Align sizes up to a word.
*** 235,245 **** _flags = 0; if (sizes->compressed_linenumber_size() > 0) _flags |= _has_linenumber_table; if (sizes->generic_signature_index() != 0) _flags |= _has_generic_signature; ! if (sizes->method_parameters_length() > 0) _flags |= _has_method_parameters; if (sizes->checked_exceptions_length() > 0) _flags |= _has_checked_exceptions; if (sizes->exception_table_length() > 0) _flags |= _has_exception_table; --- 239,249 ---- _flags = 0; if (sizes->compressed_linenumber_size() > 0) _flags |= _has_linenumber_table; if (sizes->generic_signature_index() != 0) _flags |= _has_generic_signature; ! if (sizes->method_parameters_length() >= 0) _flags |= _has_method_parameters; if (sizes->checked_exceptions_length() > 0) _flags |= _has_checked_exceptions; if (sizes->exception_table_length() > 0) _flags |= _has_exception_table;
*** 270,291 **** // anything is added here. It might be advisable to have some sort // of indication of this inline. if (sizes->generic_signature_index() != 0) *(generic_signature_index_addr()) = sizes->generic_signature_index(); // New data should probably go here. ! if (sizes->method_parameters_length() > 0) *(method_parameters_length_addr()) = sizes->method_parameters_length(); if (sizes->checked_exceptions_length() > 0) *(checked_exceptions_length_addr()) = sizes->checked_exceptions_length(); if (sizes->exception_table_length() > 0) *(exception_table_length_addr()) = sizes->exception_table_length(); if (sizes->localvariable_table_length() > 0) *(localvariable_table_length_addr()) = sizes->localvariable_table_length(); } int ConstMethod::method_parameters_length() const { ! return has_method_parameters() ? *(method_parameters_length_addr()) : 0; } MethodParametersElement* ConstMethod::method_parameters_start() const { u2* addr = method_parameters_length_addr(); u2 length = *addr; --- 274,295 ---- // anything is added here. It might be advisable to have some sort // of indication of this inline. if (sizes->generic_signature_index() != 0) *(generic_signature_index_addr()) = sizes->generic_signature_index(); // New data should probably go here. ! if (sizes->method_parameters_length() >= 0) *(method_parameters_length_addr()) = sizes->method_parameters_length(); if (sizes->checked_exceptions_length() > 0) *(checked_exceptions_length_addr()) = sizes->checked_exceptions_length(); if (sizes->exception_table_length() > 0) *(exception_table_length_addr()) = sizes->exception_table_length(); if (sizes->localvariable_table_length() > 0) *(localvariable_table_length_addr()) = sizes->localvariable_table_length(); } int ConstMethod::method_parameters_length() const { ! return has_method_parameters() ? *(method_parameters_length_addr()) : -1; } MethodParametersElement* ConstMethod::method_parameters_start() const { u2* addr = method_parameters_length_addr(); u2 length = *addr;