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()) { |