summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/pp-macro-expander.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-09-01 17:09:42 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2010-09-01 17:10:39 +0200
commit0a3bfc24f84eaeb4bf8b209b1207f7d2e7a2cf2f (patch)
tree8187419cdb5d1a31bbb89102ff8038137c63bf0b /src/libs/cplusplus/pp-macro-expander.cpp
parent36a05bb5e367498b35ed6a25fe00c4a028b0ae9d (diff)
downloadqt-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.cpp22
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;
}