mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-06 14:10:36 +00:00
8363816: Refactor array name creation
Reviewed-by: shade, ccheung, dholmes
This commit is contained in:
parent
743c821289
commit
38cd860daa
@ -53,6 +53,26 @@ ObjArrayKlass* ObjArrayKlass::allocate_klass(ClassLoaderData* loader_data, int n
|
||||
return new (loader_data, size, THREAD) ObjArrayKlass(n, k, name);
|
||||
}
|
||||
|
||||
Symbol* ObjArrayKlass::create_element_klass_array_name(JavaThread* current, Klass* element_klass) {
|
||||
ResourceMark rm(current);
|
||||
char* name_str = element_klass->name()->as_C_string();
|
||||
int len = element_klass->name()->utf8_length();
|
||||
char* new_str = NEW_RESOURCE_ARRAY_IN_THREAD(current, char, len + 4);
|
||||
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()) {
|
||||
new_str[idx++] = JVM_SIGNATURE_ENDCLASS;
|
||||
}
|
||||
new_str[idx] = '\0';
|
||||
return SymbolTable::new_symbol(new_str);
|
||||
}
|
||||
|
||||
|
||||
ObjArrayKlass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_data,
|
||||
int n, Klass* element_klass, TRAPS) {
|
||||
|
||||
@ -79,25 +99,7 @@ ObjArrayKlass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_da
|
||||
}
|
||||
|
||||
// Create type name for klass.
|
||||
Symbol* name = nullptr;
|
||||
{
|
||||
ResourceMark rm(THREAD);
|
||||
char *name_str = element_klass->name()->as_C_string();
|
||||
int len = element_klass->name()->utf8_length();
|
||||
char *new_str = NEW_RESOURCE_ARRAY(char, len + 4);
|
||||
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()) {
|
||||
new_str[idx++] = JVM_SIGNATURE_ENDCLASS;
|
||||
}
|
||||
new_str[idx++] = '\0';
|
||||
name = SymbolTable::new_symbol(new_str);
|
||||
}
|
||||
Symbol* name = create_element_klass_array_name(THREAD, element_klass);
|
||||
|
||||
// Initialize instance variables
|
||||
ObjArrayKlass* oak = ObjArrayKlass::allocate_klass(loader_data, n, element_klass, name, CHECK_NULL);
|
||||
|
||||
@ -52,6 +52,11 @@ class ObjArrayKlass : public ArrayKlass {
|
||||
static ObjArrayKlass* allocate_klass(ClassLoaderData* loader_data, int n, Klass* k, Symbol* name, TRAPS);
|
||||
|
||||
objArrayOop allocate_instance(int length, TRAPS);
|
||||
|
||||
protected:
|
||||
// Create array_name for element klass
|
||||
static Symbol* create_element_klass_array_name(JavaThread* current, Klass* element_klass);
|
||||
|
||||
public:
|
||||
// For dummy objects
|
||||
ObjArrayKlass() {}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user