@@ -964,7 +964,7 @@ class TCallableConstraintTransformer : public TCallableTransformerBase<TCallable
964964 }
965965
966966 template <class TConstraint , bool OrderedMap, class TInput >
967- static void GetFromMapLambda (const TInput& input, const TConstraintSet& handler, TConstraintSet& output, TExprContext& ctx) {
967+ static void GetFromMapLambda (const TInput& input, const TConstraintSet& handler, TConstraintSet& output, bool isSingleItem, TExprContext& ctx) {
968968 constexpr bool isOrderConstraint = std::is_same<typename TConstraint::TMainConstraint, TSortedConstraintNode>() || std::is_same<typename TConstraint::TMainConstraint, TChoppedConstraintNode>();
969969 if (const auto lambda = handler.GetConstraint <TConstraint>()) {
970970 const auto original = input.template GetConstraint <typename TConstraint::TMainConstraint>();
@@ -986,15 +986,15 @@ class TCallableConstraintTransformer : public TCallableTransformerBase<TCallable
986986 if (!mapping.empty ()) {
987987 output.AddConstraint (ctx.MakeConstraint <TConstraint>(std::move (mapping)));
988988 }
989- } else if constexpr (isOrderConstraint) {
989+ } else if (isOrderConstraint || isSingleItem ) {
990990 if (const auto filtered = lambda->RemoveOriginal (ctx, original))
991991 output.AddConstraint (filtered);
992992 }
993993 }
994994 }
995995
996996 template <class TConstraint , bool OrderedMap, bool WideOutput>
997- static void GetFromMapLambda (const TExprNode::TPtr& input, TExprContext& ctx) {
997+ static void GetFromMapLambda (const TExprNode::TPtr& input, bool isSingleItem, TExprContext& ctx) {
998998 constexpr bool isOrderConstraint = std::is_same<typename TConstraint::TMainConstraint, TSortedConstraintNode>() || std::is_same<typename TConstraint::TMainConstraint, TChoppedConstraintNode>();
999999 if (const auto lambda = GetConstraintFromLambda<TConstraint, WideOutput>(input->Tail (), ctx)) {
10001000 const auto original = GetDetailed (input->Head ().GetConstraint <typename TConstraint::TMainConstraint>(), *input->Head ().GetTypeAnn (), ctx);
@@ -1016,7 +1016,7 @@ class TCallableConstraintTransformer : public TCallableTransformerBase<TCallable
10161016 if (!mapping.empty ()) {
10171017 input->AddConstraint (ctx.MakeConstraint <TConstraint>(std::move (mapping)));
10181018 }
1019- } else if constexpr (isOrderConstraint) {
1019+ } else if (isOrderConstraint || isSingleItem ) {
10201020 if (const auto filtered = lambda->RemoveOriginal (ctx, original))
10211021 input->AddConstraint (filtered);
10221022 }
@@ -1051,10 +1051,11 @@ class TCallableConstraintTransformer : public TCallableTransformerBase<TCallable
10511051 }
10521052 }
10531053
1054- GetFromMapLambda<TPartOfUniqueConstraintNode, Ordered, WideOutput>(input, ctx);
1055- GetFromMapLambda<TPartOfDistinctConstraintNode, Ordered, WideOutput>(input, ctx);
1056- GetFromMapLambda<TPartOfSortedConstraintNode, Ordered, WideOutput>(input, ctx);
1057- GetFromMapLambda<TPartOfChoppedConstraintNode, Ordered, WideOutput>(input, ctx);
1054+ const bool singleItem = ETypeAnnotationKind::Optional == input->GetTypeAnn ()->GetKind ();
1055+ GetFromMapLambda<TPartOfUniqueConstraintNode, Ordered, WideOutput>(input, singleItem, ctx);
1056+ GetFromMapLambda<TPartOfDistinctConstraintNode, Ordered, WideOutput>(input, singleItem, ctx);
1057+ GetFromMapLambda<TPartOfSortedConstraintNode, Ordered, WideOutput>(input, singleItem, ctx);
1058+ GetFromMapLambda<TPartOfChoppedConstraintNode, Ordered, WideOutput>(input, singleItem, ctx);
10581059
10591060 const auto lambdaVarIndex = GetConstraintFromLambda<TVarIndexConstraintNode, WideOutput>(input->Tail (), ctx);
10601061 const auto lambdaMulti = GetConstraintFromLambda<TMultiConstraintNode, WideOutput>(input->Tail (), ctx);
@@ -1101,10 +1102,10 @@ class TCallableConstraintTransformer : public TCallableTransformerBase<TCallable
11011102 }
11021103 }
11031104 }
1104- GetFromMapLambda<TPartOfUniqueConstraintNode, Ordered>(input->Head (), item.second , remappedItems.back ().second , ctx);
1105- GetFromMapLambda<TPartOfDistinctConstraintNode, Ordered>(input->Head (), item.second , remappedItems.back ().second , ctx);
1106- GetFromMapLambda<TPartOfSortedConstraintNode, Ordered>(input->Head (), item.second , remappedItems.back ().second , ctx);
1107- GetFromMapLambda<TPartOfChoppedConstraintNode, Ordered>(input->Head (), item.second , remappedItems.back ().second , ctx);
1105+ GetFromMapLambda<TPartOfUniqueConstraintNode, Ordered>(input->Head (), item.second , remappedItems.back ().second , singleItem, ctx);
1106+ GetFromMapLambda<TPartOfDistinctConstraintNode, Ordered>(input->Head (), item.second , remappedItems.back ().second , singleItem, ctx);
1107+ GetFromMapLambda<TPartOfSortedConstraintNode, Ordered>(input->Head (), item.second , remappedItems.back ().second , singleItem, ctx);
1108+ GetFromMapLambda<TPartOfChoppedConstraintNode, Ordered>(input->Head (), item.second , remappedItems.back ().second , singleItem, ctx);
11081109
11091110 if (const auto empty = item.second .template GetConstraint <TEmptyConstraintNode>()) {
11101111 remappedItems.pop_back ();
@@ -1127,10 +1128,10 @@ class TCallableConstraintTransformer : public TCallableTransformerBase<TCallable
11271128 }
11281129 }
11291130 }
1130- GetFromMapLambda<TPartOfUniqueConstraintNode, Ordered>(*origConstr, item.second , remappedItems.back ().second , ctx);
1131- GetFromMapLambda<TPartOfDistinctConstraintNode, Ordered>(*origConstr, item.second , remappedItems.back ().second , ctx);
1132- GetFromMapLambda<TPartOfSortedConstraintNode, Ordered>(*origConstr, item.second , remappedItems.back ().second , ctx);
1133- GetFromMapLambda<TPartOfChoppedConstraintNode, Ordered>(*origConstr, item.second , remappedItems.back ().second , ctx);
1131+ GetFromMapLambda<TPartOfUniqueConstraintNode, Ordered>(*origConstr, item.second , remappedItems.back ().second , singleItem, ctx);
1132+ GetFromMapLambda<TPartOfDistinctConstraintNode, Ordered>(*origConstr, item.second , remappedItems.back ().second , singleItem, ctx);
1133+ GetFromMapLambda<TPartOfSortedConstraintNode, Ordered>(*origConstr, item.second , remappedItems.back ().second , singleItem, ctx);
1134+ GetFromMapLambda<TPartOfChoppedConstraintNode, Ordered>(*origConstr, item.second , remappedItems.back ().second , singleItem, ctx);
11341135
11351136 if (const auto empty = item.second .template GetConstraint <TEmptyConstraintNode>()) {
11361137 remappedItems.pop_back ();
0 commit comments