< prev index next >

src/hotspot/share/ci/ciObjectFactory.cpp

Print this page

*** 448,458 **** // Implementation note: unloaded klasses are currently stored in // an unordered array, requiring a linear-time lookup for each // unloaded klass. This may need to change. ciKlass* ciObjectFactory::get_unloaded_klass(ciKlass* accessing_klass, ciSymbol* name, ! bool create_if_not_found) { EXCEPTION_CONTEXT; oop loader = NULL; oop domain = NULL; if (accessing_klass != NULL) { loader = accessing_klass->loader(); --- 448,459 ---- // Implementation note: unloaded klasses are currently stored in // an unordered array, requiring a linear-time lookup for each // unloaded klass. This may need to change. ciKlass* ciObjectFactory::get_unloaded_klass(ciKlass* accessing_klass, ciSymbol* name, ! bool create_if_not_found, ! bool is_value_type) { EXCEPTION_CONTEXT; oop loader = NULL; oop domain = NULL; if (accessing_klass != NULL) { loader = accessing_klass->loader();
*** 502,521 **** --- 503,531 ---- dimension--; // The element klass is a TypeArrayKlass. element_klass = ciTypeArrayKlass::make(element_type); } + if (element_type == T_VALUETYPE && EnableValhallaC1) { // FIXME C2 can't handle unloaded ciValueArrayKlass + assert(element_klass->is_valuetype(), "must be"); + new_klass = new (arena()) ciValueArrayKlass(name, element_klass->as_value_klass(), dimension); + } else { new_klass = new (arena()) ciObjArrayKlass(name, element_klass, dimension); + } } else { jobject loader_handle = NULL; jobject domain_handle = NULL; if (accessing_klass != NULL) { loader_handle = accessing_klass->loader_handle(); domain_handle = accessing_klass->protection_domain_handle(); } + if (is_value_type && EnableValhallaC1) { // FIXME C2 can't handle unloaded ciValueKlass + new_klass = new (arena()) ciValueKlass(name, loader_handle, domain_handle); + } else { new_klass = new (arena()) ciInstanceKlass(name, loader_handle, domain_handle); } + } init_ident_of(new_klass); _unloaded_klasses->append(new_klass); return new_klass; }
< prev index next >