< prev index next >
src/hotspot/share/oops/objArrayKlass.cpp
Print this page
rev 58769 : imported patch type-descriptor-name
*** 108,122 ****
--- 108,142 ----
int idx = 0;
new_str[idx++] = JVM_SIGNATURE_ARRAY;
if (element_klass->is_instance_klass()) { // it could be an array or simple type
new_str[idx++] = JVM_SIGNATURE_CLASS;
}
+
memcpy(&new_str[idx], name_str, len * sizeof(char));
idx += len;
+
if (element_klass->is_instance_klass()) {
+ if (element_klass->is_hidden()) {
+ // the name of an array of hidden class is of the form "[L<N>;/<S>"
+ // <N> is the binary name of the original class file in internal form
+ // <S> is the suffix
+ int end_class = -1;
+ for (int j = idx-1; j > 0; j--) {
+ new_str[j+1] = new_str[j];
+ if (new_str[j] == '+') {
+ end_class = j;
+ break;
+ }
+ }
+ // Insert ';' before '+' character
+ assert(end_class > 0 && end_class < idx, "invalid hidden class name");
+ new_str[end_class] = JVM_SIGNATURE_ENDCLASS;
+ } else {
new_str[idx++] = JVM_SIGNATURE_ENDCLASS;
}
+ }
+
new_str[idx++] = '\0';
name = SymbolTable::new_permanent_symbol(new_str);
if (element_klass->is_instance_klass()) {
InstanceKlass* ik = InstanceKlass::cast(element_klass);
ik->set_array_name(name);
< prev index next >