This function
def f(x, y, c):
return 1 + (x if c else y)
compiles to
1 RESUME 0
2 LOAD_SMALL_INT 1
LOAD_FAST_BORROW 2 (c)
TO_BOOL
POP_JUMP_IF_FALSE 9 (to L1)
NOT_TAKEN
LOAD_FAST_BORROW 0 (x)
BINARY_OP 0 (+)
RETURN_VALUE
L1: LOAD_FAST 1 (y)
BINARY_OP 0 (+)
RETURN_VALUE
Note that the load of y uses LOAD_FAST even though LOAD_FAST_BORROW is safe.
This becomes important with virtual iterators as the iterable for the loop is live at BB end.
Linked PRs
Reactions are currently unavailable
This function
def f(x, y, c): return 1 + (x if c else y)compiles to
1 RESUME 0 2 LOAD_SMALL_INT 1 LOAD_FAST_BORROW 2 (c) TO_BOOL POP_JUMP_IF_FALSE 9 (to L1) NOT_TAKEN LOAD_FAST_BORROW 0 (x) BINARY_OP 0 (+) RETURN_VALUE L1: LOAD_FAST 1 (y) BINARY_OP 0 (+) RETURN_VALUENote that the load of y uses LOAD_FAST even though LOAD_FAST_BORROW is safe.
This becomes important with virtual iterators as the iterable for the loop is live at BB end.
Linked PRs