本文整理汇总了C++中NominalTypeDecl::addedImplicitInitializers方法的典型用法代码示例。如果您正苦于以下问题:C++ NominalTypeDecl::addedImplicitInitializers方法的具体用法?C++ NominalTypeDecl::addedImplicitInitializers怎么用?C++ NominalTypeDecl::addedImplicitInitializers使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NominalTypeDecl
的用法示例。
在下文中一共展示了NominalTypeDecl::addedImplicitInitializers方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: isQualifiedLookupInDeclContextSatisfied
//===----------------------------------------------------------------------===//
// Qualified name lookup handling
//===----------------------------------------------------------------------===//
bool IterativeTypeChecker::isQualifiedLookupInDeclContextSatisfied(
TypeCheckRequest::DeclContextLookupPayloadType payload) {
auto dc = payload.DC;
NominalTypeDecl *nominal = nullptr;
switch (dc->getContextKind()) {
case DeclContextKind::AbstractClosureExpr:
case DeclContextKind::AbstractFunctionDecl:
case DeclContextKind::Initializer:
case DeclContextKind::TopLevelCodeDecl:
case DeclContextKind::SerializedLocal:
case DeclContextKind::SubscriptDecl:
llvm_unreachable("not a DeclContext that supports name lookup");
case DeclContextKind::Module:
case DeclContextKind::FileUnit:
// Modules and file units can always handle name lookup.
return true;
case DeclContextKind::GenericTypeDecl:
// Get the nominal type.
nominal = dyn_cast<NominalTypeDecl>(cast<GenericTypeDecl>(dc));
if (!nominal) return true;
break;
case DeclContextKind::ExtensionDecl: {
auto ext = cast<ExtensionDecl>(dc);
// FIXME: bind the extension. We currently assume this is done.
nominal = ext->getAsNominalTypeOrNominalTypeExtensionContext();
if (!nominal) return true;
break;
}
}
assert(nominal && "Only nominal types are handled here");
// FIXME: Cache a bit indicating when qualified lookup is possible.
// If we needed them for this query, did we already add implicit
// initializers?
auto name = payload.Name;
if ((!name || name.matchesRef(getASTContext().Id_init)) &&
!nominal->addedImplicitInitializers())
return false;
// For classes, check the superclass.
if (auto classDecl = dyn_cast<ClassDecl>(nominal)) {
if (!isSatisfied(requestTypeCheckSuperclass(classDecl)))
return false;
if (auto superclass = classDecl->getSuperclass()) {
if (auto superclassDecl = superclass->getAnyNominal()) {
if (!isSatisfied(requestQualifiedLookupInDeclContext({ superclassDecl,
payload.Name,
payload.Loc })))
return false;
}
}
}
return true;
}