Fix constant folding optimization for positional only arguments (GH-17837)
(cherry picked from commit b121a4a45f
)
Co-authored-by: Anthony Sottile <asottile@umich.edu>
This commit is contained in:
parent
636a850ed8
commit
49c108c832
|
@ -1,5 +1,6 @@
|
||||||
"""Unit tests for the positional only argument syntax specified in PEP 570."""
|
"""Unit tests for the positional only argument syntax specified in PEP 570."""
|
||||||
|
|
||||||
|
import dis
|
||||||
import pickle
|
import pickle
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
@ -419,6 +420,17 @@ class PositionalOnlyTestCase(unittest.TestCase):
|
||||||
def test_annotations(self):
|
def test_annotations(self):
|
||||||
assert global_inner_has_pos_only().__annotations__ == {'x': int}
|
assert global_inner_has_pos_only().__annotations__ == {'x': int}
|
||||||
|
|
||||||
|
def test_annotations_constant_fold(self):
|
||||||
|
def g():
|
||||||
|
def f(x: not (int is int), /): ...
|
||||||
|
|
||||||
|
# without constant folding we end up with
|
||||||
|
# COMPARE_OP(is), UNARY_NOT
|
||||||
|
# with constant folding we should expect a COMPARE_OP(is not)
|
||||||
|
codes = [(i.opname, i.argval) for i in dis.get_instructions(g)]
|
||||||
|
self.assertNotIn(('UNARY_NOT', None), codes)
|
||||||
|
self.assertIn(('COMPARE_OP', 'is not'), codes)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix constant folding optimization for positional only arguments - by Anthony
|
||||||
|
Sottile.
|
|
@ -617,6 +617,7 @@ astfold_comprehension(comprehension_ty node_, PyArena *ctx_, int optimize_)
|
||||||
static int
|
static int
|
||||||
astfold_arguments(arguments_ty node_, PyArena *ctx_, int optimize_)
|
astfold_arguments(arguments_ty node_, PyArena *ctx_, int optimize_)
|
||||||
{
|
{
|
||||||
|
CALL_SEQ(astfold_arg, arg_ty, node_->posonlyargs);
|
||||||
CALL_SEQ(astfold_arg, arg_ty, node_->args);
|
CALL_SEQ(astfold_arg, arg_ty, node_->args);
|
||||||
CALL_OPT(astfold_arg, arg_ty, node_->vararg);
|
CALL_OPT(astfold_arg, arg_ty, node_->vararg);
|
||||||
CALL_SEQ(astfold_arg, arg_ty, node_->kwonlyargs);
|
CALL_SEQ(astfold_arg, arg_ty, node_->kwonlyargs);
|
||||||
|
|
Loading…
Reference in New Issue