401 // otherwise the JVM should not be executing this code. 402 mirror->obj_field_put(offset, defaultvalue); 403 thread->set_vm_result(defaultvalue); 404 } else { 405 assert(klass->is_in_error_state(), "If not initializing, initialization must have failed to get there"); 406 ResourceMark rm(THREAD); 407 const char* desc = "Could not initialize class "; 408 const char* className = klass->external_name(); 409 size_t msglen = strlen(desc) + strlen(className) + 1; 410 char* message = NEW_RESOURCE_ARRAY(char, msglen); 411 if (NULL == message) { 412 // Out of memory: can't create detailed error message 413 THROW_MSG(vmSymbols::java_lang_NoClassDefFoundError(), className); 414 } else { 415 jio_snprintf(message, msglen, "%s%s", desc, className); 416 THROW_MSG(vmSymbols::java_lang_NoClassDefFoundError(), message); 417 } 418 } 419 JRT_END 420 421 JRT_ENTRY(void, InterpreterRuntime::uninitialized_instance_value_field(JavaThread* thread, oopDesc* obj, int index)) 422 instanceHandle obj_h(THREAD, (instanceOop)obj); 423 InstanceKlass* klass = InstanceKlass::cast(obj_h()->klass()); 424 Klass* field_k = klass->get_value_field_klass_or_null(index); 425 assert(field_k != NULL, "Must have been initialized"); 426 ValueKlass* field_vklass = ValueKlass::cast(field_k); 427 assert(field_vklass->is_initialized(), "Must have been initialized at this point"); 428 instanceOop res = (instanceOop)field_vklass->default_value(); 429 thread->set_vm_result(res); 430 JRT_END 431 432 JRT_ENTRY(void, InterpreterRuntime::read_flattened_field(JavaThread* thread, oopDesc* obj, int index, Klass* field_holder)) 433 Handle obj_h(THREAD, obj); 434 435 assert(oopDesc::is_oop(obj), "Sanity check"); 436 437 assert(field_holder->is_instance_klass(), "Sanity check"); 438 InstanceKlass* klass = InstanceKlass::cast(field_holder); 439 440 assert(klass->field_is_flattened(index), "Sanity check"); 441 442 ValueKlass* field_vklass = ValueKlass::cast(klass->get_value_field_klass(index)); 443 assert(field_vklass->is_initialized(), "Must be initialized at this point"); 444 445 oop res = field_vklass->read_flattened_field(obj_h(), klass->field_offset(index), CHECK); 446 thread->set_vm_result(res); 447 JRT_END 448 449 JRT_ENTRY(void, InterpreterRuntime::newarray(JavaThread* thread, BasicType type, jint size)) 450 oop obj = oopFactory::new_typeArray(type, size, CHECK); 451 thread->set_vm_result(obj); | 401 // otherwise the JVM should not be executing this code. 402 mirror->obj_field_put(offset, defaultvalue); 403 thread->set_vm_result(defaultvalue); 404 } else { 405 assert(klass->is_in_error_state(), "If not initializing, initialization must have failed to get there"); 406 ResourceMark rm(THREAD); 407 const char* desc = "Could not initialize class "; 408 const char* className = klass->external_name(); 409 size_t msglen = strlen(desc) + strlen(className) + 1; 410 char* message = NEW_RESOURCE_ARRAY(char, msglen); 411 if (NULL == message) { 412 // Out of memory: can't create detailed error message 413 THROW_MSG(vmSymbols::java_lang_NoClassDefFoundError(), className); 414 } else { 415 jio_snprintf(message, msglen, "%s%s", desc, className); 416 THROW_MSG(vmSymbols::java_lang_NoClassDefFoundError(), message); 417 } 418 } 419 JRT_END 420 421 JRT_ENTRY(void, InterpreterRuntime::read_flattened_field(JavaThread* thread, oopDesc* obj, int index, Klass* field_holder)) 422 Handle obj_h(THREAD, obj); 423 424 assert(oopDesc::is_oop(obj), "Sanity check"); 425 426 assert(field_holder->is_instance_klass(), "Sanity check"); 427 InstanceKlass* klass = InstanceKlass::cast(field_holder); 428 429 assert(klass->field_is_flattened(index), "Sanity check"); 430 431 ValueKlass* field_vklass = ValueKlass::cast(klass->get_value_field_klass(index)); 432 assert(field_vklass->is_initialized(), "Must be initialized at this point"); 433 434 oop res = field_vklass->read_flattened_field(obj_h(), klass->field_offset(index), CHECK); 435 thread->set_vm_result(res); 436 JRT_END 437 438 JRT_ENTRY(void, InterpreterRuntime::newarray(JavaThread* thread, BasicType type, jint size)) 439 oop obj = oopFactory::new_typeArray(type, size, CHECK); 440 thread->set_vm_result(obj); |