Commit 22ce4672 authored by Dimitri van Heesch's avatar Dimitri van Heesch
Browse files

Bug 709526 - C++ parsing problem with operators <<, <, >, >> inside templates

parent cfc02d4c
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -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;
+7 −0
Original line number Diff line number Diff line
@@ -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);