[AST] Remove DeclAttrKind::Count

Introduce NumDeclAttrKinds for number of enum values. Use optional for
invalid attribute kind. This align with `TypeAttrKind`.
This commit is contained in:
Rintaro Ishizaki
2024-02-02 08:48:32 -08:00
parent 8fdc4cc225
commit 92e70ef80a
12 changed files with 68 additions and 88 deletions

View File

@@ -724,19 +724,18 @@ SDKNode* SDKNode::constructSDKNode(SDKContext &Ctx,
}
case KeyKind::KK_declAttributes: {
auto *Seq = cast<llvm::yaml::SequenceNode>(Pair.getValue());
std::transform(
Seq->begin(), Seq->end(), std::back_inserter(Info.DeclAttrs),
[&](llvm::yaml::Node &N) {
auto Result =
llvm::StringSwitch<DeclAttrKind>(GetScalarString(&N))
for (auto &N : *Seq) {
auto Result = llvm::StringSwitch<llvm::Optional<DeclAttrKind>>(
GetScalarString(&N))
#define DECL_ATTR(_, NAME, ...) .Case(#NAME, DeclAttrKind::NAME)
#include "swift/AST/DeclAttr.def"
.Default(DeclAttrKind::Count);
if (Result == DeclAttrKind::Count)
Ctx.diagnose(&N, diag::sdk_node_unrecognized_decl_attr_kind,
GetScalarString(&N));
return Result;
});
.Default(llvm::None);
if (!Result)
Ctx.diagnose(&N, diag::sdk_node_unrecognized_decl_attr_kind,
GetScalarString(&N));
else
Info.DeclAttrs.push_back(*Result);
}
break;
}
case KeyKind::KK_accessors: {
@@ -2781,8 +2780,6 @@ static StringRef getAttrName(DeclAttrKind Kind) {
return DeclAttribute::isDeclModifier(DeclAttrKind::CLASS) ? #NAME \
: "@" #NAME;
#include "swift/AST/DeclAttr.def"
case DeclAttrKind::Count:
llvm_unreachable("unrecognized attribute kind.");
}
llvm_unreachable("covered switch");
}