static Field* loadFields(Env* env, Class* clazz) { ClassInfoHeader* header = lookupClassInfo(env, clazz->name, !clazz->classLoader || !clazz->classLoader->parent ? _bcBootClassesHash : _bcClassesHash); if (!header) return NULL; ClassInfo ci; jint i; void* p = header; readClassInfo(&p, &ci); skipInterfaceNames(&p, &ci); Field* first = NULL; for (i = 0; i < ci.fieldCount; i++) { FieldInfo fi; readFieldInfo(&p, &fi); Field* f = rvmAllocateField(env, clazz, fi.name, fi.desc, fi.access, fi.offset, fi.attributes); if (!f) goto error; LL_PREPEND(first, f); } return first; error: while (first) { Field* next = first->next; rvmFreeMemoryUncollectable(env, first); first = next; } return NULL; }
static void loadFields(Env* env, Class* clazz) { ClassInfoHeader* header = lookupClassInfo(env, clazz->name, !clazz->classLoader || !clazz->classLoader->parent ? _bcBootClassesHash : _bcClassesHash); if (!header) return; ClassInfo ci; jint i; void* p = header; readClassInfo(&p, &ci); skipInterfaceNames(&p, &ci); for (i = 0; i < ci.fieldCount; i++) { FieldInfo fi; readFieldInfo(&p, &fi); if (!rvmAddField(env, clazz, fi.name, fi.desc, fi.access, fi.offset, fi.attributes)) return; } }