< prev index next >
src/share/vm/ci/ciEnv.cpp
Print this page
@@ -492,10 +492,25 @@
if (require_local) return NULL;
// Not yet loaded into the VM, or not governed by loader constraints.
// Make a CI representative for it.
+ int i = 0;
+ while (sym->byte_at(i) == '[') {
+ i++;
+ }
+ if (i > 0 && sym->byte_at(i) == 'Q') {
+ // An unloaded array class of value types is an ObjArrayKlass, an
+ // unloaded value type class is an InstanceKlass. For consistency,
+ // make the signature of the unloaded array of value type use L
+ // rather than Q.
+ char *new_name = CURRENT_THREAD_ENV->name_buffer(sym->utf8_length()+1);
+ strncpy(new_name, (char*)sym->base(), sym->utf8_length());
+ new_name[i] = 'L';
+ new_name[sym->utf8_length()] = '\0';
+ return get_unloaded_klass(accessing_klass, ciSymbol::make(new_name));
+ }
return get_unloaded_klass(accessing_klass, name);
}
// ------------------------------------------------------------------
// ciEnv::get_klass_by_name
< prev index next >