예제 #1
0
파일: atom.cpp 프로젝트: LijieTu/hfcxx
void Atom::addWavefunctions(Basis &basis){

	if(Z==1 || Z==2) {
		basis.set("1s", Z,r);
		wavefunctions.push_back(CGF("1s", Z, r, basis.getGTOs() ));
		nrwav = 1;
	}
	if(Z==3 || Z==4) {
		basis.set("1s", Z,r);
		wavefunctions.push_back(CGF("1s", Z, r, basis.getGTOs() ));
		basis.set("2s", Z,r);
		wavefunctions.push_back(CGF("2s", Z, r, basis.getGTOs() ));
		nrwav = 2;
	}
	if(Z>=5 && Z<=10) {
		basis.set("1s", Z,r);
		wavefunctions.push_back(CGF("1s", Z, r, basis.getGTOs() ));
		basis.set("2s", Z,r);
		wavefunctions.push_back(CGF("2s", Z, r, basis.getGTOs() ));
		basis.set("2px", Z,r);
		wavefunctions.push_back(CGF("2px", Z, r, basis.getGTOs() ));
		basis.set("2py", Z,r);
		wavefunctions.push_back(CGF("2py", Z, r, basis.getGTOs() ));
		basis.set("2pz", Z,r);
		wavefunctions.push_back(CGF("2pz", Z, r, basis.getGTOs() ));
		nrwav = 5;
	}
}
void CGObjCJit::AddMethodsToClass(void *theClass) {

  // Methods need to be added at runtime. Method function pointers (IMP)
  // are not available until then.

  CGBuilderTy Builder(JitInitBlock);
  CodeGen::CodeGenFunction CGF(CGM);

  void *theMetaclass = _object_getClass(theClass);

  llvm::DenseMap<const ObjCMethodDecl*, llvm::Function*>::iterator I =
      MethodDefinitions.begin();

  while (I != MethodDefinitions.end()) {
    const ObjCMethodDecl *D = I->first;
    std::string TypeStr;
    CGM.getContext().getObjCEncodingForMethodDecl(const_cast<ObjCMethodDecl*>(D),
        TypeStr);
    const char* TypeCStr = // keep in a set
      MethodTypeStrings.insert(MethodTypeStrings.begin(), TypeStr)->c_str();
    void *ClassObject = D->isClassMethod() ? theMetaclass : theClass;
    llvm::Value *ClassArg =
      llvm::Constant::getIntegerValue(ObjCTypes.ClassPtrTy,
                                      llvm::APInt(sizeof(void*) * 8,
                                          (uint64_t)ClassObject));
    llvm::Value *SelectorArg = GetSelector(CGF, D->getSelector());
    llvm::Value *TypeArg =
      llvm::Constant::getIntegerValue(ObjCTypes.Int8PtrTy,
                                      llvm::APInt(sizeof(void*) * 8,
                                          (uint64_t)TypeCStr));

    llvm::Value *MethodArg = Builder.CreateBitCast(I->second, ImpPtrTy);

    Builder.CreateCall4(fn_class_addMethod,
                        ClassArg,
                        SelectorArg,
                        MethodArg,
                        TypeArg);
    I++;
  }

  // Done with list for this implementation, so clear it
  MethodDefinitions.clear();
}