Skip to content
Snippets Groups Projects
Commit 656d70fa authored by Roberto Raggi's avatar Roberto Raggi
Browse files

Introduced expandFunctionLikeMacro().

parent 6670cf1f
No related branches found
No related tags found
No related merge requests found
......@@ -694,8 +694,6 @@ void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &sour
_result->append("\\\n");
else if (_dot->whitespace) {
TokenIterator begin = _tokens.constBegin();
const unsigned endOfPreviousToken = (_dot - 1)->end();
const unsigned beginOfToken = _dot->begin();
......@@ -814,26 +812,10 @@ void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &sour
if (_dot->isNot(T_RPAREN)) {
// ### warning expected T_RPAREN
} else {
const char *beginOfText = startOfToken(*identifierToken);
const char *endOfText = endOfToken(*_dot);
++_dot; // skip T_RPAREN
if (client) {
const QByteArray text =
QByteArray::fromRawData(beginOfText,
endOfText - beginOfText);
client->startExpandingMacro(identifierToken->offset,
*m, text);
}
expand(beginOfText, endOfText, _result);
if (client)
client->stopExpandingMacro(_dot->offset, *m);
}
else
expandFunctionLikeMacro(identifierToken, m);
}
}
}
......@@ -846,6 +828,27 @@ void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &sour
_result = previousResult;
}
void Preprocessor::expandFunctionLikeMacro(TokenIterator identifierToken, Macro *m)
{
const char *beginOfText = startOfToken(*identifierToken);
const char *endOfText = endOfToken(*_dot);
++_dot; // skip T_RPAREN
if (client) {
const QByteArray text =
QByteArray::fromRawData(beginOfText,
endOfText - beginOfText);
client->startExpandingMacro(identifierToken->offset,
*m, text);
}
expand(beginOfText, endOfText, _result);
if (client)
client->stopExpandingMacro(_dot->offset, *m);
}
const char *Preprocessor::startOfToken(const Token &token) const
{ return _source.constBegin() + token.begin(); }
......
......@@ -104,6 +104,7 @@ private:
QByteArray expand(const QByteArray &source);
void expand(const QByteArray &source, QByteArray *result);
void expand(const char *first, const char *last, QByteArray *result);
void expandFunctionLikeMacro(TokenIterator identifierToken, Macro *m);
void resetIfLevel();
bool testIfLevel();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment