src/share/vm/classfile/javaClasses.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 8039525 Sdiff src/share/vm/classfile

src/share/vm/classfile/javaClasses.cpp

Print this page




 358 }
 359 
 360 unsigned int java_lang_String::hash_string(oop java_string) {
 361   int          length = java_lang_String::length(java_string);
 362   // Zero length string doesn't hash necessarily hash to zero.
 363   if (length == 0) {
 364     return StringTable::hash_string(NULL, 0);
 365   }
 366 
 367   typeArrayOop value  = java_lang_String::value(java_string);
 368   int          offset = java_lang_String::offset(java_string);
 369   return StringTable::hash_string(value->char_at_addr(offset), length);
 370 }
 371 
 372 Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) {
 373   oop          obj    = java_string();
 374   typeArrayOop value  = java_lang_String::value(obj);
 375   int          offset = java_lang_String::offset(obj);
 376   int          length = java_lang_String::length(obj);
 377   jchar* base = (length == 0) ? NULL : value->char_at_addr(offset);
 378   Symbol* sym = SymbolTable::lookup_unicode(base, length, THREAD);
 379   return sym;
 380 }
 381 
 382 Symbol* java_lang_String::as_symbol_or_null(oop java_string) {
 383   typeArrayOop value  = java_lang_String::value(java_string);
 384   int          offset = java_lang_String::offset(java_string);
 385   int          length = java_lang_String::length(java_string);
 386   jchar* base = (length == 0) ? NULL : value->char_at_addr(offset);
 387   return SymbolTable::probe_unicode(base, length);
 388 }
 389 
 390 
 391 int java_lang_String::utf8_length(oop java_string) {
 392   typeArrayOop value  = java_lang_String::value(java_string);
 393   int          offset = java_lang_String::offset(java_string);
 394   int          length = java_lang_String::length(java_string);
 395   jchar* position = (length == 0) ? NULL : value->char_at_addr(offset);
 396   return UNICODE::utf8_length(position, length);
 397 }
 398 
 399 char* java_lang_String::as_utf8_string(oop java_string) {
 400   typeArrayOop value  = java_lang_String::value(java_string);
 401   int          offset = java_lang_String::offset(java_string);
 402   int          length = java_lang_String::length(java_string);
 403   jchar* position = (length == 0) ? NULL : value->char_at_addr(offset);
 404   return UNICODE::as_utf8(position, length);
 405 }
 406 
 407 char* java_lang_String::as_utf8_string(oop java_string, char* buf, int buflen) {


 737 
 738 Symbol* java_lang_Class::as_signature(oop java_class, bool intern_if_not_found, TRAPS) {
 739   assert(java_lang_Class::is_instance(java_class), "must be a Class object");
 740   Symbol* name;
 741   if (is_primitive(java_class)) {
 742     name = vmSymbols::type_signature(primitive_type(java_class));
 743     // Because this can create a new symbol, the caller has to decrement
 744     // the refcount, so make adjustment here and below for symbols returned
 745     // that are not created or incremented due to a successful lookup.
 746     name->increment_refcount();
 747   } else {
 748     Klass* k = as_Klass(java_class);
 749     if (!k->oop_is_instance()) {
 750       name = k->name();
 751       name->increment_refcount();
 752     } else {
 753       ResourceMark rm;
 754       const char* sigstr = k->signature_name();
 755       int         siglen = (int) strlen(sigstr);
 756       if (!intern_if_not_found) {
 757         name = SymbolTable::probe(sigstr, siglen);
 758       } else {
 759         name = SymbolTable::new_symbol(sigstr, siglen, THREAD);
 760       }
 761     }
 762   }
 763   return name;
 764 }
 765 
 766 
 767 Klass* java_lang_Class::array_klass(oop java_class) {
 768   Klass* k = ((Klass*)java_class->metadata_field(_array_klass_offset));
 769   assert(k == NULL || k->is_klass() && k->oop_is_array(), "should be array klass");
 770   return k;
 771 }
 772 
 773 
 774 void java_lang_Class::set_array_klass(oop java_class, Klass* klass) {
 775   assert(klass->is_klass() && klass->oop_is_array(), "should be array klass");
 776   java_class->metadata_field_put(_array_klass_offset, klass);
 777 }


2818 }
2819 
2820 void java_lang_invoke_MethodType::print_signature(oop mt, outputStream* st) {
2821   st->print("(");
2822   objArrayOop pts = ptypes(mt);
2823   for (int i = 0, limit = pts->length(); i < limit; i++) {
2824     java_lang_Class::print_signature(pts->obj_at(i), st);
2825   }
2826   st->print(")");
2827   java_lang_Class::print_signature(rtype(mt), st);
2828 }
2829 
2830 Symbol* java_lang_invoke_MethodType::as_signature(oop mt, bool intern_if_not_found, TRAPS) {
2831   ResourceMark rm;
2832   stringStream buffer(128);
2833   print_signature(mt, &buffer);
2834   const char* sigstr =       buffer.base();
2835   int         siglen = (int) buffer.size();
2836   Symbol *name;
2837   if (!intern_if_not_found) {
2838     name = SymbolTable::probe(sigstr, siglen);
2839   } else {
2840     name = SymbolTable::new_symbol(sigstr, siglen, THREAD);
2841   }
2842   return name;
2843 }
2844 
2845 bool java_lang_invoke_MethodType::equals(oop mt1, oop mt2) {
2846   if (mt1 == mt2)
2847     return true;
2848   if (rtype(mt1) != rtype(mt2))
2849     return false;
2850   if (ptype_count(mt1) != ptype_count(mt2))
2851     return false;
2852   for (int i = ptype_count(mt1) - 1; i >= 0; i--) {
2853     if (ptype(mt1, i) != ptype(mt2, i))
2854       return false;
2855   }
2856   return true;
2857 }
2858 




 358 }
 359 
 360 unsigned int java_lang_String::hash_string(oop java_string) {
 361   int          length = java_lang_String::length(java_string);
 362   // Zero length string doesn't hash necessarily hash to zero.
 363   if (length == 0) {
 364     return StringTable::hash_string(NULL, 0);
 365   }
 366 
 367   typeArrayOop value  = java_lang_String::value(java_string);
 368   int          offset = java_lang_String::offset(java_string);
 369   return StringTable::hash_string(value->char_at_addr(offset), length);
 370 }
 371 
 372 Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) {
 373   oop          obj    = java_string();
 374   typeArrayOop value  = java_lang_String::value(obj);
 375   int          offset = java_lang_String::offset(obj);
 376   int          length = java_lang_String::length(obj);
 377   jchar* base = (length == 0) ? NULL : value->char_at_addr(offset);
 378   Symbol* sym = SymbolTable::lookup_and_add_unicode(base, length, THREAD);
 379   return sym;
 380 }
 381 
 382 Symbol* java_lang_String::as_symbol_or_null(oop java_string) {
 383   typeArrayOop value  = java_lang_String::value(java_string);
 384   int          offset = java_lang_String::offset(java_string);
 385   int          length = java_lang_String::length(java_string);
 386   jchar* base = (length == 0) ? NULL : value->char_at_addr(offset);
 387   return SymbolTable::lookup_and_ignore_hash_unicode(base, length);
 388 }
 389 
 390 
 391 int java_lang_String::utf8_length(oop java_string) {
 392   typeArrayOop value  = java_lang_String::value(java_string);
 393   int          offset = java_lang_String::offset(java_string);
 394   int          length = java_lang_String::length(java_string);
 395   jchar* position = (length == 0) ? NULL : value->char_at_addr(offset);
 396   return UNICODE::utf8_length(position, length);
 397 }
 398 
 399 char* java_lang_String::as_utf8_string(oop java_string) {
 400   typeArrayOop value  = java_lang_String::value(java_string);
 401   int          offset = java_lang_String::offset(java_string);
 402   int          length = java_lang_String::length(java_string);
 403   jchar* position = (length == 0) ? NULL : value->char_at_addr(offset);
 404   return UNICODE::as_utf8(position, length);
 405 }
 406 
 407 char* java_lang_String::as_utf8_string(oop java_string, char* buf, int buflen) {


 737 
 738 Symbol* java_lang_Class::as_signature(oop java_class, bool intern_if_not_found, TRAPS) {
 739   assert(java_lang_Class::is_instance(java_class), "must be a Class object");
 740   Symbol* name;
 741   if (is_primitive(java_class)) {
 742     name = vmSymbols::type_signature(primitive_type(java_class));
 743     // Because this can create a new symbol, the caller has to decrement
 744     // the refcount, so make adjustment here and below for symbols returned
 745     // that are not created or incremented due to a successful lookup.
 746     name->increment_refcount();
 747   } else {
 748     Klass* k = as_Klass(java_class);
 749     if (!k->oop_is_instance()) {
 750       name = k->name();
 751       name->increment_refcount();
 752     } else {
 753       ResourceMark rm;
 754       const char* sigstr = k->signature_name();
 755       int         siglen = (int) strlen(sigstr);
 756       if (!intern_if_not_found) {
 757         name = SymbolTable::lookup_and_ignore_hash(sigstr, siglen);
 758       } else {
 759         name = SymbolTable::new_symbol(sigstr, siglen, THREAD);
 760       }
 761     }
 762   }
 763   return name;
 764 }
 765 
 766 
 767 Klass* java_lang_Class::array_klass(oop java_class) {
 768   Klass* k = ((Klass*)java_class->metadata_field(_array_klass_offset));
 769   assert(k == NULL || k->is_klass() && k->oop_is_array(), "should be array klass");
 770   return k;
 771 }
 772 
 773 
 774 void java_lang_Class::set_array_klass(oop java_class, Klass* klass) {
 775   assert(klass->is_klass() && klass->oop_is_array(), "should be array klass");
 776   java_class->metadata_field_put(_array_klass_offset, klass);
 777 }


2818 }
2819 
2820 void java_lang_invoke_MethodType::print_signature(oop mt, outputStream* st) {
2821   st->print("(");
2822   objArrayOop pts = ptypes(mt);
2823   for (int i = 0, limit = pts->length(); i < limit; i++) {
2824     java_lang_Class::print_signature(pts->obj_at(i), st);
2825   }
2826   st->print(")");
2827   java_lang_Class::print_signature(rtype(mt), st);
2828 }
2829 
2830 Symbol* java_lang_invoke_MethodType::as_signature(oop mt, bool intern_if_not_found, TRAPS) {
2831   ResourceMark rm;
2832   stringStream buffer(128);
2833   print_signature(mt, &buffer);
2834   const char* sigstr =       buffer.base();
2835   int         siglen = (int) buffer.size();
2836   Symbol *name;
2837   if (!intern_if_not_found) {
2838     name = SymbolTable::lookup_and_ignore_hash(sigstr, siglen);
2839   } else {
2840     name = SymbolTable::new_symbol(sigstr, siglen, THREAD);
2841   }
2842   return name;
2843 }
2844 
2845 bool java_lang_invoke_MethodType::equals(oop mt1, oop mt2) {
2846   if (mt1 == mt2)
2847     return true;
2848   if (rtype(mt1) != rtype(mt2))
2849     return false;
2850   if (ptype_count(mt1) != ptype_count(mt2))
2851     return false;
2852   for (int i = ptype_count(mt1) - 1; i >= 0; i--) {
2853     if (ptype(mt1, i) != ptype(mt2, i))
2854       return false;
2855   }
2856   return true;
2857 }
2858 


src/share/vm/classfile/javaClasses.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File