| author | acorn |
| Mon Mar 15 15:51:36 2010 -0400 (3 years ago) | |
| changeset 1645 | f5dd08ad65df |
| parent 1644 | 3d531bbe5917 |
| child 1646 | 09ac706c2623 |
--- a/src/share/vm/ci/ciEnv.cpp Thu Jan 28 13:59:18 2010 -0500+++ b/src/share/vm/ci/ciEnv.cpp Mon Mar 15 15:51:36 2010 -0400@@ -368,6 +368,30 @@ ciKlass* ciEnv::get_klass_by_name_impl(cfound_klass =SystemDictionary::find_instance_or_array_klass(sym, loader, domain,KILL_COMPILE_ON_FATAL_(fail_type));+ }++ // If we fail to find an array klass, look again for its element type.+ // The element type may be available either locally or via constraints.+ // In either case, if we can find the element type in the system dictionary,+ // we must build an array type around it. The CI requires array klasses+ // to be loaded if their element klasses are loaded, except when memory+ // is exhausted.+ if (sym->byte_at(0) == '[' &&+ (sym->byte_at(1) == '[' || sym->byte_at(1) == 'L')) {+ // We have an unloaded array.+ // Build it on the fly if the element class exists.+ symbolOop elem_sym = oopFactory::new_symbol(sym->as_utf8()+1,+ sym->utf8_length()-1,+ KILL_COMPILE_ON_FATAL_(fail_type));+ // Get element ciKlass recursively.+ ciKlass* elem_klass =+ get_klass_by_name_impl(accessing_klass,+ get_object(elem_sym)->as_symbol(),+ require_local);+ if (elem_klass != NULL && elem_klass->is_loaded()) {+ // Now make an array for it+ return ciObjArrayKlass::make_impl(elem_klass);+ }}if (found_klass != NULL) {