src/share/vm/oops/method.cpp

changeset 4245
4735d2c84362
parent 4164
d804e148cff8
child 4246
ec204374e626
equal deleted inserted replaced
4232:a1b8cf9cf970 4245:4735d2c84362
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();

mercurial