< prev index next >

src/hotspot/share/oops/method.cpp

Print this page




 187   Symbol* klass_name = klass->name();
 188   klass_name->as_klass_external_name(buf, size);
 189   int len = (int)strlen(buf);
 190 
 191   if (len < size - 1) {
 192     buf[len++] = '.';
 193 
 194     method_name->as_C_string(&(buf[len]), size - len);
 195     len = (int)strlen(buf);
 196 
 197     signature->as_C_string(&(buf[len]), size - len);
 198   }
 199 
 200   return buf;
 201 }
 202 
 203 const char* Method::external_name() const {
 204   return external_name(constants()->pool_holder(), name(), signature());
 205 }
 206 




 207 void Method::print_external_name(outputStream *os) const {
 208   print_external_name(os, constants()->pool_holder(), name(), signature());
 209 }
 210 
 211 const char* Method::external_name(Klass* klass, Symbol* method_name, Symbol* signature) {
 212   stringStream ss;
 213   print_external_name(&ss, klass, method_name, signature);
 214   return ss.as_string();
 215 }
 216 
 217 void Method::print_external_name(outputStream *os, Klass* klass, Symbol* method_name, Symbol* signature) {




 218   signature->print_as_signature_external_return_type(os);
 219   os->print(" %s.%s(", klass->external_name(), method_name->as_C_string());
 220   signature->print_as_signature_external_parameters(os);
 221   os->print(")");

 222 }
 223 
 224 int Method::fast_exception_handler_bci_for(const methodHandle& mh, Klass* ex_klass, int throw_bci, TRAPS) {
 225   // exception table holds quadruple entries of the form (beg_bci, end_bci, handler_bci, klass_index)
 226   // access exception table
 227   ExceptionTable table(mh());
 228   int length = table.length();
 229   // iterate through all entries sequentially
 230   constantPoolHandle pool(THREAD, mh->constants());
 231   for (int i = 0; i < length; i ++) {
 232     //reacquire the table in case a GC happened
 233     ExceptionTable table(mh());
 234     int beg_bci = table.start_pc(i);
 235     int end_bci = table.end_pc(i);
 236     assert(beg_bci <= end_bci, "inconsistent exception table");
 237     if (beg_bci <= throw_bci && throw_bci < end_bci) {
 238       // exception handler bci range covers throw_bci => investigate further
 239       int handler_bci = table.handler_pc(i);
 240       int klass_index = table.catch_type_index(i);
 241       if (klass_index == 0) {




 187   Symbol* klass_name = klass->name();
 188   klass_name->as_klass_external_name(buf, size);
 189   int len = (int)strlen(buf);
 190 
 191   if (len < size - 1) {
 192     buf[len++] = '.';
 193 
 194     method_name->as_C_string(&(buf[len]), size - len);
 195     len = (int)strlen(buf);
 196 
 197     signature->as_C_string(&(buf[len]), size - len);
 198   }
 199 
 200   return buf;
 201 }
 202 
 203 const char* Method::external_name() const {
 204   return external_name(constants()->pool_holder(), name(), signature());
 205 }
 206 
 207 const char* Method::external_name_short() const {
 208   return external_name(constants()->pool_holder(), name(), NULL);
 209 }
 210 
 211 void Method::print_external_name(outputStream *os) const {
 212   print_external_name(os, constants()->pool_holder(), name(), signature());
 213 }
 214 
 215 const char* Method::external_name(Klass* klass, Symbol* method_name, Symbol* signature) {
 216   stringStream ss;
 217   print_external_name(&ss, klass, method_name, signature);
 218   return ss.as_string();
 219 }
 220 
 221 void Method::print_external_name(outputStream *os, Klass* klass, Symbol* method_name, Symbol* signature) {
 222   if (!signature) {
 223     os->print("%s::%s", klass->external_name(), method_name->as_C_string());
 224   }
 225   else {
 226     signature->print_as_signature_external_return_type(os);
 227     os->print(" %s.%s(", klass->external_name(), method_name->as_C_string());
 228     signature->print_as_signature_external_parameters(os);
 229     os->print(")");
 230   }
 231 }
 232 
 233 int Method::fast_exception_handler_bci_for(const methodHandle& mh, Klass* ex_klass, int throw_bci, TRAPS) {
 234   // exception table holds quadruple entries of the form (beg_bci, end_bci, handler_bci, klass_index)
 235   // access exception table
 236   ExceptionTable table(mh());
 237   int length = table.length();
 238   // iterate through all entries sequentially
 239   constantPoolHandle pool(THREAD, mh->constants());
 240   for (int i = 0; i < length; i ++) {
 241     //reacquire the table in case a GC happened
 242     ExceptionTable table(mh());
 243     int beg_bci = table.start_pc(i);
 244     int end_bci = table.end_pc(i);
 245     assert(beg_bci <= end_bci, "inconsistent exception table");
 246     if (beg_bci <= throw_bci && throw_bci < end_bci) {
 247       // exception handler bci range covers throw_bci => investigate further
 248       int handler_bci = table.handler_pc(i);
 249       int klass_index = table.catch_type_index(i);
 250       if (klass_index == 0) {


< prev index next >