48 }
49
50 // Accessors
51 typeArrayOop java_lang_String::value(oop java_string) {
52 assert(initialized && (value_offset > 0), "Must be initialized");
53 assert(is_instance(java_string), "must be java_string");
54 return (typeArrayOop) java_string->obj_field(value_offset);
55 }
56 unsigned int java_lang_String::hash(oop java_string) {
57 assert(initialized && (hash_offset > 0), "Must be initialized");
58 assert(is_instance(java_string), "must be java_string");
59 return java_string->int_field(hash_offset);
60 }
61 bool java_lang_String::is_latin1(oop java_string) {
62 assert(initialized && (coder_offset > 0), "Must be initialized");
63 assert(is_instance(java_string), "must be java_string");
64 jbyte coder = java_string->byte_field(coder_offset);
65 assert(CompactStrings || coder == CODER_UTF16, "Must be UTF16 without CompactStrings");
66 return coder == CODER_LATIN1;
67 }
68 int java_lang_String::length(oop java_string) {
69 assert(initialized, "Must be initialized");
70 assert(is_instance(java_string), "must be java_string");
71 typeArrayOop value_array = ((typeArrayOop)java_string->obj_field(value_offset));
72 if (value_array == NULL) {
73 return 0;
74 }
75 int arr_length = value_array->length();
76 if (!is_latin1(java_string)) {
77 assert((arr_length & 1) == 0, "should be even for UTF16 string");
78 arr_length >>= 1; // convert number of bytes to number of elements
79 }
80 return arr_length;
81 }
82
83 bool java_lang_String::is_instance_inlined(oop obj) {
84 return obj != NULL && obj->klass() == SystemDictionary::String_klass();
85 }
86
87 // Accessors
88 oop java_lang_ref_Reference::referent(oop ref) {
89 return ref->obj_field(referent_offset);
90 }
91 void java_lang_ref_Reference::set_referent(oop ref, oop value) {
92 ref->obj_field_put(referent_offset, value);
93 }
94 void java_lang_ref_Reference::set_referent_raw(oop ref, oop value) {
95 ref->obj_field_put_raw(referent_offset, value);
96 }
97 HeapWord* java_lang_ref_Reference::referent_addr(oop ref) {
98 return ref->obj_field_addr<HeapWord>(referent_offset);
99 }
100 oop java_lang_ref_Reference::next(oop ref) {
|
48 }
49
50 // Accessors
51 typeArrayOop java_lang_String::value(oop java_string) {
52 assert(initialized && (value_offset > 0), "Must be initialized");
53 assert(is_instance(java_string), "must be java_string");
54 return (typeArrayOop) java_string->obj_field(value_offset);
55 }
56 unsigned int java_lang_String::hash(oop java_string) {
57 assert(initialized && (hash_offset > 0), "Must be initialized");
58 assert(is_instance(java_string), "must be java_string");
59 return java_string->int_field(hash_offset);
60 }
61 bool java_lang_String::is_latin1(oop java_string) {
62 assert(initialized && (coder_offset > 0), "Must be initialized");
63 assert(is_instance(java_string), "must be java_string");
64 jbyte coder = java_string->byte_field(coder_offset);
65 assert(CompactStrings || coder == CODER_UTF16, "Must be UTF16 without CompactStrings");
66 return coder == CODER_LATIN1;
67 }
68
69 int java_lang_String::length(oop java_string, typeArrayOop value_array) {
70 assert(initialized, "Must be initialized");
71 assert(is_instance(java_string), "must be java_string");
72 if (value_array == NULL) {
73 return 0;
74 }
75 int arr_length = value_array->length();
76 if (!is_latin1(java_string)) {
77 assert((arr_length & 1) == 0, "should be even for UTF16 string");
78 arr_length >>= 1; // convert number of bytes to number of elements
79 }
80 return arr_length;
81 }
82 int java_lang_String::length(oop java_string) {
83 typeArrayOop value_array = (typeArrayOop)java_string->obj_field(value_offset);
84 return length(java_string, value_array);
85 }
86
87 bool java_lang_String::is_instance_inlined(oop obj) {
88 return obj != NULL && obj->klass() == SystemDictionary::String_klass();
89 }
90
91 // Accessors
92 oop java_lang_ref_Reference::referent(oop ref) {
93 return ref->obj_field(referent_offset);
94 }
95 void java_lang_ref_Reference::set_referent(oop ref, oop value) {
96 ref->obj_field_put(referent_offset, value);
97 }
98 void java_lang_ref_Reference::set_referent_raw(oop ref, oop value) {
99 ref->obj_field_put_raw(referent_offset, value);
100 }
101 HeapWord* java_lang_ref_Reference::referent_addr(oop ref) {
102 return ref->obj_field_addr<HeapWord>(referent_offset);
103 }
104 oop java_lang_ref_Reference::next(oop ref) {
|