| 5207 | } |
| 5208 | |
| 5209 | GcClass* 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 | |
| 5251 | object makeObjectArray(Thread* t, GcClass* elementClass, unsigned count) |
| 5252 | { |
no test coverage detected