|
|
|
|
@@ -387,7 +387,50 @@ static string shiftLines(const string &in, const map<string, const FileInfo*> &m
|
|
|
|
|
return newStr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int dumpErrors(const vector<FileInfo>& listOfProject, const vector<string>& errors)
|
|
|
|
|
static void addMessage(const string& in, const map<string, const FileInfo*>& mapOfFiles,
|
|
|
|
|
const FileInfo* currF, map<string, vector<Messages>>& messages, typeMessage type)
|
|
|
|
|
{
|
|
|
|
|
int byNum = 0;
|
|
|
|
|
|
|
|
|
|
auto it = in.find("on line ");
|
|
|
|
|
if (it != string::npos)
|
|
|
|
|
it += strlen("on line ");
|
|
|
|
|
|
|
|
|
|
int line = 0;
|
|
|
|
|
sscanf(in.c_str() + it, "%d", &line);
|
|
|
|
|
|
|
|
|
|
auto it1 = in.find("of", it + 1);
|
|
|
|
|
if (it1 == string::npos)
|
|
|
|
|
return;
|
|
|
|
|
it1 += 3;
|
|
|
|
|
|
|
|
|
|
string fileN = in.substr(it1, in.find(':', it1) - it1);
|
|
|
|
|
auto itF = mapOfFiles.find(fileN);
|
|
|
|
|
if (itF != mapOfFiles.end() && itF->second != currF)
|
|
|
|
|
{
|
|
|
|
|
byNum = itF->second->includesAdded;
|
|
|
|
|
if (byNum != 0)
|
|
|
|
|
{
|
|
|
|
|
if (line - byNum <= 0)
|
|
|
|
|
{
|
|
|
|
|
//return in;
|
|
|
|
|
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
line -= byNum;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const string newStr = in.substr(0, it) + std::to_string(line) + in.substr(in.find(' ', it + 1));
|
|
|
|
|
|
|
|
|
|
wstring messageE, messageR;
|
|
|
|
|
__spf_printToLongBuf(messageE, L"%s", to_wstring(newStr).c_str());
|
|
|
|
|
__spf_printToLongBuf(messageR, L"%s", to_wstring(newStr).c_str());
|
|
|
|
|
|
|
|
|
|
messages[fileN].push_back(Messages(type, line, messageR, messageE, 6000));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int dumpErrors(const vector<FileInfo>& listOfProject, const vector<string>& errors, map<string, vector<Messages>>& messages)
|
|
|
|
|
{
|
|
|
|
|
int errorsCount = 0;
|
|
|
|
|
map<string, const FileInfo*> mapOfFiles;
|
|
|
|
|
@@ -420,9 +463,13 @@ static int dumpErrors(const vector<FileInfo>& listOfProject, const vector<string
|
|
|
|
|
for (auto& elem : splited)
|
|
|
|
|
{
|
|
|
|
|
if (elem.find("Warning 308") != string::npos)
|
|
|
|
|
{
|
|
|
|
|
addMessage(elem, mapOfFiles, &file, messages, WARR);
|
|
|
|
|
outS += shiftLines(elem, mapOfFiles, &file) + "\n";
|
|
|
|
|
}
|
|
|
|
|
else if (elem.find("Error") != string::npos)
|
|
|
|
|
{
|
|
|
|
|
addMessage(elem, mapOfFiles, &file, messages, ERROR);
|
|
|
|
|
errS += shiftLines(elem, mapOfFiles, &file) + "\n";
|
|
|
|
|
errorsCount++;
|
|
|
|
|
}
|
|
|
|
|
@@ -652,7 +699,7 @@ static int parseFiles(vector<string>& errors, vector<FileInfo>& listOfProject, v
|
|
|
|
|
return rethrow;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int parseFiles(const char* proj, vector<string>& filesCompilationOrder, int parseForInlining)
|
|
|
|
|
int parseFiles(const char* proj, vector<string>& filesCompilationOrder, int parseForInlining, map<string, vector<Messages>>& messages)
|
|
|
|
|
{
|
|
|
|
|
FILE* list = fopen(proj, "r");
|
|
|
|
|
if (!list)
|
|
|
|
|
@@ -723,7 +770,7 @@ int parseFiles(const char* proj, vector<string>& filesCompilationOrder, int pars
|
|
|
|
|
vector<string> errors;
|
|
|
|
|
|
|
|
|
|
int rethrow = parseFiles(errors, listOfProject, filesCompilationOrder, parseForInlining);
|
|
|
|
|
int errCount = dumpErrors(listOfProject, errors);
|
|
|
|
|
int errCount = dumpErrors(listOfProject, errors, messages);
|
|
|
|
|
|
|
|
|
|
if (rethrow != 0)
|
|
|
|
|
throw rethrow;
|
|
|
|
|
@@ -732,6 +779,8 @@ int parseFiles(const char* proj, vector<string>& filesCompilationOrder, int pars
|
|
|
|
|
|
|
|
|
|
void parseFiles(int argc, char** argv)
|
|
|
|
|
{
|
|
|
|
|
map<string, vector<Messages>> messages;
|
|
|
|
|
|
|
|
|
|
bool isInline = false;
|
|
|
|
|
auto result = splitCommandLineForParse(argv, argc, isInline);
|
|
|
|
|
if (result.second.size() == 0)
|
|
|
|
|
|