3939#include " clang/Serialization/ASTReader.h"
4040#include " clang/Serialization/GlobalModuleIndex.h"
4141#include " clang/Summary/SummaryContext.h"
42+ #include " clang/Summary/SummarySerialization.h"
4243#include " llvm/ADT/ScopeExit.h"
4344#include " llvm/ADT/StringRef.h"
4445#include " llvm/Support/BuryPointer.h"
@@ -970,6 +971,9 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
970971 if (ProcessesSummaries && !CI.hasSummaryContext ())
971972 CI.createSummaryContext ();
972973
974+ if (ProcessesSummaries && !CI.hasSummarySerializer ())
975+ CI.createSummarySerializer ();
976+
973977 // FIXME: cleanup and lookup dirs recursively
974978 if (!CI.getFrontendOpts ().SummaryDirPath .empty ()) {
975979 // FIXME: this is a quick shortcut so large summaries are only evaluated
@@ -995,7 +999,7 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
995999 for (llvm::vfs::directory_iterator Dir = FS.dir_begin (DirNative, EC),
9961000 DirEnd;
9971001 Dir != DirEnd && !EC; Dir.increment (EC)) {
998- if (llvm::sys::path::extension (Dir->path ()) != " .yaml " )
1002+ if (llvm::sys::path::extension (Dir->path ()) != " .json " )
9991003 continue ;
10001004
10011005 paths.emplace_back (Dir->path ().str ());
@@ -1007,31 +1011,16 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
10071011 std::stringstream buffer;
10081012 buffer << t.rdbuf ();
10091013
1010- llvm::outs () << buffer.str () << ' \n ' ;
1011-
1012- CI.getSummaryContext ().ParseSummaryFromYAML (buffer.str ());
1013-
1014-
1015- // auto JSON = llvm::json::parse(buffer.str());
1016- // if (!!JSON)
1017- // CI.getSummaryContext().ParseSummaryFromJSON(*JSON->getAsArray());
1018-
1019- // llvm::handleAllErrors(
1020- // JSON.takeError(),
1021- // [](const llvm::ErrorInfoBase &EI) { std::ignore = EI.message(); });
1014+ CI.getSummarySerializer ().parse (buffer.str ());
10221015 }
10231016
10241017 CI.getSummaryContext ().ReduceSummaries ();
10251018
10261019 if (!FS.exists (cacheFile)) {
10271020 // FIXME: very quick printing of the summary to the cache file
10281021 llvm::raw_fd_ostream fd (cacheFile, EC, llvm::sys::fs::CD_CreateAlways);
1029-
1030- JSONPrintingSummaryConsumer printer (CI.getSummaryContext (), fd);
1031- printer.ProcessStartOfSourceFile ();
1032- for (auto &&Summary : CI.getSummaryContext ().FunctionSummaries )
1033- printer.ProcessFunctionSummary (*Summary);
1034- printer.ProcessEndOfSourceFile ();
1022+ CI.getSummarySerializer ().serialize (
1023+ CI.getSummaryContext ().FunctionSummaries , fd);
10351024 }
10361025 }
10371026 }
0 commit comments