< prev index next >

src/share/vm/classfile/javaClasses.cpp

Print this page
rev 12906 : [mq]: gc_interface

@@ -42,11 +42,12 @@
 #include "oops/klass.hpp"
 #include "oops/method.hpp"
 #include "oops/objArrayOop.inline.hpp"
 #include "oops/oop.inline.hpp"
 #include "oops/symbol.hpp"
-#include "oops/typeArrayOop.hpp"
+#include "oops/typeArrayOop.inline.hpp"
+#include "runtime/access.inline.hpp"
 #include "runtime/fieldDescriptor.hpp"
 #include "runtime/handles.inline.hpp"
 #include "runtime/interfaceSupport.hpp"
 #include "runtime/java.hpp"
 #include "runtime/javaCalls.hpp"

@@ -612,15 +613,13 @@
     jbyte* position = value->byte_at_addr(start);
     return UNICODE::as_utf8(position, len, buf, buflen);
   }
 }
 
-bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
+bool java_lang_String::equals(typeArrayOop value, int length, oop java_string, jchar* chars, int len) {
   assert(java_string->klass() == SystemDictionary::String_klass(),
          "must be java_string");
-  typeArrayOop value  = java_lang_String::value(java_string);
-  int          length = java_lang_String::length(java_string);
   if (length != len) {
     return false;
   }
   bool      is_latin1 = java_lang_String::is_latin1(java_string);
   if (!is_latin1) {

@@ -637,29 +636,34 @@
     }
   }
   return true;
 }
 
+bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
+  typeArrayOop value  = java_lang_String::value(java_string);
+  int length = java_lang_String::length(java_string);
+  return java_lang_String::equals(value, length, java_string, chars, len);
+}
+
 bool java_lang_String::equals(oop str1, oop str2) {
   assert(str1->klass() == SystemDictionary::String_klass(),
          "must be java String");
   assert(str2->klass() == SystemDictionary::String_klass(),
          "must be java String");
   typeArrayOop value1  = java_lang_String::value(str1);
-  int          length1 = java_lang_String::length(str1);
+  int          length1 = value1->length();
   bool       is_latin1 = java_lang_String::is_latin1(str1);
   typeArrayOop value2  = java_lang_String::value(str2);
-  int          length2 = java_lang_String::length(str2);
+  int          length2 = value2->length();
   bool       is_latin2 = java_lang_String::is_latin1(str2);
 
   if ((length1 != length2) || (is_latin1 != is_latin2)) {
     // Strings of different size or with different
     // coders are never equal.
     return false;
   }
-  int blength1 = value1->length();
-  for (int i = 0; i < value1->length(); i++) {
+  for (int i = 0; i < length1; i++) {
     if (value1->byte_at(i) != value2->byte_at(i)) {
       return false;
     }
   }
   return true;
< prev index next >