Author: sammccall Date: Fri Jul 6 04:50:49 2018 New Revision: 336431 URL: http://llvm.org/viewvc/llvm-project?rev=336431&view=rev Log: [clangd] Make SymbolOrigin an enum class, rather than a plain enum.
I never intended to define namespace pollution like clangd::AST, clangd::Unknown etc. Oops! Modified: clang-tools-extra/trunk/clangd/CodeComplete.cpp clang-tools-extra/trunk/clangd/index/Index.cpp clang-tools-extra/trunk/clangd/index/Index.h clang-tools-extra/trunk/clangd/index/Merge.cpp clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp Modified: clang-tools-extra/trunk/clangd/CodeComplete.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/CodeComplete.cpp?rev=336431&r1=336430&r2=336431&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/CodeComplete.cpp (original) +++ clang-tools-extra/trunk/clangd/CodeComplete.cpp Fri Jul 6 04:50:49 2018 @@ -268,8 +268,7 @@ struct CodeCompletionBuilder { : ASTCtx(ASTCtx), ExtractDocumentation(Opts.IncludeComments) { add(C, SemaCCS); if (C.SemaResult) { - Completion.Origin = - static_cast<SymbolOrigin>(Completion.Origin | SymbolOrigin::AST); + Completion.Origin |= SymbolOrigin::AST; Completion.Name = llvm::StringRef(SemaCCS->getTypedText()); if (Completion.Scope.empty()) if (C.SemaResult->Kind == CodeCompletionResult::RK_Declaration) @@ -281,8 +280,7 @@ struct CodeCompletionBuilder { toCompletionItemKind(C.SemaResult->Kind, C.SemaResult->Declaration); } if (C.IndexResult) { - Completion.Origin = - static_cast<SymbolOrigin>(Completion.Origin | C.IndexResult->Origin); + Completion.Origin |= C.IndexResult->Origin; if (Completion.Scope.empty()) Completion.Scope = C.IndexResult->Scope; if (Completion.Kind == CompletionItemKind::Missing) @@ -1156,17 +1154,18 @@ private: else return; SymbolOrigin Origin = SymbolOrigin::Unknown; + bool FromIndex = false; for (const auto &Candidate : Bundle) { if (Candidate.IndexResult) { Quality.merge(*Candidate.IndexResult); Relevance.merge(*Candidate.IndexResult); - Origin = - static_cast<SymbolOrigin>(Origin | Candidate.IndexResult->Origin); + Origin |= Candidate.IndexResult->Origin; + FromIndex = true; } if (Candidate.SemaResult) { Quality.merge(*Candidate.SemaResult); Relevance.merge(*Candidate.SemaResult); - Origin = static_cast<SymbolOrigin>(Origin | SymbolOrigin::AST); + Origin |= SymbolOrigin::AST; } } @@ -1184,8 +1183,8 @@ private: << Quality << Relevance << "\n"); NSema += bool(Origin & SymbolOrigin::AST); - NIndex += bool(Origin & ~SymbolOrigin::AST); - NBoth += (Origin & SymbolOrigin::AST) && (Origin & ~SymbolOrigin::AST); + NIndex += FromIndex; + NBoth += bool(Origin & SymbolOrigin::AST) && FromIndex; if (Candidates.push({std::move(Bundle), Scores})) Incomplete = true; } Modified: clang-tools-extra/trunk/clangd/index/Index.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Index.cpp?rev=336431&r1=336430&r2=336431&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/index/Index.cpp (original) +++ clang-tools-extra/trunk/clangd/index/Index.cpp Fri Jul 6 04:50:49 2018 @@ -49,7 +49,7 @@ raw_ostream &operator<<(raw_ostream &OS, return OS << "unknown"; constexpr static char Sigils[] = "ADSM4567"; for (unsigned I = 0; I < sizeof(Sigils); ++I) - if (O & static_cast<SymbolOrigin>(1 << I)) + if (static_cast<uint8_t>(O) & 1u << I) OS << Sigils[I]; return OS; } Modified: clang-tools-extra/trunk/clangd/index/Index.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Index.h?rev=336431&r1=336430&r2=336431&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/index/Index.h (original) +++ clang-tools-extra/trunk/clangd/index/Index.h Fri Jul 6 04:50:49 2018 @@ -120,7 +120,7 @@ namespace clangd { // Describes the source of information about a symbol. // Mainly useful for debugging, e.g. understanding code completion reuslts. // This is a bitfield as information can be combined from several sources. -enum SymbolOrigin : uint8_t { +enum class SymbolOrigin : uint8_t { Unknown = 0, AST = 1 << 0, // Directly from the AST (indexes should not set this). Dynamic = 1 << 1, // From the dynamic index of opened files. @@ -128,6 +128,17 @@ enum SymbolOrigin : uint8_t { Merge = 1 << 3, // A non-trivial index merge was performed. // Remaining bits reserved for index implementations. }; +inline SymbolOrigin operator|(SymbolOrigin A, SymbolOrigin B) { + return static_cast<SymbolOrigin>(static_cast<uint8_t>(A) | + static_cast<uint8_t>(B)); +} +inline SymbolOrigin &operator|=(SymbolOrigin &A, SymbolOrigin B) { + return A = A | B; +} +inline SymbolOrigin operator&(SymbolOrigin A, SymbolOrigin B) { + return static_cast<SymbolOrigin>(static_cast<uint8_t>(A) & + static_cast<uint8_t>(B)); +} raw_ostream &operator<<(raw_ostream &, SymbolOrigin); // The class presents a C++ symbol, e.g. class, function. @@ -171,7 +182,7 @@ struct Symbol { /// See also isIndexedForCodeCompletion(). bool IsIndexedForCodeCompletion = false; /// Where this symbol came from. Usually an index provides a constant value. - SymbolOrigin Origin = Unknown; + SymbolOrigin Origin = SymbolOrigin::Unknown; /// A brief description of the symbol that can be appended in the completion /// candidate list. For example, "(X x, Y y) const" is a function signature. llvm::StringRef Signature; Modified: clang-tools-extra/trunk/clangd/index/Merge.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Merge.cpp?rev=336431&r1=336430&r2=336431&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/index/Merge.cpp (original) +++ clang-tools-extra/trunk/clangd/index/Merge.cpp Fri Jul 6 04:50:49 2018 @@ -116,8 +116,7 @@ mergeSymbol(const Symbol &L, const Symbo S.Detail = O.Detail; } - S.Origin = - static_cast<SymbolOrigin>(S.Origin | O.Origin | SymbolOrigin::Merge); + S.Origin |= O.Origin | SymbolOrigin::Merge; return S; } Modified: clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp?rev=336431&r1=336430&r2=336431&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp (original) +++ clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp Fri Jul 6 04:50:49 2018 @@ -1257,8 +1257,7 @@ TEST(CompletionTest, Render) { C.Header = "\"foo.h\""; C.Kind = CompletionItemKind::Method; C.Score.Total = 1.0; - C.Origin = - static_cast<SymbolOrigin>(SymbolOrigin::AST | SymbolOrigin::Static); + C.Origin = SymbolOrigin::AST | SymbolOrigin::Static; CodeCompleteOptions Opts; Opts.IncludeIndicator.Insert = "^"; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits