UserClass* JnjvmClassLoader::constructClass(const UTF8* name, ClassBytes* bytes) { JavaObject* excp = NULL; llvm_gcroot(excp, 0); UserClass* res = NULL; lock.lock(); classes->lock.lock(); res = (UserClass*) classes->map.lookup(name); classes->lock.unlock(); if (res == NULL) { TRY { const UTF8* internalName = readerConstructUTF8(name->elements, name->size); res = new(allocator, "Class") UserClass(this, internalName, bytes); res->readClass(); res->makeVT(); getCompiler()->resolveVirtualClass(res); getCompiler()->resolveStaticClass(res); classes->lock.lock(); assert(res->getDelegatee() == NULL); assert(res->getStaticInstance() == NULL); assert(classes->map.lookup(internalName) == NULL); classes->map[internalName] = res; classes->lock.unlock(); } CATCH { excp = JavaThread::get()->pendingException; JavaThread::get()->clearException(); } END_CATCH; }