================ @@ -0,0 +1,209 @@ +//===- WPASuite.cpp -------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "JSONFormatImpl.h" + +#include "clang/ScalableStaticAnalysisFramework/Core/WholeProgramAnalysis/WPASuite.h" + +namespace clang::ssaf { + +//---------------------------------------------------------------------------- +// AnalysisResultMapEntry +//---------------------------------------------------------------------------- + +llvm::Expected<std::pair<AnalysisName, std::unique_ptr<AnalysisResult>>> +JSONFormat::analysisResultMapEntryFromJSON(const Object &Entry) const { + auto OptName = Entry.getString("analysis_name"); + if (!OptName) { + return ErrorBuilder::create(std::errc::invalid_argument, + ErrorMessages::FailedToReadObjectAtField, + "AnalysisName", "analysis_name", "string") + .build(); + } + + AnalysisName Name = analysisNameFromJSON(*OptName); + + auto ExpectedFns = AnalysisResultRegistry::lookup(Name); + if (!ExpectedFns) { + return ExpectedFns.takeError(); + } + + const Object *ResultObj = Entry.getObject("result"); + if (!ResultObj) { + return ErrorBuilder::create(std::errc::invalid_argument, + ErrorMessages::FailedToReadObjectAtField, + "AnalysisResult", "result", "object") + .build(); + } + + auto ExpectedResult = + ExpectedFns->second(*ResultObj, &entityIdFromJSONObject); + if (!ExpectedResult) { + return ExpectedResult.takeError(); + } + + return std::make_pair(std::move(Name), std::move(*ExpectedResult)); +} + +llvm::Expected<Object> JSONFormat::analysisResultMapEntryToJSON( + const AnalysisName &Name, + const std::unique_ptr<AnalysisResult> &Result) const { + auto ExpectedFns = AnalysisResultRegistry::lookup(Name); + if (!ExpectedFns) { + return ExpectedFns.takeError(); + } + + Object Entry; + Entry["analysis_name"] = analysisNameToJSON(Name); + Entry["result"] = ExpectedFns->first(*Result, &entityIdToJSONObject); + return Entry; +} + +//---------------------------------------------------------------------------- +// AnalysisResultMap +//---------------------------------------------------------------------------- + +llvm::Expected<std::map<AnalysisName, std::unique_ptr<AnalysisResult>>> +JSONFormat::analysisResultMapFromJSON(const Array &ResultsArray) const { + std::map<AnalysisName, std::unique_ptr<AnalysisResult>> Results; + for (size_t I = 0; I < ResultsArray.size(); ++I) { + const Object *Entry = ResultsArray[I].getAsObject(); ---------------- aviralg wrote:
Fixed. https://github.com/llvm/llvm-project/pull/187403 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
