mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-29 00:21:14 +00:00
Make ParsedAttrInfo and subclasses use constexpr construction
This removes a 30 kB global initializer. NFCI.
This commit is contained in:
parent
1fbdb03b1d
commit
e44bbedb32
@ -74,12 +74,29 @@ struct ParsedAttrInfo {
|
||||
// The names of the known arguments of this attribute.
|
||||
ArrayRef<const char *> ArgNames;
|
||||
|
||||
ParsedAttrInfo(AttributeCommonInfo::Kind AttrKind =
|
||||
AttributeCommonInfo::NoSemaHandlerAttribute)
|
||||
: AttrKind(AttrKind), NumArgs(0), OptArgs(0), HasCustomParsing(0),
|
||||
IsTargetSpecific(0), IsType(0), IsStmt(0), IsKnownToGCC(0),
|
||||
IsSupportedByPragmaAttribute(0) {}
|
||||
protected:
|
||||
constexpr ParsedAttrInfo(AttributeCommonInfo::Kind AttrKind =
|
||||
AttributeCommonInfo::NoSemaHandlerAttribute)
|
||||
: AttrKind(AttrKind), NumArgs(0), OptArgs(0), NumArgMembers(0),
|
||||
HasCustomParsing(0), AcceptsExprPack(0), IsTargetSpecific(0), IsType(0),
|
||||
IsStmt(0), IsKnownToGCC(0), IsSupportedByPragmaAttribute(0) {}
|
||||
|
||||
constexpr ParsedAttrInfo(AttributeCommonInfo::Kind AttrKind, unsigned NumArgs,
|
||||
unsigned OptArgs, unsigned NumArgMembers,
|
||||
unsigned HasCustomParsing, unsigned AcceptsExprPack,
|
||||
unsigned IsTargetSpecific, unsigned IsType,
|
||||
unsigned IsStmt, unsigned IsKnownToGCC,
|
||||
unsigned IsSupportedByPragmaAttribute,
|
||||
ArrayRef<Spelling> Spellings,
|
||||
ArrayRef<const char *> ArgNames)
|
||||
: AttrKind(AttrKind), NumArgs(NumArgs), OptArgs(OptArgs),
|
||||
NumArgMembers(NumArgMembers), HasCustomParsing(HasCustomParsing),
|
||||
AcceptsExprPack(AcceptsExprPack), IsTargetSpecific(IsTargetSpecific),
|
||||
IsType(IsType), IsStmt(IsStmt), IsKnownToGCC(IsKnownToGCC),
|
||||
IsSupportedByPragmaAttribute(IsSupportedByPragmaAttribute),
|
||||
Spellings(Spellings), ArgNames(ArgNames) {}
|
||||
|
||||
public:
|
||||
virtual ~ParsedAttrInfo() = default;
|
||||
|
||||
/// Check if this attribute appertains to D, and issue a diagnostic if not.
|
||||
|
@ -3577,9 +3577,9 @@ static void emitArgInfo(const Record &R, raw_ostream &OS) {
|
||||
|
||||
// If there is a variadic argument, we will set the optional argument count
|
||||
// to its largest value. Since it's currently a 4-bit number, we set it to 15.
|
||||
OS << " NumArgs = " << ArgCount << ";\n";
|
||||
OS << " OptArgs = " << (HasVariadic ? 15 : OptCount) << ";\n";
|
||||
OS << " NumArgMembers = " << ArgMemberCount << ";\n";
|
||||
OS << " /*NumArgs=*/" << ArgCount << ",\n";
|
||||
OS << " /*OptArgs=*/" << (HasVariadic ? 15 : OptCount) << ",\n";
|
||||
OS << " /*NumArgMembers=*/" << ArgMemberCount << ",\n";
|
||||
}
|
||||
|
||||
static std::string GetDiagnosticSpelling(const Record &R) {
|
||||
@ -4205,30 +4205,34 @@ void EmitClangAttrParsedAttrImpl(RecordKeeper &Records, raw_ostream &OS) {
|
||||
|
||||
OS << "struct ParsedAttrInfo" << I->first
|
||||
<< " final : public ParsedAttrInfo {\n";
|
||||
OS << " ParsedAttrInfo" << I->first << "() {\n";
|
||||
OS << " AttrKind = ParsedAttr::AT_" << AttrName << ";\n";
|
||||
OS << " constexpr ParsedAttrInfo" << I->first << "() : ParsedAttrInfo(\n";
|
||||
OS << " /*AttrKind=*/ParsedAttr::AT_" << AttrName << ",\n";
|
||||
emitArgInfo(Attr, OS);
|
||||
OS << " HasCustomParsing = ";
|
||||
OS << Attr.getValueAsBit("HasCustomParsing") << ";\n";
|
||||
OS << " AcceptsExprPack = ";
|
||||
OS << Attr.getValueAsBit("AcceptsExprPack") << ";\n";
|
||||
OS << " IsTargetSpecific = ";
|
||||
OS << Attr.isSubClassOf("TargetSpecificAttr") << ";\n";
|
||||
OS << " IsType = ";
|
||||
OS << (Attr.isSubClassOf("TypeAttr") ||
|
||||
Attr.isSubClassOf("DeclOrTypeAttr")) << ";\n";
|
||||
OS << " IsStmt = ";
|
||||
OS << " /*HasCustomParsing=*/";
|
||||
OS << Attr.getValueAsBit("HasCustomParsing") << ",\n";
|
||||
OS << " /*AcceptsExprPack=*/";
|
||||
OS << Attr.getValueAsBit("AcceptsExprPack") << ",\n";
|
||||
OS << " /*IsTargetSpecific=*/";
|
||||
OS << Attr.isSubClassOf("TargetSpecificAttr") << ",\n";
|
||||
OS << " /*IsType=*/";
|
||||
OS << (Attr.isSubClassOf("TypeAttr") || Attr.isSubClassOf("DeclOrTypeAttr"))
|
||||
<< ",\n";
|
||||
OS << " /*IsStmt=*/";
|
||||
OS << (Attr.isSubClassOf("StmtAttr") || Attr.isSubClassOf("DeclOrStmtAttr"))
|
||||
<< ";\n";
|
||||
OS << " IsKnownToGCC = ";
|
||||
OS << IsKnownToGCC(Attr) << ";\n";
|
||||
OS << " IsSupportedByPragmaAttribute = ";
|
||||
OS << PragmaAttributeSupport.isAttributedSupported(*I->second) << ";\n";
|
||||
<< ",\n";
|
||||
OS << " /*IsKnownToGCC=*/";
|
||||
OS << IsKnownToGCC(Attr) << ",\n";
|
||||
OS << " /*IsSupportedByPragmaAttribute=*/";
|
||||
OS << PragmaAttributeSupport.isAttributedSupported(*I->second) << ",\n";
|
||||
if (!Spellings.empty())
|
||||
OS << " Spellings = " << I->first << "Spellings;\n";
|
||||
OS << " /*Spellings=*/" << I->first << "Spellings,\n";
|
||||
else
|
||||
OS << " /*Spellings=*/{},\n";
|
||||
if (!ArgNames.empty())
|
||||
OS << " ArgNames = " << I->first << "ArgNames;\n";
|
||||
OS << " }\n";
|
||||
OS << " /*ArgNames=*/" << I->first << "ArgNames";
|
||||
else
|
||||
OS << " /*ArgNames=*/{}";
|
||||
OS << ") {}\n";
|
||||
GenerateAppertainsTo(Attr, OS);
|
||||
GenerateMutualExclusionsChecks(Attr, Records, OS, MergeDeclOS, MergeStmtOS);
|
||||
GenerateLangOptRequirements(Attr, OS);
|
||||
|
Loading…
Reference in New Issue
Block a user