Skip to content

Commit f43df42

Browse files
authored
Revert "Fix erroneous parse error when declaring variables using struct names" (KhronosGroup#4002)
* Revert "Remove trailing whitespaces - NFC" This reverts commit 15b727a. * Revert "Fix while avoiding grammar changes" This reverts commit a2b6c91. * Revert "Fix spec violations. Simplify tests." This reverts commit fa7cb74. * Revert "Fix erroneous parse error when declaring variables using struct names" This reverts commit cefdfc3.
1 parent 15b727a commit f43df42

File tree

6 files changed

+13
-154
lines changed

6 files changed

+13
-154
lines changed

Test/struct_name_as_array_member.frag

Lines changed: 0 additions & 14 deletions
This file was deleted.

Test/struct_name_as_struct_member.frag

Lines changed: 0 additions & 20 deletions
This file was deleted.

glslang/MachineIndependent/Scan.cpp

Lines changed: 12 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

glslang/MachineIndependent/ScanContext.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class TScanContext {
5353
explicit TScanContext(TParseContextBase& pc) :
5454
parseContext(pc),
5555
afterType(false), afterStruct(false),
56-
field(false), afterBuffer(false), inDeclaratorList(false), afterDeclarator(false), angleBracketDepth(0), squareBracketDepth(0) { }
56+
field(false), afterBuffer(false) { }
5757
virtual ~TScanContext() { }
5858

5959
static void fillInKeywordMap();
@@ -82,10 +82,6 @@ class TScanContext {
8282
bool afterStruct; // true if we've recognized the STRUCT keyword, so can only be looking for an identifier
8383
bool field; // true if we're on a field, right after a '.'
8484
bool afterBuffer; // true if we've recognized the BUFFER keyword
85-
bool inDeclaratorList; // true if we detected we're in a declarator list like "float a, b;"
86-
bool afterDeclarator; // true if we just saw an identifier after a type (potential declarator)
87-
int angleBracketDepth; // track nesting level of < > to detect template parameters
88-
int squareBracketDepth; // track nesting level of [ ] to detect array expressions
8985
TSourceLoc loc;
9086
TParserToken* parserToken;
9187
TPpToken* ppToken;

gtests/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ if(GLSLANG_TESTS)
5656
${CMAKE_CURRENT_SOURCE_DIR}/LiveTraverser.FromFile.cpp
5757
${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp
5858
${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp
59-
${CMAKE_CURRENT_SOURCE_DIR}/StructName.cpp
6059
${CMAKE_CURRENT_SOURCE_DIR}/VkRelaxed.FromFile.cpp
6160
${CMAKE_CURRENT_SOURCE_DIR}/GlslMapIO.FromFile.cpp)
6261

gtests/StructName.cpp

Lines changed: 0 additions & 80 deletions
This file was deleted.

0 commit comments

Comments
 (0)