summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
authorRonan <ro.cailleau@gmail.com>2025-09-30 08:22:50 +0200
committerGitHub <noreply@github.com>2025-09-30 06:22:50 +0000
commitee5adb87050ae7c0b96056a67dddc5d48174e695 (patch)
tree917893600575e8d0bba7d40d4e872ecc13d217fd /source/slang/slang-parser.cpp
parenta6deb5ed82cb8fc6b4f4c5c5fee264e09f97ff89 (diff)
canonical type equality constraint (#8445)
Fixes #8439 When checked, generic type equality constraints types are now in a canonical order, allowing for a commutative type equality operator. --------- Co-authored-by: Mukund Keshava <mkeshava@nvidia.com>
Diffstat (limited to 'source/slang/slang-parser.cpp')
-rw-r--r--source/slang/slang-parser.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index 196b2efa8..eb1671aa7 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -1683,13 +1683,14 @@ static void maybeParseGenericConstraints(Parser* parser, ContainerDecl* genericP
bool optional = AdvanceIf(parser, "optional", &whereToken);
auto subType = parser->ParseTypeExp();
- if (AdvanceIf(parser, TokenType::Colon))
+ Token constraintToken;
+ if (AdvanceIf(parser, TokenType::Colon, &constraintToken))
{
for (;;)
{
auto constraint = parser->astBuilder->create<GenericTypeConstraintDecl>();
constraint->whereTokenLoc = whereToken.loc;
- parser->FillPosition(constraint);
+ constraint->loc = constraintToken.loc;
constraint->sub = subType;
constraint->sup = parser->ParseTypeExp();
if (optional)
@@ -1703,12 +1704,12 @@ static void maybeParseGenericConstraints(Parser* parser, ContainerDecl* genericP
break;
}
}
- else if (AdvanceIf(parser, TokenType::OpEql))
+ else if (AdvanceIf(parser, TokenType::OpEql, &constraintToken))
{
auto constraint = parser->astBuilder->create<GenericTypeConstraintDecl>();
constraint->whereTokenLoc = whereToken.loc;
constraint->isEqualityConstraint = true;
- parser->FillPosition(constraint);
+ constraint->loc = constraintToken.loc;
constraint->sub = subType;
constraint->sup = parser->ParseTypeExp();
if (optional)