本文整理汇总了C++中TypeChecker::addImplicitDestructor方法的典型用法代码示例。如果您正苦于以下问题:C++ TypeChecker::addImplicitDestructor方法的具体用法?C++ TypeChecker::addImplicitDestructor怎么用?C++ TypeChecker::addImplicitDestructor使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TypeChecker
的用法示例。
在下文中一共展示了TypeChecker::addImplicitDestructor方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: finalizeType
static void finalizeType(TypeChecker &TC, NominalTypeDecl *nominal) {
Optional<bool> lazyVarsAlreadyHaveImplementation;
for (auto *D : nominal->getMembers()) {
auto VD = dyn_cast<ValueDecl>(D);
if (!VD)
continue;
if (!shouldValidateMemberDuringFinalization(nominal, VD))
continue;
TC.validateDecl(VD);
// The only thing left to do is synthesize storage for lazy variables.
// We only have to do that if it's a type from another file, though.
// In NDEBUG builds, bail out as soon as we can.
#ifdef NDEBUG
if (lazyVarsAlreadyHaveImplementation.hasValue() &&
lazyVarsAlreadyHaveImplementation.getValue())
continue;
#endif
auto *prop = dyn_cast<VarDecl>(D);
if (!prop)
continue;
if (prop->getAttrs().hasAttribute<LazyAttr>() && !prop->isStatic()
&& prop->getGetter()) {
bool hasImplementation = prop->getGetter()->hasBody();
if (lazyVarsAlreadyHaveImplementation.hasValue()) {
assert(lazyVarsAlreadyHaveImplementation.getValue() ==
hasImplementation &&
"only some lazy vars already have implementations");
} else {
lazyVarsAlreadyHaveImplementation = hasImplementation;
}
if (!hasImplementation)
TC.completeLazyVarImplementation(prop);
}
}
// FIXME: We need to add implicit initializers and dtors when a decl is
// touched, because it affects vtable layout. If you're not defining the
// class, you shouldn't have to know what the vtable layout is.
if (auto *CD = dyn_cast<ClassDecl>(nominal)) {
TC.addImplicitConstructors(CD);
TC.addImplicitDestructor(CD);
}
// validateDeclForNameLookup will not trigger an immediate full
// validation of protocols, but clients will assume that things
// like the requirement signature have been set.
if (auto PD = dyn_cast<ProtocolDecl>(nominal)) {
if (!PD->isRequirementSignatureComputed()) {
TC.validateDecl(PD);
}
}
}