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");
|