hotspot/src/share/vm/runtime/deoptimization.cpp
changeset 33611 9abd65805e19
parent 33593 60764a78fa5c
child 33794 41ef3dc95179
child 33638 ef49ed90010b
equal deleted inserted replaced
33602:16053580a684 33611:9abd65805e19
   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