src/hotspot/share/classfile/javaClasses.cpp
changeset 54102 fab8496eb541
parent 54044 d9853137aa28
child 54347 235883996bc7
child 57271 1735d39dbff9
equal deleted inserted replaced
54101:195309a6c7d5 54102:fab8496eb541
   576     return SymbolTable::probe(base, length);
   576     return SymbolTable::probe(base, length);
   577   }
   577   }
   578 }
   578 }
   579 
   579 
   580 int java_lang_String::utf8_length(oop java_string, typeArrayOop value) {
   580 int java_lang_String::utf8_length(oop java_string, typeArrayOop value) {
   581   assert(oopDesc::equals(value, java_lang_String::value(java_string)),
   581   assert(value_equals(value, java_lang_String::value(java_string)),
   582          "value must be same as java_lang_String::value(java_string)");
   582          "value must be same as java_lang_String::value(java_string)");
   583   int length = java_lang_String::length(java_string, value);
   583   int length = java_lang_String::length(java_string, value);
   584   if (length == 0) {
   584   if (length == 0) {
   585     return 0;
   585     return 0;
   586   }
   586   }
   608     return UNICODE::as_utf8(position, length);
   608     return UNICODE::as_utf8(position, length);
   609   }
   609   }
   610 }
   610 }
   611 
   611 
   612 char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, char* buf, int buflen) {
   612 char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, char* buf, int buflen) {
   613   assert(oopDesc::equals(value, java_lang_String::value(java_string)),
   613   assert(value_equals(value, java_lang_String::value(java_string)),
   614          "value must be same as java_lang_String::value(java_string)");
   614          "value must be same as java_lang_String::value(java_string)");
   615   int     length = java_lang_String::length(java_string, value);
   615   int     length = java_lang_String::length(java_string, value);
   616   bool is_latin1 = java_lang_String::is_latin1(java_string);
   616   bool is_latin1 = java_lang_String::is_latin1(java_string);
   617   if (!is_latin1) {
   617   if (!is_latin1) {
   618     jchar* position = (length == 0) ? NULL : value->char_at_addr(0);
   618     jchar* position = (length == 0) ? NULL : value->char_at_addr(0);
   640     return UNICODE::as_utf8(position, len);
   640     return UNICODE::as_utf8(position, len);
   641   }
   641   }
   642 }
   642 }
   643 
   643 
   644 char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, int start, int len, char* buf, int buflen) {
   644 char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, int start, int len, char* buf, int buflen) {
   645   assert(oopDesc::equals(value, java_lang_String::value(java_string)),
   645   assert(value_equals(value, java_lang_String::value(java_string)),
   646          "value must be same as java_lang_String::value(java_string)");
   646          "value must be same as java_lang_String::value(java_string)");
   647   assert(start + len <= java_lang_String::length(java_string), "just checking");
   647   assert(start + len <= java_lang_String::length(java_string), "just checking");
   648   bool is_latin1 = java_lang_String::is_latin1(java_string);
   648   bool is_latin1 = java_lang_String::is_latin1(java_string);
   649   if (!is_latin1) {
   649   if (!is_latin1) {
   650     jchar* position = value->char_at_addr(start);
   650     jchar* position = value->char_at_addr(start);
   684   assert(str1->klass() == SystemDictionary::String_klass(),
   684   assert(str1->klass() == SystemDictionary::String_klass(),
   685          "must be java String");
   685          "must be java String");
   686   assert(str2->klass() == SystemDictionary::String_klass(),
   686   assert(str2->klass() == SystemDictionary::String_klass(),
   687          "must be java String");
   687          "must be java String");
   688   typeArrayOop value1    = java_lang_String::value_no_keepalive(str1);
   688   typeArrayOop value1    = java_lang_String::value_no_keepalive(str1);
   689   int          length1   = java_lang_String::length(str1, value1);
       
   690   bool         is_latin1 = java_lang_String::is_latin1(str1);
   689   bool         is_latin1 = java_lang_String::is_latin1(str1);
   691   typeArrayOop value2    = java_lang_String::value_no_keepalive(str2);
   690   typeArrayOop value2    = java_lang_String::value_no_keepalive(str2);
   692   int          length2   = java_lang_String::length(str2, value2);
       
   693   bool         is_latin2 = java_lang_String::is_latin1(str2);
   691   bool         is_latin2 = java_lang_String::is_latin1(str2);
   694 
   692 
   695   if ((length1 != length2) || (is_latin1 != is_latin2)) {
   693   if (is_latin1 != is_latin2) {
   696     // Strings of different size or with different
   694     // Strings with different coders are never equal.
   697     // coders are never equal.
       
   698     return false;
   695     return false;
   699   }
   696   }
   700   int blength1 = value1->length();
   697   return value_equals(value1, value2);
   701   for (int i = 0; i < blength1; i++) {
       
   702     if (value1->byte_at(i) != value2->byte_at(i)) {
       
   703       return false;
       
   704     }
       
   705   }
       
   706   return true;
       
   707 }
   698 }
   708 
   699 
   709 void java_lang_String::print(oop java_string, outputStream* st) {
   700 void java_lang_String::print(oop java_string, outputStream* st) {
   710   assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string");
   701   assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string");
   711   typeArrayOop value  = java_lang_String::value_no_keepalive(java_string);
   702   typeArrayOop value  = java_lang_String::value_no_keepalive(java_string);