Пример #1
0
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;
  }