Preprocessor: Minor fixes (#772)
This commit is contained in:
parent
6b1fae75e5
commit
ab18f1bd3c
|
@ -452,16 +452,35 @@ std::string Preprocessor::removeParantheses(const std::string &str)
|
|||
std::string line;
|
||||
while (std::getline(istr, line))
|
||||
{
|
||||
if (line.substr(0, 3) == "#if")
|
||||
if (line.substr(0, 3) == "#if" || line.substr(0, 5) == "#elif")
|
||||
{
|
||||
while (line.find(" (") != std::string::npos)
|
||||
line.erase(line.find(" ("), 1);
|
||||
while (line.find("( ") != std::string::npos)
|
||||
line.erase(line.find("( ") + 1, 1);
|
||||
while (line.find(" )") != std::string::npos)
|
||||
line.erase(line.find(" )"), 1);
|
||||
while (line.find(") ") != std::string::npos)
|
||||
line.erase(line.find(") ") + 1, 1);
|
||||
std::string::size_type pos;
|
||||
pos = 0;
|
||||
while ((pos = line.find(" (", pos)) != std::string::npos)
|
||||
line.erase(pos, 1);
|
||||
pos = 0;
|
||||
while ((pos = line.find("( ", pos)) != std::string::npos)
|
||||
line.erase(pos + 1, 1);
|
||||
pos = 0;
|
||||
while ((pos = line.find(" )", pos)) != std::string::npos)
|
||||
line.erase(pos, 1);
|
||||
pos = 0;
|
||||
while ((pos = line.find(") ", pos)) != std::string::npos)
|
||||
line.erase(pos + 1, 1);
|
||||
|
||||
// Remove inner paranthesis "((..))"..
|
||||
pos = 0;
|
||||
while ((pos = line.find("((", pos)) != std::string::npos)
|
||||
{
|
||||
++pos;
|
||||
std::string::size_type pos2 = line.find_first_of("()", pos + 1);
|
||||
if (pos2 != std::string::npos && line[pos2] == ')')
|
||||
{
|
||||
line.erase(pos2, 1);
|
||||
line.erase(pos, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (line.substr(0, 4) == "#if(" && line.find(")") == line.length() - 1)
|
||||
{
|
||||
line[3] = ' ';
|
||||
|
@ -595,6 +614,20 @@ std::string Preprocessor::replaceIfDefined(const std::string &str)
|
|||
++pos;
|
||||
}
|
||||
|
||||
pos = 0;
|
||||
while ((pos = ret.find("#elif defined(", pos)) != std::string::npos)
|
||||
{
|
||||
std::string::size_type pos2 = ret.find(")", pos + 9);
|
||||
if (pos2 > ret.length() - 1)
|
||||
break;
|
||||
if (ret[pos2+1] == '\n')
|
||||
{
|
||||
ret.erase(pos2, 1);
|
||||
ret.erase(pos + 6, 8);
|
||||
}
|
||||
++pos;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -344,13 +344,15 @@ private:
|
|||
{
|
||||
const char filedata[] = "#if(A)\n"
|
||||
"#if ( A ) \n"
|
||||
"#if A\n";
|
||||
"#if A\n"
|
||||
"#if defined((A))\n"
|
||||
"#elif defined (A)\n";
|
||||
|
||||
std::istringstream istr(filedata);
|
||||
const std::string actual(Preprocessor::read(istr));
|
||||
|
||||
// Compare results..
|
||||
ASSERT_EQUALS("#if A\n#if A\n#if A\n", actual);
|
||||
ASSERT_EQUALS("#if A\n#if A\n#if A\n#if defined(A)\n#elif defined(A)\n", actual);
|
||||
}
|
||||
|
||||
void test7()
|
||||
|
@ -777,12 +779,18 @@ private:
|
|||
}
|
||||
|
||||
void if_defined()
|
||||
{
|
||||
{
|
||||
const char filedata[] = "#if defined(AAA)\n"
|
||||
"#endif\n";
|
||||
ASSERT_EQUALS("#ifdef AAA\n#endif\n", OurPreprocessor::replaceIfDefined(filedata));
|
||||
}
|
||||
|
||||
{
|
||||
ASSERT_EQUALS("#elif A\n", OurPreprocessor::replaceIfDefined("#elif defined(A)\n"));
|
||||
}
|
||||
}
|
||||
|
||||
void if_not_defined()
|
||||
{
|
||||
const char filedata[] = "#if !defined(AAA)\n"
|
||||
|
|
Loading…
Reference in New Issue