Lines Matching defs:DirLang
51 const DirectiveLanguage &DirLang,
74 << "llvm::" << DirLang.getCppNamespace() << "::" << Enum
84 const DirectiveLanguage &DirLang,
107 if (DirLang.hasMakeEnumAvailableInNamespace()) {
111 << "llvm::" << DirLang.getCppNamespace() << "::" << EnumName
119 (llvm::Twine("llvm::StringRef get") + llvm::Twine(DirLang.getName()) +
185 static size_t GetMaxLeafCount(const DirectiveLanguage &DirLang) {
187 for (Record *R : DirLang.getDirectives()) {
197 const auto DirLang = DirectiveLanguage{Records};
198 if (DirLang.HasValidityErrors())
201 OS << "#ifndef LLVM_" << DirLang.getName() << "_INC\n";
202 OS << "#define LLVM_" << DirLang.getName() << "_INC\n";
205 if (DirLang.hasEnableBitmaskEnumInNamespace())
215 llvm::SplitString(DirLang.getCppNamespace(), Namespaces, "::");
219 if (DirLang.hasEnableBitmaskEnumInNamespace())
225 DirLang.getAssociations(), std::back_inserter(associations),
229 /*Prefix=*/"", DirLang, /*ExportEnums=*/false);
231 GenerateEnumClass(DirLang.getCategories(), OS, "Category", /*Prefix=*/"",
232 DirLang, /*ExportEnums=*/false);
235 GenerateEnumClass(DirLang.getDirectives(), OS, "Directive",
236 DirLang.getDirectivePrefix(), DirLang,
237 DirLang.hasMakeEnumAvailableInNamespace());
240 GenerateEnumClass(DirLang.getClauses(), OS, "Clause",
241 DirLang.getClausePrefix(), DirLang,
242 DirLang.hasMakeEnumAvailableInNamespace());
246 GenerateEnumClauseVal(DirLang.getClauses(), OS, DirLang, EnumHelperFuncs);
251 OS << "Directive get" << DirLang.getName()
254 OS << "llvm::StringRef get" << DirLang.getName()
257 OS << "Clause get" << DirLang.getName()
260 OS << "llvm::StringRef get" << DirLang.getName() << "ClauseName(Clause C);\n";
268 << GetMaxLeafCount(DirLang) << "; }\n";
282 OS << "#endif // LLVM_" << DirLang.getName() << "_INC\n";
288 const DirectiveLanguage &DirLang,
291 OS << "llvm::StringRef llvm::" << DirLang.getCppNamespace() << "::get"
292 << DirLang.getName() << Enum << "Name(" << Enum << " Kind) {\n";
305 OS << " llvm_unreachable(\"Invalid " << DirLang.getName() << " " << Enum
313 const DirectiveLanguage &DirLang, StringRef Prefix,
327 OS << Enum << " llvm::" << DirLang.getCppNamespace() << "::get"
328 << DirLang.getName() << Enum << "Kind(llvm::StringRef Str) {\n";
346 static void GenerateGetKindClauseVal(const DirectiveLanguage &DirLang,
348 for (const auto &R : DirLang.getClauses()) {
373 OS << EnumName << " llvm::" << DirLang.getCppNamespace() << "::get"
385 OS << "llvm::StringRef llvm::" << DirLang.getCppNamespace() << "::get"
386 << DirLang.getName() << EnumName
387 << "Name(llvm::" << DirLang.getCppNamespace() << "::" << EnumName
396 OS << " llvm_unreachable(\"Invalid " << DirLang.getName() << " "
405 const DirectiveLanguage &DirLang,
413 OS << " case " << DirLang.getClausePrefix() << ClauseFormattedName
421 static std::string GetDirectiveName(const DirectiveLanguage &DirLang,
424 return (llvm::Twine("llvm::") + DirLang.getCppNamespace() +
425 "::" + DirLang.getDirectivePrefix() + Dir.getFormattedName())
429 static std::string GetDirectiveType(const DirectiveLanguage &DirLang) {
430 return (llvm::Twine("llvm::") + DirLang.getCppNamespace() + "::Directive")
435 static void GenerateIsAllowedClause(const DirectiveLanguage &DirLang,
438 OS << "bool llvm::" << DirLang.getCppNamespace()
441 OS << " assert(unsigned(D) <= llvm::" << DirLang.getCppNamespace()
443 OS << " assert(unsigned(C) <= llvm::" << DirLang.getCppNamespace()
448 for (const auto &D : DirLang.getDirectives()) {
451 OS << " case " << DirLang.getDirectivePrefix() << Dir.getFormattedName()
464 Dir.getName(), DirLang, Cases);
467 Dir.getName(), DirLang, Cases);
470 Dir.getName(), DirLang, Cases);
473 Dir.getName(), DirLang, Cases);
483 OS << " llvm_unreachable(\"Invalid " << DirLang.getName()
488 static void EmitLeafTable(const DirectiveLanguage &DirLang, raw_ostream &OS,
509 std::vector<Record *> Directives = DirLang.getDirectives();
516 int MaxLeafCount = GetMaxLeafCount(DirLang);
578 std::string DirectiveType = GetDirectiveType(DirLang);
585 OS << " {" << GetDirectiveName(DirLang, Directives[Leaves[0]]);
590 OS << ' ' << GetDirectiveName(DirLang, Directives[Leaves[I]]) << ',';
618 static void GenerateGetDirectiveAssociation(const DirectiveLanguage &DirLang,
631 std::vector<Record *> associations = DirLang.getAssociations();
658 DirLang.getCppNamespace() + "' ")
723 for (Record *R : DirLang.getDirectives())
729 return (llvm::Twine("llvm::") + DirLang.getCppNamespace() +
730 "::Directive::" + DirLang.getDirectivePrefix() + Formatted)
735 std::string("llvm::") + DirLang.getCppNamespace().str() + "::Directive";
737 std::string("llvm::") + DirLang.getCppNamespace().str() + "::Association";
739 OS << AssociationTypeName << " llvm::" << DirLang.getCppNamespace()
742 for (Record *R : DirLang.getDirectives()) {
755 static void GenerateGetDirectiveCategory(const DirectiveLanguage &DirLang,
757 std::string LangNamespace = "llvm::" + DirLang.getCppNamespace().str();
763 << GetDirectiveType(DirLang) << " Dir) {\n";
766 for (Record *R : DirLang.getDirectives()) {
768 OS << " case " << GetDirectiveName(DirLang, R) << ":\n";
781 const DirectiveLanguage &DirLang) {
784 OS << " static " << DirLang.getClauseEnumSetClass() << " " << ClauseSetPrefix
785 << DirLang.getDirectivePrefix() << Dir.getFormattedName() << " {\n";
789 OS << " llvm::" << DirLang.getCppNamespace()
790 << "::Clause::" << DirLang.getClausePrefix()
797 static void GenerateDirectiveClauseSets(const DirectiveLanguage &DirLang,
807 llvm::SplitString(DirLang.getCppNamespace(), Namespaces, "::");
811 for (const auto &D : DirLang.getDirectives()) {
818 DirLang);
820 Dir, DirLang);
822 "allowedExclusiveClauses_", Dir, DirLang);
824 DirLang);
837 static void GenerateDirectiveClauseMap(const DirectiveLanguage &DirLang,
845 for (const auto &D : DirLang.getDirectives()) {
847 OS << " {llvm::" << DirLang.getCppNamespace()
848 << "::Directive::" << DirLang.getDirectivePrefix()
851 OS << " llvm::" << DirLang.getCppNamespace() << "::allowedClauses_"
852 << DirLang.getDirectivePrefix() << Dir.getFormattedName() << ",\n";
853 OS << " llvm::" << DirLang.getCppNamespace() << "::allowedOnceClauses_"
854 << DirLang.getDirectivePrefix() << Dir.getFormattedName() << ",\n";
855 OS << " llvm::" << DirLang.getCppNamespace()
856 << "::allowedExclusiveClauses_" << DirLang.getDirectivePrefix()
858 OS << " llvm::" << DirLang.getCppNamespace() << "::requiredClauses_"
859 << DirLang.getDirectivePrefix() << Dir.getFormattedName() << ",\n";
872 static void GenerateFlangClauseParserClass(const DirectiveLanguage &DirLang,
879 for (const auto &C : DirLang.getClauses()) {
900 static void GenerateFlangClauseParserClassList(const DirectiveLanguage &DirLang,
906 llvm::interleaveComma(DirLang.getClauses(), OS, [&](Record *C) {
913 static void GenerateFlangClauseDump(const DirectiveLanguage &DirLang,
919 for (const auto &C : DirLang.getClauses()) {
921 OS << "NODE(" << DirLang.getFlangClauseBaseClass() << ", "
928 static void GenerateFlangClauseUnparse(const DirectiveLanguage &DirLang,
935 for (const auto &C : DirLang.getClauses()) {
939 OS << "void Unparse(const " << DirLang.getFlangClauseBaseClass()
946 OS << "void Unparse(const " << DirLang.getFlangClauseBaseClass()
960 OS << "void Unparse(const " << DirLang.getFlangClauseBaseClass()
972 OS << "void Before(const " << DirLang.getFlangClauseBaseClass()
980 static void GenerateFlangClauseCheckPrototypes(const DirectiveLanguage &DirLang,
986 for (const auto &C : DirLang.getClauses()) {
988 OS << "void Enter(const parser::" << DirLang.getFlangClauseBaseClass()
995 static void GenerateFlangClauseParserKindMap(const DirectiveLanguage &DirLang,
1001 for (const auto &C : DirLang.getClauses()) {
1004 << DirLang.getFlangClauseBaseClass()
1007 OS << " return llvm::" << DirLang.getCppNamespace()
1008 << "::Clause::" << DirLang.getClausePrefix() << Clause.getFormattedName()
1012 OS << "llvm_unreachable(\"Invalid " << DirLang.getName()
1023 static void GenerateFlangClausesParser(const DirectiveLanguage &DirLang,
1025 std::vector<Record *> Clauses = DirLang.getClauses();
1032 unsigned lastClauseIndex = DirLang.getClauses().size() - 1;
1047 OS << " >> construct<" << DirLang.getFlangClauseBaseClass()
1048 << ">(construct<" << DirLang.getFlangClauseBaseClass()
1102 static void EmitDirectivesFlangImpl(const DirectiveLanguage &DirLang,
1105 GenerateDirectiveClauseSets(DirLang, OS);
1107 GenerateDirectiveClauseMap(DirLang, OS);
1109 GenerateFlangClauseParserClass(DirLang, OS);
1111 GenerateFlangClauseParserClassList(DirLang, OS);
1113 GenerateFlangClauseDump(DirLang, OS);
1115 GenerateFlangClauseUnparse(DirLang, OS);
1117 GenerateFlangClauseCheckPrototypes(DirLang, OS);
1119 GenerateFlangClauseParserKindMap(DirLang, OS);
1121 GenerateFlangClausesParser(DirLang, OS);
1124 static void GenerateClauseClassMacro(const DirectiveLanguage &DirLang,
1142 OS << " CLAUSE(" << DirLang.getClausePrefix()
1144 OS << " CLAUSE_CLASS(" << DirLang.getClausePrefix()
1147 OS << " CLAUSE(" << DirLang.getClausePrefix()
1149 OS << " CLAUSE_NO_CLASS(" << DirLang.getClausePrefix() << "##Name, #Name)\n";
1151 OS << " CLAUSE(" << DirLang.getClausePrefix()
1153 OS << " CLAUSE_CLASS(" << DirLang.getClausePrefix()
1156 OS << " CLAUSE(" << DirLang.getClausePrefix()
1158 OS << " CLAUSE_NO_CLASS(" << DirLang.getClausePrefix() << "##Name, Str)\n";
1161 for (const auto &R : DirLang.getClauses()) {
1193 void EmitDirectivesBasicImpl(const DirectiveLanguage &DirLang,
1200 GenerateGetKind(DirLang.getDirectives(), OS, "Directive", DirLang,
1201 DirLang.getDirectivePrefix(), /*ImplicitAsUnknown=*/false);
1204 GenerateGetName(DirLang.getDirectives(), OS, "Directive", DirLang,
1205 DirLang.getDirectivePrefix());
1208 GenerateGetKind(DirLang.getClauses(), OS, "Clause", DirLang,
1209 DirLang.getClausePrefix(),
1213 GenerateGetName(DirLang.getClauses(), OS, "Clause", DirLang,
1214 DirLang.getClausePrefix());
1217 GenerateGetKindClauseVal(DirLang, OS);
1220 GenerateIsAllowedClause(DirLang, OS);
1223 GenerateGetDirectiveAssociation(DirLang, OS);
1226 GenerateGetDirectiveCategory(DirLang, OS);
1229 EmitLeafTable(DirLang, OS, "LeafConstructTable");
1235 const auto DirLang = DirectiveLanguage{Records};
1236 if (DirLang.HasValidityErrors())
1239 EmitDirectivesFlangImpl(DirLang, OS);
1241 GenerateClauseClassMacro(DirLang, OS);
1243 EmitDirectivesBasicImpl(DirLang, OS);