756 ObjectValue* sv = (ObjectValue*) objects->at(i); |
756 ObjectValue* sv = (ObjectValue*) objects->at(i); |
757 |
757 |
758 KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()())); |
758 KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()())); |
759 oop obj = NULL; |
759 oop obj = NULL; |
760 |
760 |
761 if (k->oop_is_instance()) { |
761 if (k->is_instance_klass()) { |
762 InstanceKlass* ik = InstanceKlass::cast(k()); |
762 InstanceKlass* ik = InstanceKlass::cast(k()); |
763 obj = ik->allocate_instance(THREAD); |
763 obj = ik->allocate_instance(THREAD); |
764 } else if (k->oop_is_typeArray()) { |
764 } else if (k->is_typeArray_klass()) { |
765 TypeArrayKlass* ak = TypeArrayKlass::cast(k()); |
765 TypeArrayKlass* ak = TypeArrayKlass::cast(k()); |
766 assert(sv->field_size() % type2size[ak->element_type()] == 0, "non-integral array length"); |
766 assert(sv->field_size() % type2size[ak->element_type()] == 0, "non-integral array length"); |
767 int len = sv->field_size() / type2size[ak->element_type()]; |
767 int len = sv->field_size() / type2size[ak->element_type()]; |
768 obj = ak->allocate(len, THREAD); |
768 obj = ak->allocate(len, THREAD); |
769 } else if (k->oop_is_objArray()) { |
769 } else if (k->is_objArray_klass()) { |
770 ObjArrayKlass* ak = ObjArrayKlass::cast(k()); |
770 ObjArrayKlass* ak = ObjArrayKlass::cast(k()); |
771 obj = ak->allocate(sv->field_size(), THREAD); |
771 obj = ak->allocate(sv->field_size(), THREAD); |
772 } |
772 } |
773 |
773 |
774 if (obj == NULL) { |
774 if (obj == NULL) { |
1008 } |
1008 } |
1009 if (obj.is_null()) { |
1009 if (obj.is_null()) { |
1010 continue; |
1010 continue; |
1011 } |
1011 } |
1012 |
1012 |
1013 if (k->oop_is_instance()) { |
1013 if (k->is_instance_klass()) { |
1014 InstanceKlass* ik = InstanceKlass::cast(k()); |
1014 InstanceKlass* ik = InstanceKlass::cast(k()); |
1015 reassign_fields_by_klass(ik, fr, reg_map, sv, 0, obj(), skip_internal); |
1015 reassign_fields_by_klass(ik, fr, reg_map, sv, 0, obj(), skip_internal); |
1016 } else if (k->oop_is_typeArray()) { |
1016 } else if (k->is_typeArray_klass()) { |
1017 TypeArrayKlass* ak = TypeArrayKlass::cast(k()); |
1017 TypeArrayKlass* ak = TypeArrayKlass::cast(k()); |
1018 reassign_type_array_elements(fr, reg_map, sv, (typeArrayOop) obj(), ak->element_type()); |
1018 reassign_type_array_elements(fr, reg_map, sv, (typeArrayOop) obj(), ak->element_type()); |
1019 } else if (k->oop_is_objArray()) { |
1019 } else if (k->is_objArray_klass()) { |
1020 reassign_object_array_elements(fr, reg_map, sv, (objArrayOop) obj()); |
1020 reassign_object_array_elements(fr, reg_map, sv, (objArrayOop) obj()); |
1021 } |
1021 } |
1022 } |
1022 } |
1023 } |
1023 } |
1024 |
1024 |