diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-09-01 17:09:42 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-09-01 17:10:39 +0200 |
commit | 0a3bfc24f84eaeb4bf8b209b1207f7d2e7a2cf2f (patch) | |
tree | 8187419cdb5d1a31bbb89102ff8038137c63bf0b /src/libs/cplusplus/pp-macro-expander.cpp | |
parent | 36a05bb5e367498b35ed6a25fe00c4a028b0ae9d (diff) | |
download | qt-creator-0a3bfc24f84eaeb4bf8b209b1207f7d2e7a2cf2f.tar.gz |
Improved the expansion of variadic macros.
Diffstat (limited to 'src/libs/cplusplus/pp-macro-expander.cpp')
-rw-r--r-- | src/libs/cplusplus/pp-macro-expander.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/libs/cplusplus/pp-macro-expander.cpp b/src/libs/cplusplus/pp-macro-expander.cpp index ab6fe35ced..78904e2227 100644 --- a/src/libs/cplusplus/pp-macro-expander.cpp +++ b/src/libs/cplusplus/pp-macro-expander.cpp @@ -159,8 +159,9 @@ const char *MacroExpander::expand(const char *__first, const char *__last, __result->append('\"'); } - else - __result->append('#'); // ### warning message? + else { + // ### warning message? + } } else if (*__first == '\"') { @@ -211,6 +212,17 @@ const char *MacroExpander::expand(const char *__first, const char *__last, // search for the paste token const char *next = skip_blanks (__first, __last); bool paste = false; + + bool need_comma = false; + if (next != __last && *next == ',') { + const char *x = skip_blanks(__first + 1, __last); + if (x != __last && *x == '#' && (x + 1) != __last && x[1] == '#') { + need_comma = true; + paste = true; + __first = skip_blanks(x + 2, __last); + } + } + if (next != __last && *next == '#') { paste = true; @@ -220,8 +232,8 @@ const char *MacroExpander::expand(const char *__first, const char *__last, } const QByteArray fast_name(name_begin, name_end - name_begin); - - if (const QByteArray *actual = resolve_formal (fast_name)) + const QByteArray *actual = resolve_formal (fast_name); + if (actual) { const char *begin = actual->constData (); const char *end = begin + actual->size (); @@ -233,6 +245,8 @@ const char *MacroExpander::expand(const char *__first, const char *__last, ++end; } __result->append(begin, end - begin); + if (need_comma) + __result->append(','); continue; } |