You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Constant folding is skipped in named expressions #86448
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee='https://github.com/ncoghlan'closed_at=<Date2020-11-07.12:36:30.609>created_at=<Date2020-11-07.06:59:44.846>labels= ['3.10', 'performance']
title='Constant folding is skipped in named expressions'updated_at=<Date2020-11-07.12:36:30.609>user='https://github.com/ncoghlan'
While working on the PEP-642 reference implementation I removed the "default:" case from the switch statement in astfold_expr as part of making sure the new SkippedBinding node was being handled everywhere it needed to be.
This change picked up that NamedExpr_kind wasn't being handled either, and a check with the dis module confirmed that using the walrus operator turns off constant folding:
[ncoghlan@thechalk cpython]$ ./python
Python 3.10.0a2+ (heads/pep-642-constraint-patterns-dirty:4db2fbd609, Nov 7 2020, 16:42:19)
[GCC 10.2.1 20201016 (Red Hat 10.2.1-6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import dis
>>> dis.dis("1 + 1")
1 0 LOAD_CONST 0 (2)
2 RETURN_VALUE
>>> dis.dis("(x := 1 + 1)")
1 0 LOAD_CONST 0 (1)
2 LOAD_CONST 0 (1)
4 BINARY_ADD
6 DUP_TOP
8 STORE_NAME 0 (x)
10 RETURN_VALUE
>>>
The missing switch statement entry is just:
case NamedExpr_kind:
CALL(astfold_expr, expr_ty, node_->v.NamedExpr.value);
break;
Activity
ncoghlan commentedon Nov 7, 2020
While working on the PEP-642 reference implementation I removed the "default:" case from the switch statement in astfold_expr as part of making sure the new SkippedBinding node was being handled everywhere it needed to be.
This change picked up that NamedExpr_kind wasn't being handled either, and a check with the dis module confirmed that using the walrus operator turns off constant folding:
The missing switch statement entry is just:
Which gives the expected result:
ncoghlan commentedon Nov 7, 2020
New changeset 8805a4d by Nick Coghlan in branch 'master':
bpo-42282: Fold constants inside named expressions (GH-23190)
8805a4d
ncoghlan commentedon Nov 7, 2020
Since this was only a performance issue, I'm not planning to backport it to earlier releases.