Message380494
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;
```
Which gives the expected result:
```
[ncoghlan@thechalk cpython]$ ./python -c "import dis; dis.dis('(x := 1 +1)')"
1 0 LOAD_CONST 0 (2)
2 DUP_TOP
4 STORE_NAME 0 (x)
6 RETURN_VALUE
``` |
|
Date |
User |
Action |
Args |
2020-11-07 06:59:44 | ncoghlan | set | recipients:
+ ncoghlan |
2020-11-07 06:59:44 | ncoghlan | set | messageid: <1604732384.87.0.434481078008.issue42282@roundup.psfhosted.org> |
2020-11-07 06:59:44 | ncoghlan | link | issue42282 messages |
2020-11-07 06:59:44 | ncoghlan | create | |
|