summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-parser.cpp')
-rw-r--r--source/slang/slang-parser.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index 891db2867..7f7c39929 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -2356,14 +2356,27 @@ static Expr* parseGenericApp(Parser* parser, Expr* base)
genericApp->loc = base->loc;
genericApp->functionExpr = base;
- parser->ReadToken(TokenType::OpLess);
+ auto opLess = parser->ReadToken(TokenType::OpLess);
+ genericApp->argumentDelimeterLocs.add(opLess.loc);
parser->genericDepth++;
- // For now assume all generics have at least one argument
- genericApp->arguments.add(_parseGenericArg(parser));
- while (AdvanceIf(parser, TokenType::Comma))
+
+ for (;;)
{
+ if (parser->LookAheadToken(TokenType::OpGreater) ||
+ parser->LookAheadToken(TokenType::OpRsh))
+ break;
genericApp->arguments.add(_parseGenericArg(parser));
+ if (parser->LookAheadToken(TokenType::Comma))
+ {
+ auto commaToken = parser->ReadToken(TokenType::Comma);
+ genericApp->argumentDelimeterLocs.add(commaToken.loc);
+ }
+ else
+ {
+ break;
+ }
}
+ genericApp->argumentDelimeterLocs.add(parser->tokenReader.peekLoc());
parser->genericDepth--;
if (parser->tokenReader.peekToken().type == TokenType::OpRsh)