-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
Closed
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
It is my understanding that a little while ago RETURN_CONST was added as a new instruction #101632
It is to replace cases where LOAD_CONST and RETURN_VALUE appear sequentially.
I was playing around with the bytecode and found that a case:
def func(x):
return True if x else False
That has the following bytecode:
2 LOAD_FAST 0 (x)
4 POP_JUMP_IF_FALSE 2 (to 10)
6 LOAD_CONST 1 (True)
8 RETURN_VALUE
10 LOAD_CONST 2 (False)
12 RETURN_VALUE
While a similar function:
def func(x):
if x:
return True
else:
return False
Produces this bytecode:
2 LOAD_FAST 0 (x)
4 POP_JUMP_IF_FALSE 1 (to 8)
6 RETURN_CONST 1 (True)
8 RETURN_CONST 2 (False)
It seems like the instructions LOAD_CONST and RETURN_VALUE are not being combined properly in the first case.
I have confirmed with some members of the python team that this is a small bug/optimization opportunity and I would like to take a swing at fixing it.
CPython versions tested on:
3.12
Operating systems tested on:
No response
Linked PRs
dg-pb, blhsing, sobolevn, Eclips4, nineteendo and 1 more
Metadata
Metadata
Assignees
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error