[core] Call a lambda whose only statement returns a braced value (#19503)

This commit is contained in:
J. Nick Koston
2026-09-23 12:15:21 +01:00
committed by GitHub
parent 8c3ebd3414
commit 01fc7511ae
2 changed files with 16 additions and 1 deletions
+7 -1
View File
@@ -1212,7 +1212,13 @@ def call_lambda(lamb: LambdaExpression) -> Expression:
assert lamb.return_type is not None, "Lambda must have a return type to be called"
expr = lamb.content.strip()
# A lone `return <expr>;` reduces to the expression; anything longer is called as is.
if re.match(r"^return\b", expr) and expr.endswith(";") and expr.count(";") == 1:
# A braced return such as `return {};` needs the lambda's return type, so it is called.
if (
re.match(r"^return\b", expr)
and expr.endswith(";")
and expr.count(";") == 1
and not expr[6:].lstrip().startswith("{")
):
expr = RawExpression(expr[6:-1].strip())
# Don't cast if the return type is a class
if isinstance(lamb.return_type, MockObjClass):
+9
View File
@@ -260,6 +260,15 @@ class TestCallLambda:
assert isinstance(result, cg.CallExpression)
assert str(result).endswith("}()")
def test_call_lambda__braced_return_is_called(self) -> None:
"""A braced return needs the lambda's return type, so it is not reduced."""
lamb = cg.LambdaExpression(("return {};",), (), "", ct.int_)
result = cg.call_lambda(lamb)
assert isinstance(result, cg.CallExpression)
assert "static_cast" not in str(result)
def test_call_lambda__return_expression_with_class_return_type_no_cast(self):
"""A class return type is not cast, since static_cast doesn't apply
to arbitrary class types."""