diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2009-09-25 16:00:14 +0200 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2009-09-25 16:08:01 +0200 |
commit | 22ed0255b97ff52d808ebd93fabe06e214b56d2d (patch) | |
tree | 40dc79d131d6b13a8360ff8e68e7ab6119557d1f /src/libs/cplusplus/pp-macro-expander.cpp | |
parent | 90470771fd58722a6a82b3da28bfaa645b250216 (diff) | |
download | qt-creator-22ed0255b97ff52d808ebd93fabe06e214b56d2d.tar.gz |
Track more macro uses.
In particular macros that are only checked for definition or are
expanded during the evaluation of an #if or #elif directive are now also
added to the list available through Document::macroUses().
The names of undefined macros that are interesting (because they're used
in an #ifdef or a defined(...)) are now available through
Document::undefinedMacroUses().
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Diffstat (limited to 'src/libs/cplusplus/pp-macro-expander.cpp')
-rw-r--r-- | src/libs/cplusplus/pp-macro-expander.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/libs/cplusplus/pp-macro-expander.cpp b/src/libs/cplusplus/pp-macro-expander.cpp index 4902158c76..42be634562 100644 --- a/src/libs/cplusplus/pp-macro-expander.cpp +++ b/src/libs/cplusplus/pp-macro-expander.cpp @@ -66,9 +66,11 @@ inline static bool comment_p (const char *__first, const char *__last) return (*__first == '/' || *__first == '*'); } -MacroExpander::MacroExpander(Environment *env, pp_frame *frame) +MacroExpander::MacroExpander(Environment *env, pp_frame *frame, Client *client, unsigned start_offset) : env(env), frame(frame), + client(client), + start_offset(start_offset), lines(0) { } @@ -97,6 +99,7 @@ const char *MacroExpander::operator()(const char *first, const char *last, const char *MacroExpander::expand(const char *__first, const char *__last, QByteArray *__result) { + const char *start = __first; __first = skip_blanks (__first, __last); lines = skip_blanks.lines; @@ -284,6 +287,9 @@ const char *MacroExpander::expand(const char *__first, const char *__last, if (! macro->definition().isEmpty()) { + if (client) + client->startExpandingMacro(start_offset + (name_begin-start), *macro, fast_name, true); + macro->setHidden(true); QByteArray __tmp; @@ -310,6 +316,9 @@ const char *MacroExpander::expand(const char *__first, const char *__last, } macro->setHidden(false); + + if (client) + client->stopExpandingMacro(start_offset + (name_begin-start), *macro); } if (! m) @@ -330,6 +339,7 @@ const char *MacroExpander::expand(const char *__first, const char *__last, } QVector<QByteArray> actuals; + QVector<MacroArgumentReference> actuals_ref; actuals.reserve (5); ++arg_it; // skip '(' @@ -338,6 +348,7 @@ const char *MacroExpander::expand(const char *__first, const char *__last, const char *arg_end = skip_argument_variadics (actuals, macro, arg_it, __last); if (arg_it != arg_end) { + actuals_ref.append(MacroArgumentReference(start_offset + (arg_it-start), arg_end - arg_it)); const QByteArray actual (arg_it, arg_end - arg_it); QByteArray expanded; expand_actual (actual.constBegin (), actual.constEnd (), &expanded); @@ -350,6 +361,7 @@ const char *MacroExpander::expand(const char *__first, const char *__last, ++arg_it; // skip ',' arg_end = skip_argument_variadics (actuals, macro, arg_it, __last); + actuals_ref.append(MacroArgumentReference(start_offset + (arg_it-start), arg_end - arg_it)); const QByteArray actual (arg_it, arg_end - arg_it); QByteArray expanded; expand_actual (actual.constBegin (), actual.constEnd (), &expanded); @@ -363,11 +375,17 @@ const char *MacroExpander::expand(const char *__first, const char *__last, ++arg_it; // skip ')' __first = arg_it; + if (client) + client->startExpandingMacro(start_offset + (name_begin-start), *macro, fast_name, true, actuals_ref); + pp_frame frame (macro, actuals); MacroExpander expand_macro (env, &frame); macro->setHidden(true); expand_macro (macro->definition(), __result); macro->setHidden(false); + + if (client) + client->stopExpandingMacro(start_offset + (name_begin-start), *macro); } else __result->append(*__first++); |