More Fixing of #635 (Preprocessor: remove 'asm(...)')
This commit is contained in:
parent
ed1c9bed49
commit
37dae83e06
|
@ -433,37 +433,57 @@ std::string Preprocessor::removeComments(const std::string &str)
|
||||||
return code.str();
|
return code.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void _removeAsm(std::string &str, const std::string::size_type pos)
|
||||||
|
{
|
||||||
|
unsigned int newlines = 0;
|
||||||
|
bool instr = false;
|
||||||
|
int parlevel = 0;
|
||||||
|
std::string::size_type pos2 = pos + 1;
|
||||||
|
while (pos2 < str.length())
|
||||||
|
{
|
||||||
|
if (str[pos2] == '\"')
|
||||||
|
instr = !instr;
|
||||||
|
|
||||||
|
else if (str[pos2] == '\n')
|
||||||
|
++newlines;
|
||||||
|
|
||||||
|
else if (!instr)
|
||||||
|
{
|
||||||
|
if (str[pos2] == '(')
|
||||||
|
++parlevel;
|
||||||
|
else if (str[pos2] == ')')
|
||||||
|
{
|
||||||
|
if (parlevel <= 1)
|
||||||
|
break;
|
||||||
|
--parlevel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
++pos2;
|
||||||
|
}
|
||||||
|
str.erase(pos + 1, pos2 - pos);
|
||||||
|
str.insert(pos, std::string(newlines, '\n'));
|
||||||
|
}
|
||||||
|
|
||||||
void Preprocessor::removeAsm(std::string &str)
|
void Preprocessor::removeAsm(std::string &str)
|
||||||
{
|
{
|
||||||
std::string::size_type pos = 0;
|
std::string::size_type pos = 0;
|
||||||
while ((pos = str.find("\nasm(", pos)) != std::string::npos)
|
while ((pos = str.find("\nasm(", pos)) != std::string::npos)
|
||||||
{
|
_removeAsm(str, pos);
|
||||||
unsigned int newlines = 0;
|
|
||||||
std::string::size_type pos2 = pos + 5;
|
pos = 0;
|
||||||
while (pos2 < str.length() && str[pos2] != ')')
|
while ((pos = str.find("\nasm (", pos)) != std::string::npos)
|
||||||
{
|
_removeAsm(str, pos);
|
||||||
if (str[pos2] == '\n')
|
|
||||||
++newlines;
|
|
||||||
++pos2;
|
|
||||||
}
|
|
||||||
str.erase(pos + 1, pos2 - pos);
|
|
||||||
str.insert(pos, std::string(newlines, '\n'));
|
|
||||||
}
|
|
||||||
|
|
||||||
pos = 0;
|
pos = 0;
|
||||||
while ((pos = str.find("\nasm __volatile(", pos)) != std::string::npos)
|
while ((pos = str.find("\nasm __volatile(", pos)) != std::string::npos)
|
||||||
{
|
_removeAsm(str, pos);
|
||||||
unsigned int newlines = 0;
|
|
||||||
std::string::size_type pos2 = pos + 5;
|
pos = 0;
|
||||||
while (pos2 < str.length() && str[pos2] != ')')
|
while ((pos = str.find("\nasm __volatile (", pos)) != std::string::npos)
|
||||||
{
|
_removeAsm(str, pos);
|
||||||
if (str[pos2] == '\n')
|
|
||||||
++newlines;
|
|
||||||
++pos2;
|
|
||||||
}
|
|
||||||
str.erase(pos + 1, pos2 - pos);
|
|
||||||
str.insert(pos, std::string(newlines, '\n'));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -770,9 +770,9 @@ private:
|
||||||
Preprocessor::removeAsm(str1);
|
Preprocessor::removeAsm(str1);
|
||||||
ASSERT_EQUALS("\n\n\n\n;", str1);
|
ASSERT_EQUALS("\n\n\n\n;", str1);
|
||||||
|
|
||||||
std::string str2("\nasm __volatile(\n\n\n);");
|
std::string str2("\nasm __volatile(\"\nlw iScale, 0x00(pScale)\n\", ());");
|
||||||
Preprocessor::removeAsm(str2);
|
Preprocessor::removeAsm(str2);
|
||||||
ASSERT_EQUALS("\n\n\n\n;", str2);
|
ASSERT_EQUALS("\n\n\n;", str2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void if_defined()
|
void if_defined()
|
||||||
|
|
Loading…
Reference in New Issue