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
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
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)
>>> dis.dis("(x := 1 + 1)")
1 0 LOAD_CONST 0 (1)
2 LOAD_CONST 0 (1)
8 STORE_NAME 0 (x)
The missing switch statement entry is just:
CALL(astfold_expr, expr_ty, node_->v.NamedExpr.value);