109 }
110 int arr_length = value->length();
111 if (!is_latin1(java_string)) {
112 assert((arr_length & 1) == 0, "should be even for UTF16 string");
113 arr_length >>= 1; // convert number of bytes to number of elements
114 }
115 return arr_length;
116 }
117
118 int java_lang_String::length(oop java_string) {
119 assert(_initialized, "Must be initialized");
120 assert(is_instance(java_string), "must be java_string");
121 typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
122 return length(java_string, value);
123 }
124
125 bool java_lang_String::is_instance(oop obj) {
126 return obj != nullptr && obj->klass() == vmClasses::String_klass();
127 }
128
129 // Accessors
130
131 oop java_lang_ref_Reference::weak_referent_no_keepalive(oop ref) {
132 assert(java_lang_ref_Reference::is_weak(ref) || java_lang_ref_Reference::is_soft(ref), "must be Weak or Soft Reference");
133 return ref->obj_field_access<ON_WEAK_OOP_REF | AS_NO_KEEPALIVE>(_referent_offset);
134 }
135
136 oop java_lang_ref_Reference::weak_referent(oop ref) {
137 assert(java_lang_ref_Reference::is_weak(ref) || java_lang_ref_Reference::is_soft(ref), "must be Weak or Soft Reference");
138 return ref->obj_field_access<ON_WEAK_OOP_REF>(_referent_offset);
139 }
140
141 oop java_lang_ref_Reference::phantom_referent_no_keepalive(oop ref) {
142 assert(java_lang_ref_Reference::is_phantom(ref), "must be Phantom Reference");
143 return ref->obj_field_access<ON_PHANTOM_OOP_REF | AS_NO_KEEPALIVE>(_referent_offset);
144 }
145
146 oop java_lang_ref_Reference::unknown_referent_no_keepalive(oop ref) {
147 return ref->obj_field_access<ON_UNKNOWN_OOP_REF | AS_NO_KEEPALIVE>(_referent_offset);
148 }
|
109 }
110 int arr_length = value->length();
111 if (!is_latin1(java_string)) {
112 assert((arr_length & 1) == 0, "should be even for UTF16 string");
113 arr_length >>= 1; // convert number of bytes to number of elements
114 }
115 return arr_length;
116 }
117
118 int java_lang_String::length(oop java_string) {
119 assert(_initialized, "Must be initialized");
120 assert(is_instance(java_string), "must be java_string");
121 typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
122 return length(java_string, value);
123 }
124
125 bool java_lang_String::is_instance(oop obj) {
126 return obj != nullptr && obj->klass() == vmClasses::String_klass();
127 }
128
129 // We need to be able to check if this is a string even when we are in an
130 // erroneous state where the klass is corrupted/can't be read safely.
131 // This happens when printing an oop during GC error reporting.
132 bool java_lang_String::is_instance_without_asserts(oop obj) {
133 return obj != nullptr && obj->klass_without_asserts() == vmClasses::String_klass();
134 }
135
136 // Accessors
137
138 oop java_lang_ref_Reference::weak_referent_no_keepalive(oop ref) {
139 assert(java_lang_ref_Reference::is_weak(ref) || java_lang_ref_Reference::is_soft(ref), "must be Weak or Soft Reference");
140 return ref->obj_field_access<ON_WEAK_OOP_REF | AS_NO_KEEPALIVE>(_referent_offset);
141 }
142
143 oop java_lang_ref_Reference::weak_referent(oop ref) {
144 assert(java_lang_ref_Reference::is_weak(ref) || java_lang_ref_Reference::is_soft(ref), "must be Weak or Soft Reference");
145 return ref->obj_field_access<ON_WEAK_OOP_REF>(_referent_offset);
146 }
147
148 oop java_lang_ref_Reference::phantom_referent_no_keepalive(oop ref) {
149 assert(java_lang_ref_Reference::is_phantom(ref), "must be Phantom Reference");
150 return ref->obj_field_access<ON_PHANTOM_OOP_REF | AS_NO_KEEPALIVE>(_referent_offset);
151 }
152
153 oop java_lang_ref_Reference::unknown_referent_no_keepalive(oop ref) {
154 return ref->obj_field_access<ON_UNKNOWN_OOP_REF | AS_NO_KEEPALIVE>(_referent_offset);
155 }
|