Enhance data stored for macros and macro uses.

In preparation for finding macro uses.

* Macro: add offset and length
* MacroUse: add line
* Document: add convenience functions for finding a macro definition, use
  or undefined use at a given location.

Reviewed-by: Erik Verbruggen
This commit is contained in:
Christian Kamm
2009-12-21 14:47:22 +01:00
parent 6c27faf0fc
commit c3cc7cf4d8
7 changed files with 72 additions and 17 deletions

View File

@@ -73,7 +73,8 @@ public:
void appendMacro(const Macro &macro);
void addMacroUse(const Macro &macro, unsigned offset, unsigned length,
const QVector<MacroArgumentReference> &range, bool inCondition);
unsigned beginLine, const QVector<MacroArgumentReference> &range,
bool inCondition);
void addUndefinedMacroUse(const QByteArray &name, unsigned offset);
Control *control() const;
@@ -234,14 +235,15 @@ public:
Macro _macro;
QVector<Block> _arguments;
bool _inCondition;
unsigned _beginLine;
public:
inline MacroUse(const Macro &macro,
unsigned begin = 0,
unsigned end = 0)
unsigned begin, unsigned end, unsigned beginLine)
: Block(begin, end),
_macro(macro),
_inCondition(false)
_inCondition(false),
_beginLine(beginLine)
{ }
const Macro &macro() const
@@ -256,6 +258,9 @@ public:
bool isInCondition() const
{ return _inCondition; }
unsigned beginLine() const
{ return _beginLine; }
private:
void setArguments(const QVector<Block> &arguments)
{ _arguments = arguments; }
@@ -275,7 +280,7 @@ public:
public:
inline UndefinedMacroUse(
const QByteArray &name,
unsigned begin = 0)
unsigned begin)
: Block(begin, begin + name.length()),
_name(name)
{ }
@@ -298,6 +303,10 @@ public:
QList<UndefinedMacroUse> undefinedMacroUses() const
{ return _undefinedMacroUses; }
const Macro *findMacroDefinitionAt(unsigned line) const;
const MacroUse *findMacroUseAt(unsigned offset) const;
const UndefinedMacroUse *findUndefinedMacroUseAt(unsigned offset) const;
private:
Symbol *findSymbolAt(unsigned line, unsigned column, Scope *scope) const;