@@ -1344,6 +1344,16 @@ void java_lang_Class::set_module(oop java_class, oop module) {
13441344 java_class->obj_field_put (_module_offset, module );
13451345}
13461346
1347+ oop java_lang_Class::name (Handle java_class, TRAPS ) {
1348+ assert (_name_offset != 0 , " must be set" );
1349+ oop o = java_class->obj_field (_name_offset);
1350+ if (o == NULL ) {
1351+ o = StringTable::intern (java_lang_Class::as_external_name (java_class ()), THREAD );
1352+ java_class->obj_field_put (_name_offset, o);
1353+ }
1354+ return o;
1355+ }
1356+
13471357oop java_lang_Class::create_basic_type_mirror (const char * basic_type_name, BasicType type, TRAPS ) {
13481358 // This should be improved by adding a field at the Java level or by
13491359 // introducing a new VM klass (see comment in ClassFileParser)
@@ -1504,7 +1514,8 @@ int java_lang_Class::classRedefinedCount_offset = -1;
15041514 macro (classRedefinedCount_offset, k, " classRedefinedCount" , int_signature, false ) ; \
15051515 macro (_class_loader_offset, k, " classLoader" , classloader_signature, false ); \
15061516 macro (_component_mirror_offset, k, " componentType" , class_signature, false ); \
1507- macro (_module_offset, k, " module" , module_signature, false )
1517+ macro (_module_offset, k, " module" , module_signature, false ); \
1518+ macro (_name_offset, k, " name" , string_signature, false ); \
15081519
15091520void java_lang_Class::compute_offsets () {
15101521 if (offsets_computed) {
@@ -2550,12 +2561,14 @@ void java_lang_StackTraceElement::fill_in(Handle element,
25502561 int version, int bci, Symbol* name, TRAPS ) {
25512562 assert (element->is_a (SystemDictionary::StackTraceElement_klass ()), " sanity check" );
25522563
2553- // Fill in class name
25542564 ResourceMark rm (THREAD );
2555- const char * str = holder->external_name ();
2556- oop classname = StringTable::intern (str, CHECK );
2565+ HandleMark hm (THREAD );
2566+
2567+ // Fill in class name
2568+ Handle java_class (THREAD , holder->java_mirror ());
2569+ oop classname = java_lang_Class::name (java_class, CHECK );
25572570 java_lang_StackTraceElement::set_declaringClass (element (), classname);
2558- java_lang_StackTraceElement::set_declaringClassObject (element (), holder-> java_mirror ());
2571+ java_lang_StackTraceElement::set_declaringClassObject (element (), java_class ());
25592572
25602573 oop loader = holder->class_loader ();
25612574 if (loader != NULL ) {
@@ -3966,6 +3979,7 @@ int java_lang_Class::_protection_domain_offset;
39663979int java_lang_Class::_component_mirror_offset;
39673980int java_lang_Class::_init_lock_offset;
39683981int java_lang_Class::_signers_offset;
3982+ int java_lang_Class::_name_offset;
39693983GrowableArray<Klass*>* java_lang_Class::_fixup_mirror_list = NULL ;
39703984GrowableArray<Klass*>* java_lang_Class::_fixup_module_field_list = NULL ;
39713985int java_lang_Throwable::backtrace_offset;
0 commit comments