Fixed macro locations.

This commit is contained in:
Roberto Raggi
2008-12-09 16:19:56 +01:00
parent a4ed1bc9df
commit 9653f4b7e9
5 changed files with 16 additions and 14 deletions

View File

@@ -481,12 +481,12 @@ void pp::operator () (const QByteArray &filename,
const QByteArray &source, const QByteArray &source,
QByteArray *result) QByteArray *result)
{ {
const QByteArray previousFile = env.current_file; const QByteArray previousFile = env.currentFile;
env.current_file = filename; env.currentFile = filename;
operator () (source, result); operator () (source, result);
env.current_file = previousFile; env.currentFile = previousFile;
} }
pp::State pp::createStateFromSource(const QByteArray &source) const pp::State pp::createStateFromSource(const QByteArray &source) const
@@ -518,7 +518,7 @@ void pp::operator()(const QByteArray &source, QByteArray *result)
result->append(QByteArray::number(_dot->lineno)); result->append(QByteArray::number(_dot->lineno));
result->append(' '); result->append(' ');
result->append('"'); result->append('"');
result->append(env.current_file); result->append(env.currentFile);
result->append('"'); result->append('"');
result->append('\n'); result->append('\n');
} else { } else {
@@ -844,6 +844,8 @@ void pp::processDefine(TokenIterator firstToken, TokenIterator lastToken)
} }
Macro macro; Macro macro;
macro.fileName = env.currentFile;
macro.line = env.currentLine;
macro.name = tokenText(*tk); macro.name = tokenText(*tk);
++tk; // skip T_IDENTIFIER ++tk; // skip T_IDENTIFIER

View File

@@ -97,8 +97,6 @@ Macro *Environment::bind(const Macro &__macro)
Macro *m = new Macro (__macro); Macro *m = new Macro (__macro);
m->hashcode = hash_code(m->name); m->hashcode = hash_code(m->name);
m->fileName = current_file;
m->line = currentLine;
if (++_macro_count == _allocated_macros) { if (++_macro_count == _allocated_macros) {
if (! _allocated_macros) if (! _allocated_macros)
@@ -122,11 +120,13 @@ Macro *Environment::bind(const Macro &__macro)
return m; return m;
} }
Macro *Environment::remove (const QByteArray &name) Macro *Environment::remove(const QByteArray &name)
{ {
Macro macro; Macro macro;
macro.name = name; macro.name = name;
macro.hidden = true; macro.hidden = true;
macro.fileName = currentFile;
macro.line = currentLine;
return bind(macro); return bind(macro);
} }

View File

@@ -94,7 +94,7 @@ private:
void rehash(); void rehash();
public: public:
QByteArray current_file; QByteArray currentFile;
unsigned currentLine; unsigned currentLine;
bool hide_next; bool hide_next;

View File

@@ -73,7 +73,7 @@ const char *MacroExpander::operator () (const char *__first, const char *__last,
__result->append(QByteArray::number(env.currentLine)); __result->append(QByteArray::number(env.currentLine));
__result->append(' '); __result->append(' ');
__result->append('"'); __result->append('"');
__result->append(env.current_file); __result->append(env.currentFile);
__result->append('"'); __result->append('"');
__result->append('\n'); __result->append('\n');
++lines; ++lines;
@@ -218,7 +218,7 @@ const char *MacroExpander::operator () (const char *__first, const char *__last,
else if (fast_name == "__FILE__") else if (fast_name == "__FILE__")
{ {
__result->append('"'); __result->append('"');
__result->append(env.current_file); __result->append(env.currentFile);
__result->append('"'); __result->append('"');
continue; continue;
} }

View File

@@ -390,17 +390,17 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type)
} else { } else {
Document::Ptr previousDoc = switchDocument(Document::create(fileName)); Document::Ptr previousDoc = switchDocument(Document::create(fileName));
const QByteArray previousFile = env.current_file; const QByteArray previousFile = env.currentFile;
const unsigned previousLine = env.currentLine; const unsigned previousLine = env.currentLine;
env.current_file = QByteArray(m_currentDoc->translationUnit()->fileName(), env.currentFile = QByteArray(m_currentDoc->translationUnit()->fileName(),
m_currentDoc->translationUnit()->fileNameLength()); m_currentDoc->translationUnit()->fileNameLength());
QByteArray preprocessedCode; QByteArray preprocessedCode;
m_proc(contents, &preprocessedCode); m_proc(contents, &preprocessedCode);
//qDebug() << preprocessedCode; //qDebug() << preprocessedCode;
env.current_file = previousFile; env.currentFile = previousFile;
env.currentLine = previousLine; env.currentLine = previousLine;
m_currentDoc->setSource(preprocessedCode); m_currentDoc->setSource(preprocessedCode);