33 #include "interpreter/oopMapCache.hpp" |
33 #include "interpreter/oopMapCache.hpp" |
34 #include "memory/gcLocker.hpp" |
34 #include "memory/gcLocker.hpp" |
35 #include "memory/generation.hpp" |
35 #include "memory/generation.hpp" |
36 #include "memory/metadataFactory.hpp" |
36 #include "memory/metadataFactory.hpp" |
37 #include "memory/oopFactory.hpp" |
37 #include "memory/oopFactory.hpp" |
|
38 #include "oops/constMethod.hpp" |
38 #include "oops/methodData.hpp" |
39 #include "oops/methodData.hpp" |
39 #include "oops/method.hpp" |
40 #include "oops/method.hpp" |
40 #include "oops/oop.inline.hpp" |
41 #include "oops/oop.inline.hpp" |
41 #include "oops/symbol.hpp" |
42 #include "oops/symbol.hpp" |
42 #include "prims/jvmtiExport.hpp" |
43 #include "prims/jvmtiExport.hpp" |
55 |
56 |
56 |
57 |
57 // Implementation of Method |
58 // Implementation of Method |
58 |
59 |
59 Method* Method::allocate(ClassLoaderData* loader_data, |
60 Method* Method::allocate(ClassLoaderData* loader_data, |
60 int byte_code_size, |
61 int byte_code_size, |
61 AccessFlags access_flags, |
62 AccessFlags access_flags, |
62 int compressed_line_number_size, |
63 int compressed_line_number_size, |
63 int localvariable_table_length, |
64 int localvariable_table_length, |
64 int exception_table_length, |
65 int exception_table_length, |
65 int checked_exceptions_length, |
66 int checked_exceptions_length, |
66 TRAPS) { |
67 ConstMethod::MethodType method_type, |
|
68 TRAPS) { |
67 assert(!access_flags.is_native() || byte_code_size == 0, |
69 assert(!access_flags.is_native() || byte_code_size == 0, |
68 "native methods should not contain byte codes"); |
70 "native methods should not contain byte codes"); |
69 ConstMethod* cm = ConstMethod::allocate(loader_data, |
71 ConstMethod* cm = ConstMethod::allocate(loader_data, |
70 byte_code_size, |
72 byte_code_size, |
71 compressed_line_number_size, |
73 compressed_line_number_size, |
72 localvariable_table_length, |
74 localvariable_table_length, |
73 exception_table_length, |
75 exception_table_length, |
74 checked_exceptions_length, |
76 checked_exceptions_length, |
75 CHECK_NULL); |
77 method_type, |
|
78 CHECK_NULL); |
76 |
79 |
77 int size = Method::size(access_flags.is_native()); |
80 int size = Method::size(access_flags.is_native()); |
78 |
81 |
79 return new (loader_data, size, false, THREAD) Method(cm, access_flags, size); |
82 return new (loader_data, size, false, THREAD) Method(cm, access_flags, size); |
80 } |
83 } |
1029 assert((flags_bits & JVM_ACC_PUBLIC) == 0, "do not expose these methods"); |
1032 assert((flags_bits & JVM_ACC_PUBLIC) == 0, "do not expose these methods"); |
1030 |
1033 |
1031 methodHandle m; |
1034 methodHandle m; |
1032 { |
1035 { |
1033 Method* m_oop = Method::allocate(loader_data, 0, accessFlags_from(flags_bits), |
1036 Method* m_oop = Method::allocate(loader_data, 0, accessFlags_from(flags_bits), |
1034 0, 0, 0, 0, CHECK_(empty)); |
1037 0, 0, 0, 0, ConstMethod::NORMAL, CHECK_(empty)); |
1035 m = methodHandle(THREAD, m_oop); |
1038 m = methodHandle(THREAD, m_oop); |
1036 } |
1039 } |
1037 m->set_constants(cp()); |
1040 m->set_constants(cp()); |
1038 m->set_name_index(_imcp_invoke_name); |
1041 m->set_name_index(_imcp_invoke_name); |
1039 m->set_signature_index(_imcp_invoke_signature); |
1042 m->set_signature_index(_imcp_invoke_signature); |
1081 AccessFlags flags = m->access_flags(); |
1084 AccessFlags flags = m->access_flags(); |
1082 int checked_exceptions_len = m->checked_exceptions_length(); |
1085 int checked_exceptions_len = m->checked_exceptions_length(); |
1083 int localvariable_len = m->localvariable_table_length(); |
1086 int localvariable_len = m->localvariable_table_length(); |
1084 int exception_table_len = m->exception_table_length(); |
1087 int exception_table_len = m->exception_table_length(); |
1085 |
1088 |
1086 ClassLoaderData* loader_data = m()->method_holder()->class_loader_data(); |
1089 ClassLoaderData* loader_data = m->method_holder()->class_loader_data(); |
1087 Method* newm_oop = Method::allocate(loader_data, |
1090 Method* newm_oop = Method::allocate(loader_data, |
1088 new_code_length, |
1091 new_code_length, |
1089 flags, |
1092 flags, |
1090 new_compressed_linenumber_size, |
1093 new_compressed_linenumber_size, |
1091 localvariable_len, |
1094 localvariable_len, |
1092 exception_table_len, |
1095 exception_table_len, |
1093 checked_exceptions_len, |
1096 checked_exceptions_len, |
1094 CHECK_(methodHandle())); |
1097 m->method_type(), |
|
1098 CHECK_(methodHandle())); |
1095 methodHandle newm (THREAD, newm_oop); |
1099 methodHandle newm (THREAD, newm_oop); |
1096 int new_method_size = newm->method_size(); |
1100 int new_method_size = newm->method_size(); |
1097 |
1101 |
1098 // Create a shallow copy of Method part, but be careful to preserve the new ConstMethod* |
1102 // Create a shallow copy of Method part, but be careful to preserve the new ConstMethod* |
1099 ConstMethod* newcm = newm->constMethod(); |
1103 ConstMethod* newcm = newm->constMethod(); |