src/hotspot/share/classfile/javaClasses.cpp
changeset 54847 59ea39bb2809
parent 54795 fd08f5a976e6
child 55159 a38132298eda
child 58678 9cf78a70fa4f
equal deleted inserted replaced
54846:e4049522b074 54847:59ea39bb2809
   567   assert(result_length >= length + 1, "must not be shorter");
   567   assert(result_length >= length + 1, "must not be shorter");
   568   assert(result_length == (int)strlen(result) + 1, "must match");
   568   assert(result_length == (int)strlen(result) + 1, "must match");
   569   return result;
   569   return result;
   570 }
   570 }
   571 
   571 
   572 Symbol* java_lang_String::as_symbol(oop java_string, TRAPS) {
   572 Symbol* java_lang_String::as_symbol(oop java_string) {
   573   typeArrayOop value  = java_lang_String::value(java_string);
   573   typeArrayOop value  = java_lang_String::value(java_string);
   574   int          length = java_lang_String::length(java_string, value);
   574   int          length = java_lang_String::length(java_string, value);
   575   bool      is_latin1 = java_lang_String::is_latin1(java_string);
   575   bool      is_latin1 = java_lang_String::is_latin1(java_string);
   576   if (!is_latin1) {
   576   if (!is_latin1) {
   577     jchar* base = (length == 0) ? NULL : value->char_at_addr(0);
   577     jchar* base = (length == 0) ? NULL : value->char_at_addr(0);
   578     Symbol* sym = SymbolTable::lookup_unicode(base, length, THREAD);
   578     Symbol* sym = SymbolTable::new_symbol(base, length);
   579     return sym;
   579     return sym;
   580   } else {
   580   } else {
   581     ResourceMark rm;
   581     ResourceMark rm;
   582     jbyte* position = (length == 0) ? NULL : value->byte_at_addr(0);
   582     jbyte* position = (length == 0) ? NULL : value->byte_at_addr(0);
   583     const char* base = UNICODE::as_utf8(position, length);
   583     const char* base = UNICODE::as_utf8(position, length);
   584     Symbol* sym = SymbolTable::lookup(base, length, THREAD);
   584     Symbol* sym = SymbolTable::new_symbol(base, length);
   585     return sym;
   585     return sym;
   586   }
   586   }
   587 }
   587 }
   588 
   588 
   589 Symbol* java_lang_String::as_symbol_or_null(oop java_string) {
   589 Symbol* java_lang_String::as_symbol_or_null(oop java_string) {
  1441   if (is_instance)  st->print("L");
  1441   if (is_instance)  st->print("L");
  1442   st->write((char*) name->base(), (int) name->utf8_length());
  1442   st->write((char*) name->base(), (int) name->utf8_length());
  1443   if (is_instance)  st->print(";");
  1443   if (is_instance)  st->print(";");
  1444 }
  1444 }
  1445 
  1445 
  1446 Symbol* java_lang_Class::as_signature(oop java_class, bool intern_if_not_found, TRAPS) {
  1446 Symbol* java_lang_Class::as_signature(oop java_class, bool intern_if_not_found) {
  1447   assert(java_lang_Class::is_instance(java_class), "must be a Class object");
  1447   assert(java_lang_Class::is_instance(java_class), "must be a Class object");
  1448   Symbol* name;
  1448   Symbol* name;
  1449   if (is_primitive(java_class)) {
  1449   if (is_primitive(java_class)) {
  1450     name = vmSymbols::type_signature(primitive_type(java_class));
  1450     name = vmSymbols::type_signature(primitive_type(java_class));
  1451     // Because this can create a new symbol, the caller has to decrement
  1451     // Because this can create a new symbol, the caller has to decrement
  1462       const char* sigstr = k->signature_name();
  1462       const char* sigstr = k->signature_name();
  1463       int         siglen = (int) strlen(sigstr);
  1463       int         siglen = (int) strlen(sigstr);
  1464       if (!intern_if_not_found) {
  1464       if (!intern_if_not_found) {
  1465         name = SymbolTable::probe(sigstr, siglen);
  1465         name = SymbolTable::probe(sigstr, siglen);
  1466       } else {
  1466       } else {
  1467         name = SymbolTable::new_symbol(sigstr, siglen, THREAD);
  1467         name = SymbolTable::new_symbol(sigstr, siglen);
  1468       }
  1468       }
  1469     }
  1469     }
  1470   }
  1470   }
  1471   return name;
  1471   return name;
  1472 }
  1472 }
  1893 // Return Symbol for detailed_message or NULL
  1893 // Return Symbol for detailed_message or NULL
  1894 Symbol* java_lang_Throwable::detail_message(oop throwable) {
  1894 Symbol* java_lang_Throwable::detail_message(oop throwable) {
  1895   PRESERVE_EXCEPTION_MARK;  // Keep original exception
  1895   PRESERVE_EXCEPTION_MARK;  // Keep original exception
  1896   oop detailed_message = java_lang_Throwable::message(throwable);
  1896   oop detailed_message = java_lang_Throwable::message(throwable);
  1897   if (detailed_message != NULL) {
  1897   if (detailed_message != NULL) {
  1898     return java_lang_String::as_symbol(detailed_message, THREAD);
  1898     return java_lang_String::as_symbol(detailed_message);
  1899   }
  1899   }
  1900   return NULL;
  1900   return NULL;
  1901 }
  1901 }
  1902 
  1902 
  1903 void java_lang_Throwable::set_message(oop throwable, oop value) {
  1903 void java_lang_Throwable::set_message(oop throwable, oop value) {
  3701   }
  3701   }
  3702   st->print(")");
  3702   st->print(")");
  3703   java_lang_Class::print_signature(rtype(mt), st);
  3703   java_lang_Class::print_signature(rtype(mt), st);
  3704 }
  3704 }
  3705 
  3705 
  3706 Symbol* java_lang_invoke_MethodType::as_signature(oop mt, bool intern_if_not_found, TRAPS) {
  3706 Symbol* java_lang_invoke_MethodType::as_signature(oop mt, bool intern_if_not_found) {
  3707   ResourceMark rm;
  3707   ResourceMark rm;
  3708   stringStream buffer(128);
  3708   stringStream buffer(128);
  3709   print_signature(mt, &buffer);
  3709   print_signature(mt, &buffer);
  3710   const char* sigstr =       buffer.base();
  3710   const char* sigstr =       buffer.base();
  3711   int         siglen = (int) buffer.size();
  3711   int         siglen = (int) buffer.size();
  3712   Symbol *name;
  3712   Symbol *name;
  3713   if (!intern_if_not_found) {
  3713   if (!intern_if_not_found) {
  3714     name = SymbolTable::probe(sigstr, siglen);
  3714     name = SymbolTable::probe(sigstr, siglen);
  3715   } else {
  3715   } else {
  3716     name = SymbolTable::new_symbol(sigstr, siglen, THREAD);
  3716     name = SymbolTable::new_symbol(sigstr, siglen);
  3717   }
  3717   }
  3718   return name;
  3718   return name;
  3719 }
  3719 }
  3720 
  3720 
  3721 bool java_lang_invoke_MethodType::equals(oop mt1, oop mt2) {
  3721 bool java_lang_invoke_MethodType::equals(oop mt1, oop mt2) {
  4373 // against changes in the class files
  4373 // against changes in the class files
  4374 
  4374 
  4375 bool JavaClasses::check_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) {
  4375 bool JavaClasses::check_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) {
  4376   EXCEPTION_MARK;
  4376   EXCEPTION_MARK;
  4377   fieldDescriptor fd;
  4377   fieldDescriptor fd;
  4378   TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH);
  4378   TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name);
  4379   Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH);
  4379   Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH);
  4380   InstanceKlass* ik = InstanceKlass::cast(k);
  4380   InstanceKlass* ik = InstanceKlass::cast(k);
  4381   TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH);
  4381   TempNewSymbol f_name = SymbolTable::new_symbol(field_name);
  4382   TempNewSymbol f_sig  = SymbolTable::new_symbol(field_sig, CATCH);
  4382   TempNewSymbol f_sig  = SymbolTable::new_symbol(field_sig);
  4383   if (!ik->find_local_field(f_name, f_sig, &fd)) {
  4383   if (!ik->find_local_field(f_name, f_sig, &fd)) {
  4384     tty->print_cr("Nonstatic field %s.%s not found", klass_name, field_name);
  4384     tty->print_cr("Nonstatic field %s.%s not found", klass_name, field_name);
  4385     return false;
  4385     return false;
  4386   }
  4386   }
  4387   if (fd.is_static()) {
  4387   if (fd.is_static()) {