< prev index next >

src/hotspot/share/ci/ciReplay.cpp

Print this page




 826         double value = atof(string_value);
 827         _vt->double_field_put(fd->offset(), value);
 828         break;
 829       }
 830       case T_ARRAY:
 831       case T_OBJECT: {
 832         Thread* THREAD = Thread::current();
 833         bool res = _replay->process_staticfield_reference(string_value, _vt, fd, THREAD);
 834         assert(res, "should succeed for arrays & objects");
 835         break;
 836       }
 837       case T_VALUETYPE: {
 838         Thread* THREAD = Thread::current();
 839         SignatureStream ss(fd->signature(), false);
 840         InstanceKlass* holder = fd->field_holder();
 841         Klass* k = ss.as_klass(Handle(THREAD, holder->class_loader()),
 842                                Handle(THREAD, holder->protection_domain()),
 843                                SignatureStream::ReturnNull, THREAD);
 844         assert(k != NULL && !HAS_PENDING_EXCEPTION, "can resolve klass?");
 845         ValueKlass* vk = ValueKlass::cast(k);
 846         if (fd->is_flatten()) {
 847           int field_offset = fd->offset() - vk->first_field_offset();
 848           oop obj = (oop)((address)_vt + field_offset);
 849           ValueTypeFieldInitializer init_fields(obj, _replay);
 850           vk->do_nonstatic_fields(&init_fields);
 851         } else {
 852           oop value = vk->allocate_instance(THREAD);
 853           _vt->obj_field_put(fd->offset(), value);
 854         }
 855         break;
 856       }
 857       default: {
 858         fatal("Unhandled type: %s", type2name(bt));
 859       }
 860       }
 861     }
 862   };
 863 
 864   bool process_staticfield_reference(const char* field_signature, oop java_mirror, fieldDescriptor* fd, TRAPS) {
 865     if (field_signature[0] == '[') {
 866       int length = parse_int("array length");




 826         double value = atof(string_value);
 827         _vt->double_field_put(fd->offset(), value);
 828         break;
 829       }
 830       case T_ARRAY:
 831       case T_OBJECT: {
 832         Thread* THREAD = Thread::current();
 833         bool res = _replay->process_staticfield_reference(string_value, _vt, fd, THREAD);
 834         assert(res, "should succeed for arrays & objects");
 835         break;
 836       }
 837       case T_VALUETYPE: {
 838         Thread* THREAD = Thread::current();
 839         SignatureStream ss(fd->signature(), false);
 840         InstanceKlass* holder = fd->field_holder();
 841         Klass* k = ss.as_klass(Handle(THREAD, holder->class_loader()),
 842                                Handle(THREAD, holder->protection_domain()),
 843                                SignatureStream::ReturnNull, THREAD);
 844         assert(k != NULL && !HAS_PENDING_EXCEPTION, "can resolve klass?");
 845         ValueKlass* vk = ValueKlass::cast(k);
 846         if (fd->is_flattened()) {
 847           int field_offset = fd->offset() - vk->first_field_offset();
 848           oop obj = (oop)((address)_vt + field_offset);
 849           ValueTypeFieldInitializer init_fields(obj, _replay);
 850           vk->do_nonstatic_fields(&init_fields);
 851         } else {
 852           oop value = vk->allocate_instance(THREAD);
 853           _vt->obj_field_put(fd->offset(), value);
 854         }
 855         break;
 856       }
 857       default: {
 858         fatal("Unhandled type: %s", type2name(bt));
 859       }
 860       }
 861     }
 862   };
 863 
 864   bool process_staticfield_reference(const char* field_signature, oop java_mirror, fieldDescriptor* fd, TRAPS) {
 865     if (field_signature[0] == '[') {
 866       int length = parse_int("array length");


< prev index next >