diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2013-10-12 21:02:43 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2013-10-12 21:02:43 (GMT) |
commit | 22ce4672811cc5e2718e7b2f2260e68d1e2737a5 (patch) | |
tree | f2bd15f538902510455248adb339650be2a7baba /src | |
parent | cfc02d4c998aa5ff2c5130d104e8643810e2f19e (diff) | |
download | Doxygen-22ce4672811cc5e2718e7b2f2260e68d1e2737a5.zip Doxygen-22ce4672811cc5e2718e7b2f2260e68d1e2737a5.tar.gz Doxygen-22ce4672811cc5e2718e7b2f2260e68d1e2737a5.tar.bz2 |
Bug 709526 - C++ parsing problem with operators <<, <, >, >> inside templates
Diffstat (limited to 'src')
-rw-r--r-- | src/defargs.l | 29 | ||||
-rw-r--r-- | src/scanner.l | 7 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/defargs.l b/src/defargs.l index fa945f6..6d6136a 100644 --- a/src/defargs.l +++ b/src/defargs.l @@ -212,6 +212,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" else // yytext=='<' { g_argSharpCount=0; + g_argRoundCount=0; BEGIN( CopyArgSharp ); } } @@ -239,6 +240,26 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" if (g_argRoundCount>0) g_argRoundCount--; else BEGIN( g_readArgContext ); } +<CopyArgSharp>"<<" { + if (g_argRoundCount>0) + { + *g_copyArgValue += yytext; + } + else + { + REJECT; + } + } +<CopyArgSharp>">>" { + if (g_argRoundCount>0) + { + *g_copyArgValue += yytext; + } + else + { + REJECT; + } + } <CopyArgSharp>"<" { g_argSharpCount++; *g_copyArgValue += *yytext; @@ -248,6 +269,14 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" if (g_argSharpCount>0) g_argSharpCount--; else BEGIN( g_readArgContext ); } +<CopyArgSharp>"(" { + g_argRoundCount++; + *g_copyArgValue += *yytext; + } +<CopyArgSharp>")" { + g_argRoundCount--; + *g_copyArgValue += *yytext; + } <CopyArgCurly>"{" { g_argCurlyCount++; *g_copyArgValue += *yytext; diff --git a/src/scanner.l b/src/scanner.l index 113ef03..66ea314 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -4437,6 +4437,13 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) else BEGIN( lastCopyArgContext ); } +<CopyArgSharp>"(" { + *copyArgString+=*yytext; + fullArgString+=*yytext; + argRoundCount=0; + lastCopyArgContext = YY_START; + BEGIN( CopyArgRound ); + } <CopyArgSharp>"<" { argSharpCount++; //printf("argSharpCount++=%d copy\n",argSharpCount); |