src/share/vm/oops/method.cpp

Print this page




1146                                       m->method_type(),
1147                                       CHECK_(methodHandle()));
1148   methodHandle newm (THREAD, newm_oop);
1149   int new_method_size = newm->method_size();
1150 
1151   // Create a shallow copy of Method part, but be careful to preserve the new ConstMethod*
1152   ConstMethod* newcm = newm->constMethod();
1153   int new_const_method_size = newm->constMethod()->size();
1154 
1155   memcpy(newm(), m(), sizeof(Method));
1156 
1157   // Create shallow copy of ConstMethod.
1158   memcpy(newcm, m->constMethod(), sizeof(ConstMethod));
1159 
1160   // Reset correct method/const method, method size, and parameter info
1161   newm->set_constMethod(newcm);
1162   newm->constMethod()->set_code_size(new_code_length);
1163   newm->constMethod()->set_constMethod_size(new_const_method_size);
1164   newm->set_method_size(new_method_size);
1165   assert(newm->code_size() == new_code_length, "check");

1166   assert(newm->checked_exceptions_length() == checked_exceptions_len, "check");
1167   assert(newm->exception_table_length() == exception_table_len, "check");
1168   assert(newm->localvariable_table_length() == localvariable_len, "check");
1169   // Copy new byte codes
1170   memcpy(newm->code_base(), new_code, new_code_length);
1171   // Copy line number table
1172   if (new_compressed_linenumber_size > 0) {
1173     memcpy(newm->compressed_linenumber_table(),
1174            new_compressed_linenumber_table,
1175            new_compressed_linenumber_size);






1176   }
1177   // Copy checked_exceptions
1178   if (checked_exceptions_len > 0) {
1179     memcpy(newm->checked_exceptions_start(),
1180            m->checked_exceptions_start(),
1181            checked_exceptions_len * sizeof(CheckedExceptionElement));
1182   }
1183   // Copy exception table
1184   if (exception_table_len > 0) {
1185     memcpy(newm->exception_table_start(),
1186            m->exception_table_start(),
1187            exception_table_len * sizeof(ExceptionTableElement));
1188   }
1189   // Copy local variable number table
1190   if (localvariable_len > 0) {
1191     memcpy(newm->localvariable_table_start(),
1192            m->localvariable_table_start(),
1193            localvariable_len * sizeof(LocalVariableTableElement));
1194   }
1195   // Copy stackmap table




1146                                       m->method_type(),
1147                                       CHECK_(methodHandle()));
1148   methodHandle newm (THREAD, newm_oop);
1149   int new_method_size = newm->method_size();
1150 
1151   // Create a shallow copy of Method part, but be careful to preserve the new ConstMethod*
1152   ConstMethod* newcm = newm->constMethod();
1153   int new_const_method_size = newm->constMethod()->size();
1154 
1155   memcpy(newm(), m(), sizeof(Method));
1156 
1157   // Create shallow copy of ConstMethod.
1158   memcpy(newcm, m->constMethod(), sizeof(ConstMethod));
1159 
1160   // Reset correct method/const method, method size, and parameter info
1161   newm->set_constMethod(newcm);
1162   newm->constMethod()->set_code_size(new_code_length);
1163   newm->constMethod()->set_constMethod_size(new_const_method_size);
1164   newm->set_method_size(new_method_size);
1165   assert(newm->code_size() == new_code_length, "check");
1166   assert(newm->method_parameters_length() == method_parameters_len, "check");
1167   assert(newm->checked_exceptions_length() == checked_exceptions_len, "check");
1168   assert(newm->exception_table_length() == exception_table_len, "check");
1169   assert(newm->localvariable_table_length() == localvariable_len, "check");
1170   // Copy new byte codes
1171   memcpy(newm->code_base(), new_code, new_code_length);
1172   // Copy line number table
1173   if (new_compressed_linenumber_size > 0) {
1174     memcpy(newm->compressed_linenumber_table(),
1175            new_compressed_linenumber_table,
1176            new_compressed_linenumber_size);
1177   }
1178   // Copy method_parameters
1179   if (method_parameters_len > 0) {
1180     memcpy(newm->method_parameters_start(),
1181            m->method_parameters_start(),
1182            method_parameters_len * sizeof(MethodParametersElement));
1183   }
1184   // Copy checked_exceptions
1185   if (checked_exceptions_len > 0) {
1186     memcpy(newm->checked_exceptions_start(),
1187            m->checked_exceptions_start(),
1188            checked_exceptions_len * sizeof(CheckedExceptionElement));
1189   }
1190   // Copy exception table
1191   if (exception_table_len > 0) {
1192     memcpy(newm->exception_table_start(),
1193            m->exception_table_start(),
1194            exception_table_len * sizeof(ExceptionTableElement));
1195   }
1196   // Copy local variable number table
1197   if (localvariable_len > 0) {
1198     memcpy(newm->localvariable_table_start(),
1199            m->localvariable_table_start(),
1200            localvariable_len * sizeof(LocalVariableTableElement));
1201   }
1202   // Copy stackmap table