]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-99944: Make dis display the value of oparg of KW_NAMES (#103856)
authorJuhi Chandalia <jkchandalia@gmail.com>
Wed, 26 Apr 2023 18:00:36 +0000 (12:00 -0600)
committerGitHub <noreply@github.com>
Wed, 26 Apr 2023 18:00:36 +0000 (19:00 +0100)
Co-authored-by: chilaxan <chilaxan@gmail.com>
Lib/dis.py
Lib/test/test_dis.py
Misc/NEWS.d/next/Library/2023-04-25-22-59-06.gh-issue-99944.pst8iT.rst [new file with mode: 0644]

index 8af84c00d0cf64b3a958439867cd20277156c284..85c109584bf94f126c4213ac5cc01e13f0f2ac6a 100644 (file)
@@ -369,9 +369,8 @@ def _get_const_value(op, arg, co_consts):
     assert op in hasconst
 
     argval = UNKNOWN
-    if op == LOAD_CONST or op == RETURN_CONST:
-        if co_consts is not None:
-            argval = co_consts[arg]
+    if co_consts is not None:
+        argval = co_consts[arg]
     return argval
 
 def _get_const_info(op, arg, co_consts):
index 97960726991b7634cc6b7ea817ac2b24b78ba113..bdb541eb3b56865f17822704f4ffbc86445bd8de 100644 (file)
@@ -227,6 +227,26 @@ dis_bug46724 = """\
        JUMP_FORWARD            -4 (to 0)
 """
 
+def func_w_kwargs(a, b, **c):
+    pass
+
+def wrap_func_w_kwargs():
+    func_w_kwargs(1, 2, c=5)
+
+dis_kw_names = """\
+%3d        RESUME                   0
+
+%3d        LOAD_GLOBAL              1 (NULL + func_w_kwargs)
+           LOAD_CONST               1 (1)
+           LOAD_CONST               2 (2)
+           LOAD_CONST               3 (5)
+           KW_NAMES                 4 (('c',))
+           CALL                     3
+           POP_TOP
+           RETURN_CONST             0 (None)
+""" % (wrap_func_w_kwargs.__code__.co_firstlineno,
+       wrap_func_w_kwargs.__code__.co_firstlineno + 1)
+
 _BIG_LINENO_FORMAT = """\
   1        RESUME                   0
 
@@ -911,6 +931,10 @@ class DisTests(DisTestBase):
         # Test that negative operargs are handled properly
         self.do_disassembly_test(bug46724, dis_bug46724)
 
+    def test_kw_names(self):
+        # Test that value is displayed for KW_NAMES
+        self.do_disassembly_test(wrap_func_w_kwargs, dis_kw_names)
+
     def test_big_linenos(self):
         def func(count):
             namespace = {}
diff --git a/Misc/NEWS.d/next/Library/2023-04-25-22-59-06.gh-issue-99944.pst8iT.rst b/Misc/NEWS.d/next/Library/2023-04-25-22-59-06.gh-issue-99944.pst8iT.rst
new file mode 100644 (file)
index 0000000..80238a6
--- /dev/null
@@ -0,0 +1 @@
+Make :mod:`dis` display the value of oparg of :opcode:`KW_NAMES`.