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(); }