diff options
| author | Ronan <ro.cailleau@gmail.com> | 2025-09-30 08:22:50 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-30 06:22:50 +0000 |
| commit | ee5adb87050ae7c0b96056a67dddc5d48174e695 (patch) | |
| tree | 917893600575e8d0bba7d40d4e872ecc13d217fd /source/slang/slang-parser.cpp | |
| parent | a6deb5ed82cb8fc6b4f4c5c5fee264e09f97ff89 (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.cpp | 9 |
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) |
