forked from qt-creator/qt-creator
[C++] Rewrite of the preprocessor.
This rewrite fixes a couple of issues with the pre-processor. It now supports: - macros in macro bodies - stringification of parameters [cpp.stringize] - the concatenation operator [cpp.concat] - #include MACRO_HERE - defined() inside macro bodies used in pp-conditions. Change-Id: Ifdb78041fb6afadf44f939a4bd66ce2832b8601f Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
This commit is contained in:
45
src/libs/cplusplus/PPToken.cpp
Normal file
45
src/libs/cplusplus/PPToken.cpp
Normal file
@@ -0,0 +1,45 @@
|
||||
#include "PPToken.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
using namespace CPlusPlus::Internal;
|
||||
|
||||
ByteArrayRef::ByteArrayRef()
|
||||
: m_ref(0)
|
||||
, m_offset(0)
|
||||
, m_length(0)
|
||||
{}
|
||||
|
||||
bool ByteArrayRef::startsWith(const char *s) const
|
||||
{
|
||||
int l = std::strlen(s);
|
||||
if (l > m_length)
|
||||
return false;
|
||||
return !qstrncmp(start(), s, l);
|
||||
}
|
||||
|
||||
int ByteArrayRef::count(char ch) const
|
||||
{
|
||||
if (!m_ref)
|
||||
return 0;
|
||||
|
||||
int num = 0;
|
||||
const char *b = start();
|
||||
const char *i = b + m_length;
|
||||
while (i != b)
|
||||
if (*--i == ch)
|
||||
++num;
|
||||
return num;
|
||||
}
|
||||
|
||||
PPToken::PPToken()
|
||||
{}
|
||||
|
||||
void PPToken::squeeze()
|
||||
{
|
||||
if (isValid()) {
|
||||
m_src = m_src.mid(offset, length());
|
||||
m_src.squeeze();
|
||||
offset = 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user