GLSL: Fix #1358: Support "struct name", where name could be a user type
This commit is contained in:
parent
1ea8f595f9
commit
2c8265bb62
4 changed files with 56 additions and 5 deletions
|
|
@ -778,7 +778,7 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
|
|||
case '?': return QUESTION;
|
||||
case '[': return LEFT_BRACKET;
|
||||
case ']': return RIGHT_BRACKET;
|
||||
case '{': return LEFT_BRACE;
|
||||
case '{': afterStruct = false; return LEFT_BRACE;
|
||||
case '}': return RIGHT_BRACE;
|
||||
case '\\':
|
||||
parseContext.error(loc, "illegal use of escape character", "\\", "");
|
||||
|
|
@ -861,7 +861,6 @@ int TScanContext::tokenizeIdentifier()
|
|||
case IN:
|
||||
case OUT:
|
||||
case INOUT:
|
||||
case STRUCT:
|
||||
case BREAK:
|
||||
case CONTINUE:
|
||||
case DO:
|
||||
|
|
@ -874,6 +873,10 @@ int TScanContext::tokenizeIdentifier()
|
|||
case CASE:
|
||||
return keyword;
|
||||
|
||||
case STRUCT:
|
||||
afterStruct = true;
|
||||
return keyword;
|
||||
|
||||
case NONUNIFORM:
|
||||
if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
|
||||
return keyword;
|
||||
|
|
@ -1537,7 +1540,7 @@ int TScanContext::identifierOrType()
|
|||
return IDENTIFIER;
|
||||
|
||||
parserToken->sType.lex.symbol = parseContext.symbolTable.find(*parserToken->sType.lex.string);
|
||||
if (afterType == false && parserToken->sType.lex.symbol) {
|
||||
if ((afterType == false && afterStruct == false) && parserToken->sType.lex.symbol != nullptr) {
|
||||
if (const TVariable* variable = parserToken->sType.lex.symbol->getAsVariable()) {
|
||||
if (variable->isUserType()) {
|
||||
afterType = true;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue