003 File Manager
Current Path:
/usr/src/contrib/llvm-project/clang/utils/TableGen
usr
/
src
/
contrib
/
llvm-project
/
clang
/
utils
/
TableGen
/
📁
..
📄
ASTTableGen.cpp
(5.02 KB)
📄
ASTTableGen.h
(14.83 KB)
📄
ClangASTNodesEmitter.cpp
(7.94 KB)
📄
ClangASTPropertiesEmitter.cpp
(30.37 KB)
📄
ClangAttrEmitter.cpp
(149.44 KB)
📄
ClangCommentCommandInfoEmitter.cpp
(4.21 KB)
📄
ClangCommentHTMLNamedCharacterReferenceEmitter.cpp
(2.84 KB)
📄
ClangCommentHTMLTagsEmitter.cpp
(2.32 KB)
📄
ClangDataCollectorsEmitter.cpp
(513 B)
📄
ClangDiagnosticsEmitter.cpp
(59.2 KB)
📄
ClangOpcodesEmitter.cpp
(10.63 KB)
📄
ClangOpenCLBuiltinEmitter.cpp
(30.56 KB)
📄
ClangOptionDocEmitter.cpp
(13.16 KB)
📄
ClangSACheckersEmitter.cpp
(10.79 KB)
📄
ClangTypeNodesEmitter.cpp
(6.9 KB)
📄
MveEmitter.cpp
(83.2 KB)
📄
NeonEmitter.cpp
(79.2 KB)
📄
SveEmitter.cpp
(42.28 KB)
📄
TableGen.cpp
(17.16 KB)
📄
TableGenBackends.h
(6.59 KB)
Editing: ClangCommentCommandInfoEmitter.cpp
//===--- ClangCommentCommandInfoEmitter.cpp - Generate command lists -----====// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This tablegen backend emits command lists and efficient matchers for command // names that are used in documentation comments. // //===----------------------------------------------------------------------===// #include "TableGenBackends.h" #include "llvm/TableGen/Record.h" #include "llvm/TableGen/StringMatcher.h" #include "llvm/TableGen/TableGenBackend.h" #include <vector> using namespace llvm; void clang::EmitClangCommentCommandInfo(RecordKeeper &Records, raw_ostream &OS) { emitSourceFileHeader("A list of commands useable in documentation " "comments", OS); OS << "namespace {\n" "const CommandInfo Commands[] = {\n"; std::vector<Record *> Tags = Records.getAllDerivedDefinitions("Command"); for (size_t i = 0, e = Tags.size(); i != e; ++i) { Record &Tag = *Tags[i]; OS << " { " << "\"" << Tag.getValueAsString("Name") << "\", " << "\"" << Tag.getValueAsString("EndCommandName") << "\", " << i << ", " << Tag.getValueAsInt("NumArgs") << ", " << Tag.getValueAsBit("IsInlineCommand") << ", " << Tag.getValueAsBit("IsBlockCommand") << ", " << Tag.getValueAsBit("IsBriefCommand") << ", " << Tag.getValueAsBit("IsReturnsCommand") << ", " << Tag.getValueAsBit("IsParamCommand") << ", " << Tag.getValueAsBit("IsTParamCommand") << ", " << Tag.getValueAsBit("IsThrowsCommand") << ", " << Tag.getValueAsBit("IsDeprecatedCommand") << ", " << Tag.getValueAsBit("IsHeaderfileCommand") << ", " << Tag.getValueAsBit("IsEmptyParagraphAllowed") << ", " << Tag.getValueAsBit("IsVerbatimBlockCommand") << ", " << Tag.getValueAsBit("IsVerbatimBlockEndCommand") << ", " << Tag.getValueAsBit("IsVerbatimLineCommand") << ", " << Tag.getValueAsBit("IsDeclarationCommand") << ", " << Tag.getValueAsBit("IsFunctionDeclarationCommand") << ", " << Tag.getValueAsBit("IsRecordLikeDetailCommand") << ", " << Tag.getValueAsBit("IsRecordLikeDeclarationCommand") << ", " << /* IsUnknownCommand = */ "0" << " }"; if (i + 1 != e) OS << ","; OS << "\n"; } OS << "};\n" "} // unnamed namespace\n\n"; std::vector<StringMatcher::StringPair> Matches; for (size_t i = 0, e = Tags.size(); i != e; ++i) { Record &Tag = *Tags[i]; std::string Name = std::string(Tag.getValueAsString("Name")); std::string Return; raw_string_ostream(Return) << "return &Commands[" << i << "];"; Matches.emplace_back(std::move(Name), std::move(Return)); } OS << "const CommandInfo *CommandTraits::getBuiltinCommandInfo(\n" << " StringRef Name) {\n"; StringMatcher("Name", Matches, OS).Emit(); OS << " return nullptr;\n" << "}\n\n"; } static std::string MangleName(StringRef Str) { std::string Mangled; for (unsigned i = 0, e = Str.size(); i != e; ++i) { switch (Str[i]) { default: Mangled += Str[i]; break; case '[': Mangled += "lsquare"; break; case ']': Mangled += "rsquare"; break; case '{': Mangled += "lbrace"; break; case '}': Mangled += "rbrace"; break; case '$': Mangled += "dollar"; break; case '/': Mangled += "slash"; break; } } return Mangled; } void clang::EmitClangCommentCommandList(RecordKeeper &Records, raw_ostream &OS) { emitSourceFileHeader("A list of commands useable in documentation " "comments", OS); OS << "#ifndef COMMENT_COMMAND\n" << "# define COMMENT_COMMAND(NAME)\n" << "#endif\n"; std::vector<Record *> Tags = Records.getAllDerivedDefinitions("Command"); for (size_t i = 0, e = Tags.size(); i != e; ++i) { Record &Tag = *Tags[i]; std::string MangledName = MangleName(Tag.getValueAsString("Name")); OS << "COMMENT_COMMAND(" << MangledName << ")\n"; } }
Upload File
Create Folder