From ee5adb87050ae7c0b96056a67dddc5d48174e695 Mon Sep 17 00:00:00 2001 From: Ronan Date: Tue, 30 Sep 2025 08:22:50 +0200 Subject: 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 --- source/slang/slang-parser.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'source/slang/slang-parser.cpp') 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(); 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(); constraint->whereTokenLoc = whereToken.loc; constraint->isEqualityConstraint = true; - parser->FillPosition(constraint); + constraint->loc = constraintToken.loc; constraint->sub = subType; constraint->sup = parser->ParseTypeExp(); if (optional) -- cgit v1.2.3