@@ -836,21 +836,12 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
836836 loc = ppToken.loc ;
837837 parserToken->sType .lex .loc = loc;
838838 switch (token) {
839- case ' ;' : afterType = false ; afterBuffer = false ; inDeclaratorList = false ; afterDeclarator = false ; angleBracketDepth = 0 ; squareBracketDepth = 0 ; return SEMICOLON;
840- case ' ,' :
841- // If we just processed a declarator (identifier after a type), this comma
842- // indicates that we're in a declarator list. Note that 'afterDeclarator' is
843- // only set when we are not inside a template parameter list or array expression.
844- if (afterDeclarator) {
845- inDeclaratorList = true ;
846- }
847- afterType = false ;
848- afterDeclarator = false ;
849- return COMMA;
839+ case ' ;' : afterType = false ; afterBuffer = false ; return SEMICOLON;
840+ case ' ,' : afterType = false ; return COMMA;
850841 case ' :' : return COLON;
851- case ' =' : afterType = false ; inDeclaratorList = false ; afterDeclarator = false ; return EQUAL;
852- case ' (' : afterType = false ; inDeclaratorList = false ; afterDeclarator = false ; return LEFT_PAREN;
853- case ' )' : afterType = false ; inDeclaratorList = false ; afterDeclarator = false ; return RIGHT_PAREN;
842+ case ' =' : afterType = false ; return EQUAL;
843+ case ' (' : afterType = false ; return LEFT_PAREN;
844+ case ' )' : afterType = false ; return RIGHT_PAREN;
854845 case ' .' : field = true ; return DOT;
855846 case ' !' : return BANG;
856847 case ' -' : return DASH;
@@ -859,16 +850,16 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
859850 case ' *' : return STAR;
860851 case ' /' : return SLASH;
861852 case ' %' : return PERCENT;
862- case ' <' : angleBracketDepth++; return LEFT_ANGLE;
863- case ' >' : if (angleBracketDepth > 0 ) angleBracketDepth--; return RIGHT_ANGLE;
853+ case ' <' : return LEFT_ANGLE;
854+ case ' >' : return RIGHT_ANGLE;
864855 case ' |' : return VERTICAL_BAR;
865856 case ' ^' : return CARET;
866857 case ' &' : return AMPERSAND;
867858 case ' ?' : return QUESTION;
868- case ' [' : squareBracketDepth++; return LEFT_BRACKET;
869- case ' ]' : if (squareBracketDepth > 0 ) squareBracketDepth--; return RIGHT_BRACKET;
870- case ' {' : afterStruct = false ; afterBuffer = false ; inDeclaratorList = false ; afterDeclarator = false ; angleBracketDepth = 0 ; squareBracketDepth = 0 ; return LEFT_BRACE;
871- case ' }' : inDeclaratorList = false ; afterDeclarator = false ; angleBracketDepth = 0 ; squareBracketDepth = 0 ; return RIGHT_BRACE;
859+ case ' [' : return LEFT_BRACKET;
860+ case ' ]' : return RIGHT_BRACKET;
861+ case ' {' : afterStruct = false ; afterBuffer = false ; return LEFT_BRACE;
862+ case ' }' : return RIGHT_BRACE;
872863 case ' \\ ' :
873864 parseContext.error (loc, " illegal use of escape character" , " \\ " , " " );
874865 break ;
@@ -1950,26 +1941,13 @@ int TScanContext::identifierOrType()
19501941 if (variable->isUserType () &&
19511942 // treat redeclaration of forward-declared buffer/uniform reference as an identifier
19521943 !(variable->getType ().isReference () && afterBuffer)) {
1953-
1954- // If we're in a declarator list (like "float a, B;"), treat struct names as IDENTIFIER
1955- // to fix GitHub issue #3931
1956- if (inDeclaratorList) {
1957- return IDENTIFIER;
1958- }
1959-
19601944 afterType = true ;
1945+
19611946 return TYPE_NAME;
19621947 }
19631948 }
19641949 }
19651950
1966- // If we see an identifier right after a type, this might be a declarator.
1967- // But not in template parameters (inside angle brackets) or array expressions (inside square brackets)
1968- if (afterType && angleBracketDepth == 0 && squareBracketDepth == 0 ) {
1969- afterDeclarator = true ;
1970- afterType = false ;
1971- }
1972-
19731951 return IDENTIFIER;
19741952}
19751953
0 commit comments