@@ -2063,6 +2063,7 @@ NONLopt [^\n]*
20632063 yyextra->current->bodyLine = yyextra->yyLineNr;
20642064 yyextra->current->bodyColumn = yyextra->yyColNr;
20652065 yyextra->lastInitializerContext = UsingAlias;
2066+ yyextra->sharpCount=0;
20662067 yyextra->initBracketCount=0;
20672068 storeClangId(yyscanner,yyextra->current->name.data());
20682069 BEGIN(ReadInitializer);
@@ -3054,6 +3055,7 @@ NONLopt [^\n]*
30543055 yyextra->current->bodyColumn = yyextra->yyColNr;
30553056 yyextra->current->initializer.str(yytext);
30563057 yyextra->lastInitializerContext = YY_START;
3058+ yyextra->sharpCount=0;
30573059 yyextra->initBracketCount=0;
30583060 yyextra->current->mtype = yyextra->mtype = MethodTypes::Property;
30593061 yyextra->current->spec.setGettable(true);
@@ -3064,6 +3066,7 @@ NONLopt [^\n]*
30643066 yyextra->current->bodyColumn = yyextra->yyColNr;
30653067 yyextra->current->initializer.str(yytext);
30663068 yyextra->lastInitializerContext = YY_START;
3069+ yyextra->sharpCount=0;
30673070 yyextra->initBracketCount=0;
30683071 BEGIN(ReadInitializer);
30693072 }
@@ -3207,15 +3210,26 @@ NONLopt [^\n]*
32073210<ReadInitializer,ReadInitializerPtr>("<<"|"<=") {
32083211 yyextra->current->initializer << yytext;
32093212 }
3210- <ReadInitializer,ReadInitializerPtr>(">>"|">=") {
3213+ <ReadInitializer,ReadInitializerPtr>(">>") {
3214+ if (yyextra->initBracketCount<=yyextra->sharpCount && yyextra->sharpCount>=2)
3215+ {
3216+ // heuristic to detect '>>' in A<B<C>>::D as '> >', but not e.g. 'A>>B' or A<B<(C>>2)>::D>
3217+ yyextra->initBracketCount-=2;
3218+ yyextra->sharpCount-=2;
3219+ }
3220+ yyextra->current->initializer << yytext;
3221+ }
3222+ <ReadInitializer,ReadInitializerPtr>(">=") {
32113223 yyextra->current->initializer << yytext;
32123224 }
32133225<ReadInitializer,ReadInitializerPtr>[<\[{(] {
32143226 yyextra->initBracketCount++;
3227+ yyextra->sharpCount++;
32153228 yyextra->current->initializer << *yytext;
32163229 }
32173230<ReadInitializer,ReadInitializerPtr>[>\]})] {
32183231 yyextra->initBracketCount--;
3232+ yyextra->sharpCount--;
32193233 if (*yytext=='}')
32203234 {
32213235 yyextra->current->endBodyLine=yyextra->yyLineNr;
@@ -4061,12 +4075,14 @@ NONLopt [^\n]*
40614075 // Java enum initializer
40624076 unput(*yytext);
40634077 yyextra->lastInitializerContext = YY_START;
4078+ yyextra->sharpCount=0;
40644079 yyextra->initBracketCount=0;
40654080 yyextra->current->initializer.str("=");
40664081 BEGIN(ReadInitializer);
40674082 }
40684083<FindFields>"=" {
40694084 yyextra->lastInitializerContext = YY_START;
4085+ yyextra->sharpCount=0;
40704086 yyextra->initBracketCount=0;
40714087 yyextra->current->initializer.str(yytext);
40724088 BEGIN(ReadInitializer);
@@ -4588,6 +4604,7 @@ NONLopt [^\n]*
45884604 }
45894605<MemberSpec>"=" {
45904606 yyextra->lastInitializerContext=YY_START;
4607+ yyextra->sharpCount=0;
45914608 yyextra->initBracketCount=0;
45924609 yyextra->current->initializer.str(yytext);
45934610 BEGIN(ReadInitializer);
@@ -5331,6 +5348,7 @@ NONLopt [^\n]*
53315348 {
53325349 // typically an initialized function pointer
53335350 yyextra->lastInitializerContext=YY_START;
5351+ yyextra->sharpCount=0;
53345352 yyextra->initBracketCount=0;
53355353 yyextra->current->initializer.str(yytext);
53365354 BEGIN(ReadInitializer);
@@ -6058,6 +6076,7 @@ NONLopt [^\n]*
60586076 yyextra->current->bodyColumn = yyextra->yyColNr;
60596077 yyextra->current->initializer.str(std::string());
60606078 yyextra->lastInitializerContext = FindMembers;
6079+ yyextra->sharpCount=0;
60616080 yyextra->initBracketCount=0;
60626081 BEGIN(ReadInitializer);
60636082 }
@@ -6918,6 +6937,7 @@ NONLopt [^\n]*
69186937 yyextra->current->bodyColumn = yyextra->yyColNr;
69196938 yyextra->current->initializer.str(yytext);
69206939 yyextra->lastInitializerContext = YY_START;
6940+ yyextra->sharpCount=0;
69216941 yyextra->initBracketCount=1;
69226942 BEGIN(ReadInitializer);
69236943 }
0 commit comments