MCPcopy Create free account
hub / github.com/ReadyTalk/avian / resolveObjectArrayClass

Function resolveObjectArrayClass

src/machine.cpp:5209–5249  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5207}
5208
5209GcClass* resolveObjectArrayClass(Thread* t,
5210 GcClassLoader* loader,
5211 GcClass* elementClass)
5212{
5213 PROTECT(t, loader);
5214 PROTECT(t, elementClass);
5215
5216 {
5217 GcClass* arrayClass
5218 = cast<GcClass>(t, getClassRuntimeData(t, elementClass)->arrayClass());
5219 if (arrayClass) {
5220 return arrayClass;
5221 }
5222 }
5223
5224 GcByteArray* elementSpec = elementClass->name();
5225 PROTECT(t, elementSpec);
5226
5227 GcByteArray* spec;
5228 if (elementSpec->body()[0] == '[') {
5229 spec = makeByteArray(t, elementSpec->length() + 1);
5230 spec->body()[0] = '[';
5231 memcpy(
5232 &spec->body()[1], elementSpec->body().begin(), elementSpec->length());
5233 } else {
5234 spec = makeByteArray(t, elementSpec->length() + 3);
5235 spec->body()[0] = '[';
5236 spec->body()[1] = 'L';
5237 memcpy(&spec->body()[2],
5238 elementSpec->body().begin(),
5239 elementSpec->length() - 1);
5240 spec->body()[elementSpec->length() + 1] = ';';
5241 spec->body()[elementSpec->length() + 2] = 0;
5242 }
5243
5244 GcClass* arrayClass = resolveClass(t, loader, spec);
5245
5246 getClassRuntimeData(t, elementClass)->setArrayClass(t, arrayClass);
5247
5248 return arrayClass;
5249}
5250
5251object makeObjectArray(Thread* t, GcClass* elementClass, unsigned count)
5252{

Callers 2

makeObjectArrayFunction · 0.85
jvmDumpThreadsFunction · 0.85

Calls 7

getClassRuntimeDataFunction · 0.85
makeByteArrayFunction · 0.85
bodyMethod · 0.80
resolveClassFunction · 0.70
lengthMethod · 0.65
nameMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected