Skip to content

Commit eff7c65

Browse files
committed
issue #8542 Variadic macro expansion
The variadic macro was not handled in case there were fixed arguments as well.
1 parent cd998a7 commit eff7c65

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/pre.l

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3241,10 +3241,17 @@ static void initPredefined(yyscan_t yyscanner,const QCString &fileName)
32413241
) // predefined function macro definition
32423242
{
32433243
static const reg::Ex reId(R"(\a\w*)");
3244+
static const reg::Ex reVaArgs(R"(, *\.\.\. *$)");
32443245
reg::Iterator end;
32453246
bool varArgs = false;
32463247
int count = 0;
32473248
std::map<std::string,int> argMap;
3249+
reg::Iterator it1(ds.substr(i_obrace+1,i_cbrace-i_obrace-1),reVaArgs,0);
3250+
if (it1 != end)
3251+
{
3252+
i_cbrace -= it1->length();
3253+
3254+
}
32483255
if (ds.substr(i_obrace+1,i_cbrace-i_obrace-1)=="...")
32493256
{
32503257
varArgs = true;
@@ -3274,6 +3281,12 @@ static void initPredefined(yyscan_t yyscanner,const QCString &fileName)
32743281
}
32753282
++it;
32763283
}
3284+
if (it1!=end)
3285+
{
3286+
varArgs = true;
3287+
argMap.emplace("__VA_ARGS__",count);
3288+
count++;
3289+
}
32773290
}
32783291
// strip definition part
32793292
std::string definition;

0 commit comments

Comments
 (0)