preprocessor: make Environment::{resolve,remove} work on ByteArrayRefs only

Change-Id: Idb93d359bd45696a38cb863dcea30c5c377eeabb
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
hjk
2012-04-18 17:44:23 +02:00
committed by hjk
parent 3428240233
commit acf6f8f0cb
8 changed files with 13 additions and 32 deletions

View File

@@ -68,7 +68,7 @@ public:
virtual void startExpandingMacro(unsigned,
const Macro &,
const QByteArray &,
const ByteArrayRef &,
const QVector<MacroArgumentReference> &) {}
virtual void stopExpandingMacro(unsigned, const Macro &) {}

View File

@@ -85,7 +85,7 @@ public:
virtual void startExpandingMacro(unsigned offset,
const Macro &macro,
const QByteArray &originalText,
const ByteArrayRef &originalText,
const QVector<MacroArgumentReference> &actuals
= QVector<MacroArgumentReference>()) = 0;

View File

@@ -123,10 +123,10 @@ void Environment::addMacros(const QList<Macro> &macros)
}
}
Macro *Environment::remove(const QByteArray &name)
Macro *Environment::remove(const ByteArrayRef &name)
{
Macro macro;
macro.setName(name);
macro.setName(name.toByteArray());
macro.setHidden(true);
macro.setFileName(currentFile);
macro.setLine(currentLine);
@@ -220,22 +220,6 @@ Environment::iterator Environment::firstMacro() const
Environment::iterator Environment::lastMacro() const
{ return _macros + _macro_count + 1; }
Macro *Environment::resolve(const QByteArray &name) const
{
if (! _macros)
return 0;
Macro *it = _hash[hashCode(name) % _hash_count];
for (; it; it = it->_next) {
if (it->name() != name)
continue;
else if (it->isHidden())
return 0;
else break;
}
return it;
}
Macro *Environment::resolve(const ByteArrayRef &name) const
{
if (! _macros)

View File

@@ -76,9 +76,7 @@ public:
Macro *macroAt(unsigned index) const;
Macro *bind(const Macro &macro);
Macro *remove(const QByteArray &name);
Macro *resolve(const QByteArray &name) const;
Macro *remove(const ByteArrayRef &name);
Macro *resolve(const ByteArrayRef &name) const;
iterator firstMacro() const;

View File

@@ -795,8 +795,7 @@ bool Preprocessor::handleIdentifier(PPToken *tk)
}
}
const QByteArray macroName = macroNameRef.toByteArray();
Macro *macro = m_env->resolve(macroName);
Macro *macro = m_env->resolve(macroNameRef);
if (!macro)
return false;
if (tk->generated() && m_state.m_tokenBuffer && m_state.m_tokenBuffer->isBlocked(macro))
@@ -804,7 +803,7 @@ bool Preprocessor::handleIdentifier(PPToken *tk)
// qDebug() << "expanding" << macro->name() << "on line" << tk->lineno;
if (m_client && !tk->generated())
m_client->startExpandingMacro(tk->offset, *macro, macroName);
m_client->startExpandingMacro(tk->offset, *macro, macroNameRef);
QVector<PPToken> body = macro->definitionTokens();
if (macro->isFunctionLike()) {
@@ -1470,7 +1469,7 @@ void Preprocessor::handleUndefDirective(PPToken *tk)
lex(tk); // consume "undef" token
if (tk->is(T_IDENTIFIER)) {
const ByteArrayRef macroName = tk->asByteArrayRef();
const Macro *macro = m_env->remove(macroName.toByteArray());
const Macro *macro = m_env->remove(macroName);
if (m_client && macro)
m_client->macroAdded(*macro);