bool IRGenerator::canEmitWitnessTableLazily(SILWitnessTable *wt) { if (Opts.UseJIT) return false; // Regardless of the access level, if the witness table is shared it means // we can safely not emit it. Every other module which needs it will generate // its own shared copy of it. if (wt->getLinkage() == SILLinkage::Shared) return true; NominalTypeDecl *ConformingTy = wt->getConformingType()->getNominalOrBoundGenericNominal(); switch (ConformingTy->getEffectiveAccess()) { case AccessLevel::Private: case AccessLevel::FilePrivate: return true; case AccessLevel::Internal: return PrimaryIGM->getSILModule().isWholeModule(); default: return false; } llvm_unreachable("switch does not handle all cases"); }
bool IRGenerator::canEmitWitnessTableLazily(SILWitnessTable *wt) { if (Opts.UseJIT) return false; NominalTypeDecl *ConformingTy = wt->getConformance()->getType()->getNominalOrBoundGenericNominal(); switch (ConformingTy->getEffectiveAccess()) { case AccessLevel::Private: case AccessLevel::FilePrivate: return true; case AccessLevel::Internal: return PrimaryIGM->getSILModule().isWholeModule(); default: return false; } llvm_unreachable("switch does not handle all cases"); }