diff --git a/src/Sapfor.cpp b/src/Sapfor.cpp index b7e80b8..13a8a9e 100644 --- a/src/Sapfor.cpp +++ b/src/Sapfor.cpp @@ -331,9 +331,10 @@ static string unparseProjectIfNeed(SgFile* file, const int curr_regime, const bo unparseToBuf = removeIncludeStatsAndUnparse(file, file_name, fout_name.c_str(), allIncludeFiles, out_free_form == 1, moduleUsesByFile, moduleDecls, getObjectForFileFromMap(file_name, exctactedModuleStats), toString, false, true); auto itI = filesToInclude.find(file_name); - for (auto& [_, incl] : itI->second) - if (allIncludeFiles.find(incl) != allIncludeFiles.end()) - allIncludeFiles.erase(incl); + for (auto& [_, incls] : itI->second) + for (auto& incl : incls) + if (allIncludeFiles.find(incl) != allIncludeFiles.end()) + allIncludeFiles.erase(incl); } else { @@ -827,7 +828,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne { auto fileIt = includeDependencies.find(file_name); if (fileIt == includeDependencies.end()) - fileIt = includeDependencies.insert(fileIt, make_pair(file_name, vector>())); + fileIt = includeDependencies.insert(fileIt, make_pair(file_name, map>())); set modFiles; for (auto& elem : moduleDecls) @@ -844,7 +845,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne { if (lastFromFile == NULL) printInternalError(convertFileName(__FILE__).c_str(), __LINE__); - fileIt->second.push_back(make_pair(lastFromFile->lineNumber(), st->fileName())); + fileIt->second[lastFromFile->lineNumber()].insert(st->fileName()); } else lastFromFile = st; @@ -1603,12 +1604,15 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne set includedToThisFile; if (itDep != includeDependencies.end()) { - for (auto& [_, incl] : itDep->second) + for (auto& [_, incls] : itDep->second) { - auto comm = commentsToInclude.find(incl); - if (comm != commentsToInclude.end()) - for (auto &allComm : comm->second) - includedToThisFile.insert(allComm.second.begin(), allComm.second.end()); + for (auto& incl : incls) + { + auto comm = commentsToInclude.find(incl); + if (comm != commentsToInclude.end()) + for (auto& allComm : comm->second) + includedToThisFile.insert(allComm.second.begin(), allComm.second.end()); + } } } diff --git a/src/SapforData.h b/src/SapforData.h index 8a46da9..cfd4f42 100644 --- a/src/SapforData.h +++ b/src/SapforData.h @@ -85,7 +85,7 @@ std::map>> commentsToInclude; // //for INSERT_INCLUDES -std::map>> filesToInclude; // file -> includes [nearest line, include] +std::map>> filesToInclude; // file -> includes [nearest line, include] // //for PASSES DEPENDENSIES @@ -96,7 +96,7 @@ std::set passesIgnoreStateDone; //for files info std::map lineInfo; // file -> lines count std::map, std::set>> dirsInfo; // file -> dirs count -std::map>> includeDependencies; // file -> includes [nearest line, include] +std::map>> includeDependencies; // file -> includes [nearest line, include] std::vector filesCompilationOrder; // order of files for unite to one file std::map>> exctactedModuleStats; // file -> hided excluded modules // diff --git a/src/Utils/version.h b/src/Utils/version.h index ed408b9..c836a7d 100644 --- a/src/Utils/version.h +++ b/src/Utils/version.h @@ -1,3 +1,3 @@ #pragma once -#define VERSION_SPF "2417" +#define VERSION_SPF "2418" diff --git a/src/VisualizerCalls/get_information.cpp b/src/VisualizerCalls/get_information.cpp index 698d970..eb945f3 100644 --- a/src/VisualizerCalls/get_information.cpp +++ b/src/VisualizerCalls/get_information.cpp @@ -1308,7 +1308,7 @@ int SPF_GetIntrinsics(void*& context, short *&result) return (int)resVal.size() + 1; } -extern map>> includeDependencies; +extern map>> includeDependencies; int SPF_GetIncludeDependencies(void*& context, int winHandler, short *options, short *projName, short *&result, short*& output, int*& outputSize, short*& outputMessage, int*& outputMessageSize) { @@ -1328,12 +1328,15 @@ int SPF_GetIncludeDependencies(void*& context, int winHandler, short *options, s includes["file"] = deps.first; json array = json::array(); - for (const auto& [line, incl] : deps.second) + for (const auto& [line, incls] : deps.second) { - json elem; - elem["line"] = line; - elem["dependencyFileName"] = incl; - array.push_back(elem); + for (auto& incl : incls) + { + json elem; + elem["line"] = line; + elem["dependencyFileName"] = incl; + array.push_back(elem); + } } includes["includes"] = array; inc_array.push_back(includes); @@ -2189,7 +2192,7 @@ int SPF_InlineProcedures(void*& context, int winHandler, short* options, short* } -extern map>> filesToInclude; +extern map>> filesToInclude; int SPF_InsertIncludesPass(void*& context, int winHandler, short *options, short *projName, short *folderName, char *visFilesToInclude, short *&output, int *&outputSize, short *&outputMessage, int *&outputMessageSize) { @@ -2222,9 +2225,8 @@ int SPF_InsertIncludesPass(void*& context, int winHandler, short *options, short if (sscanf(splited[k].c_str(), "%d", &line) == -1) return -5; - auto pair = make_pair(line, splited[k + 1]); - filesToInclude[file].push_back(pair); - __spf_print(1, " include = [%d %s]\n", pair.first, pair.second.c_str()); + filesToInclude[file][line].insert(splited[k + 1]); + __spf_print(1, " include = [%d %s]\n", line, splited[k + 1].c_str()); } i += 2 * num; }