From 21426f281e09b6043e3c1f9b5d3a48644a4965fe Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 12 Oct 2012 13:37:21 +0200 Subject: moc: parse properly the gcc extension for variadic macro Task-number: QTBUG-27547 Change-Id: I983b96b09c405e5330327092e56164b9921a2d0f Reviewed-by: Lars Knoll --- src/tools/moc/preprocessor.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/tools/moc') diff --git a/src/tools/moc/preprocessor.cpp b/src/tools/moc/preprocessor.cpp index 40bba33d40..566be9c039 100644 --- a/src/tools/moc/preprocessor.cpp +++ b/src/tools/moc/preprocessor.cpp @@ -1201,8 +1201,18 @@ void Preprocessor::parseDefineArguments(Macro *m) t = next(); if (t == PP_RPAREN) break; - if (t != PP_COMMA) - error("Unexpected character in macro argument list."); + if (t == PP_COMMA) + continue; + if (lexem() == "...") { + //GCC extension: #define FOO(x, y...) x(y) + // The last argument was already parsed. Just mark the macro as variadic. + m->isVariadic = true; + while (test(PP_WHITESPACE)); + if (!test(PP_RPAREN)) + error("missing ')' in macro argument list"); + break; + } + error("Unexpected character in macro argument list."); } m->arguments = arguments; while (test(PP_WHITESPACE)); -- cgit v1.2.3