Hello community,

here is the log from the commit of package python-xdis for openSUSE:Factory 
checked in at 2020-09-17 14:51:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-xdis (Old)
 and      /work/SRC/openSUSE:Factory/.python-xdis.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-xdis"

Thu Sep 17 14:51:55 2020 rev:12 rq:835018 version:5.0.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-xdis/python-xdis.changes  2020-07-24 
09:57:24.989493778 +0200
+++ /work/SRC/openSUSE:Factory/.python-xdis.new.4249/python-xdis.changes        
2020-09-17 15:01:57.920546119 +0200
@@ -1,0 +2,13 @@
+Wed Sep 16 21:33:45 UTC 2020 - Dirk Mueller <dmuel...@suse.com>
+
+- udpate to 5.0.4:
+  * Add python versions 3.6.12, 3.7.9
+  * extended arg disassembly handling for {LOAD,STORE}_ATTR
+  * Add versions 3.8.5, 3.7.8, and 3.6.11
+  * Clarify changes to 3.8 `ROT_FOUR`
+  * Update 3.9 magics and opcodes
+  * Add Python 3.8.4 as a 3.8 release
+  * pydisasm.py Python 3.3 tolerance
+  * Make pydoc's version reporting show xdis's version
+
+-------------------------------------------------------------------

Old:
----
  5.0.1.tar.gz

New:
----
  5.0.4.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-xdis.spec ++++++
--- /var/tmp/diff_new_pack.VSvFhE/_old  2020-09-17 15:02:03.128551065 +0200
+++ /var/tmp/diff_new_pack.VSvFhE/_new  2020-09-17 15:02:03.132551069 +0200
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-xdis
-Version:        5.0.1
+Version:        5.0.4
 Release:        0
 Summary:        Python cross-version byte-code disassembler and marshal 
routines
 License:        GPL-2.0-only

++++++ 5.0.1.tar.gz -> 5.0.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/NEWS.md 
new/python-xdis-5.0.4/NEWS.md
--- old/python-xdis-5.0.1/NEWS.md       2020-06-28 18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/NEWS.md       2020-08-30 20:15:58.000000000 +0200
@@ -1,7 +1,27 @@
+5.0.4 2020-08-30
+================
+
+* Add python versions 3.6.12, 3.7.9
+* extended arg disassembly handling for {LOAD,STORE}_ATTR
+
+5.0.3 2020-07-28
+================
+
+* Add versions 3.8.5, 3.7.8, and 3.6.11
+* Clarify changes to 3.8 `ROT_FOUR`
+* Update 3.9 magics and opcodes
+
+5.0.2 2020-07-25
+================
+
+* Add Python 3.8.4 as a 3.8 release
+* pydisasm.py Python 3.3 tolerance
+* Make pydoc's version reporting show xdis's version
+
 5.0.1 2020-06-28
 ================
 
-Two small improvements that are usefil in the forthcoming 
[trepan3k](https://pypi.org/project/trepan3k) release:
+Two small improvements that are useful in the forthcoming 
[trepan3k](https://pypi.org/project/trepan3k) release:
 
 * interpret `RAISE_VARARGS`'s `argc` parameter. Some other formatting was 
extended too
 * `check_object_path()` is more leanient in the path name (it doesn't have to 
end in `.py` anymore), but it is
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/__pkginfo__.py 
new/python-xdis-5.0.4/__pkginfo__.py
--- old/python-xdis-5.0.1/__pkginfo__.py        2020-06-28 18:40:07.000000000 
+0200
+++ new/python-xdis-5.0.4/__pkginfo__.py        2020-08-30 20:15:58.000000000 
+0200
@@ -64,7 +64,7 @@
 license = "GPL-2.0"
 mailing_list = "python-debug...@googlegroups.com"
 modname = "xdis"
-packages=['xdis']
+packages = ["xdis"]
 py_modules = None
 # setup_requires     = ['pytest-runner']
 scripts = ["bin/pydisasm.py"]
@@ -90,6 +90,4 @@
     return open(osp.join(srcdir, *rnames)).read()
 
 
-# Get info from files; set: long_description and VERSION
 long_description = read("README.rst") + "\n"
-exec(read("xdis/version.py"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-xdis-5.0.1/admin-tools/how-to-make-a-release.md 
new/python-xdis-5.0.4/admin-tools/how-to-make-a-release.md
--- old/python-xdis-5.0.1/admin-tools/how-to-make-a-release.md  2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/admin-tools/how-to-make-a-release.md  2020-08-30 
20:15:58.000000000 +0200
@@ -44,7 +44,7 @@
 
 # Make sure pyenv is running and check newer versions
 
-    $ pyenv local && source admin-tools/check-newer-versions.sh
+    $ admin-tools/check-newer-versions.sh
 
 # Switch to python-2.4, sync that up and build that first since it creates a 
tarball which we don't want.
 
@@ -58,14 +58,12 @@
 
 # Check against all versions
 
-    $ bash && echo $SHLVL # Go into a subshell to protect exit
-    $ source admin-tools/check-older-versions.sh
-    $ echo $SHLVL ; exit
+    $ admin-tools/check-older-versions.sh
 
 # Make packages and tag
 
-    $ . ./admin-tools/make-dist-older.sh
-       $ pyenv local 3.8.3
+    $ admin-tools/make-dist-older.sh
+       $ pyenv local 3.8.5
        $ twine check dist/xdis-$VERSION*
     $ git tag release-python-2.4-$VERSION
     $ . ./admin-tools/make-dist-newer.sh
@@ -73,10 +71,10 @@
 
 # Check package on github
 
-       $ mkdir /tmp/gittest; pushd /tmp/gittest
-       $ pyenv local 3.7.5
+       $ [[ ! -d /tmp/gittest ]] && mkdir /tmp/gittest; pushd /tmp/gittest
+       $ pyenv local 3.8.4
        $ pip install -e git://github.com/rocky/python-xdis.git#egg=xdis
-       $ pydisasm --help
+       $ pydisasm --version
        $ pip uninstall xdis
        $ popd
 
@@ -90,7 +88,7 @@
 
        $ pushd /tmp/gittest
        $ pip install -e 
git://github.com/rocky/python-xdis.git@$VERSION#egg=xdis
-       $ pydisasm --help
+       $ pydisasm --version
        $ pip uninstall xdis
        $ popd
 
@@ -101,7 +99,7 @@
 
 Check on https://pypi.org/project/xdis/
 
-# Push tags:
+# Push/pull tags:
 
     $ git push --tags
     $ git pull --tags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/admin-tools/pyenv-newer-versions 
new/python-xdis-5.0.4/admin-tools/pyenv-newer-versions
--- old/python-xdis-5.0.1/admin-tools/pyenv-newer-versions      2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/admin-tools/pyenv-newer-versions      2020-08-30 
20:15:58.000000000 +0200
@@ -5,4 +5,4 @@
     echo "This script should be *sourced* rather than run directly through 
bash"
     exit 1
 fi
-export PYVERSIONS='3.5.9 3.6.10 2.6.9 3.3.7 2.7.18 3.2.6 3.1.5 3.4.10 3.7.7 
3.8.3'
+export PYVERSIONS='3.5.9 3.6.12 2.6.9 3.3.7 2.7.18 3.2.6 3.1.5 3.4.10 3.7.9 
3.8.5'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/pytest/stackeffect/se39.py 
new/python-xdis-5.0.4/pytest/stackeffect/se39.py
--- old/python-xdis-5.0.1/pytest/stackeffect/se39.py    1970-01-01 
01:00:00.000000000 +0100
+++ new/python-xdis-5.0.4/pytest/stackeffect/se39.py    2020-08-30 
20:15:58.000000000 +0200
@@ -0,0 +1,260 @@
+# Python 3.9 Stack effects
+
+[
+  -100, # 0
+    -1, # 1,
+     0, # 2,
+     0, # 3,
+     1, # 4,
+     2, # 5,
+     0, # 6,
+  -100, # 7
+  -100, # 8
+     0, # 9,
+     0, # 10,
+     0, # 11,
+     0, # 12,
+  -100, # 13
+  -100, # 14
+     0, # 15,
+    -1, # 16,
+    -1, # 17,
+  -100, # 18
+    -1, # 19,
+    -1, # 20,
+  -100, # 21
+    -1, # 22,
+    -1, # 23,
+    -1, # 24,
+    -1, # 25,
+    -1, # 26,
+    -1, # 27,
+    -1, # 28,
+    -1, # 29,
+  -100, # 30
+  -100, # 31
+  -100, # 32
+  -100, # 33
+  -100, # 34
+  -100, # 35
+  -100, # 36
+  -100, # 37
+  -100, # 38
+  -100, # 39
+  -100, # 40
+  -100, # 41
+  -100, # 42
+  -100, # 43
+  -100, # 44
+  -100, # 45
+  -100, # 46
+  -100, # 47
+    -3, # 48,
+     1, # 49,
+     0, # 50,
+     1, # 51,
+     1, # 52,
+  -100, # 53
+    -7, # 54,
+    -1, # 55,
+    -1, # 56,
+    -1, # 57,
+  -100, # 58
+    -1, # 59,
+    -3, # 60,
+    -2, # 61,
+    -1, # 62,
+    -1, # 63,
+    -1, # 64,
+    -1, # 65,
+    -1, # 66,
+    -1, # 67,
+     0, # 68,
+     0, # 69,
+    -1, # 70,
+     1, # 71,
+    -1, # 72,
+     0, # 73,
+     1, # 74,
+    -1, # 75,
+    -1, # 76,
+    -1, # 77,
+    -1, # 78,
+    -1, # 79,
+  -100, # 80
+  -100, # 81
+     0, # 82,
+    -1, # 83,
+    -1, # 84,
+     0, # 85,
+     0, # 86,
+     0, # 87,
+  -100, # 88
+    -3, # 89,
+    -1, # 90,
+     0, # 91,
+  -100, # 92
+     1, # 93,
+  -100, # 94
+    -2, # 95,
+    -1, # 96,
+    -1, # 97,
+     0, # 98,
+  -100, # 99
+     1, # 100,
+     1, # 101,
+  -100, # 102
+  -100, # 103
+  -100, # 104
+  -100, # 105
+     0, # 106,
+    -1, # 107,
+    -1, # 108,
+     1, # 109,
+     0, # 110,
+     0, # 111,
+     0, # 112,
+     0, # 113,
+    -1, # 114,
+    -1, # 115,
+     1, # 116,
+    -1, # 117,
+    -1, # 118,
+  -100, # 119
+  -100, # 120
+    -2, # 121,
+     6, # 122,
+  -100, # 123
+     1, # 124,
+    -1, # 125,
+     0, # 126,
+  -100, # 127
+  -100, # 128
+  -100, # 129
+  -100, # 130
+  -100, # 131
+  -100, # 132
+  -100, # 133
+  -100, # 134
+     1, # 135,
+     1, # 136,
+    -1, # 137,
+     0, # 138,
+  -100, # 139
+  -100, # 140
+  -100, # 141
+  -100, # 142
+     6, # 143,
+     0, # 144,
+    -1, # 145,
+    -1, # 146,
+    -2, # 147,
+     1, # 148,
+  -100, # 149
+  -100, # 150
+  -100, # 151
+  -100, # 152
+  -100, # 153
+     5, # 154,
+  -100, # 155
+  -100, # 156
+  -100, # 157
+  -100, # 158
+  -100, # 159
+     1, # 160,
+  -100, # 161
+    -1, # 162,
+    -1, # 163,
+    -1, # 164,
+    -1, # 165,
+  -100, # 166
+  -100, # 167
+  -100, # 168
+  -100, # 169
+  -100, # 170
+  -100, # 171
+  -100, # 172
+  -100, # 173
+  -100, # 174
+  -100, # 175
+  -100, # 176
+  -100, # 177
+  -100, # 178
+  -100, # 179
+  -100, # 180
+  -100, # 181
+  -100, # 182
+  -100, # 183
+  -100, # 184
+  -100, # 185
+  -100, # 186
+  -100, # 187
+  -100, # 188
+  -100, # 189
+  -100, # 190
+  -100, # 191
+  -100, # 192
+  -100, # 193
+  -100, # 194
+  -100, # 195
+  -100, # 196
+  -100, # 197
+  -100, # 198
+  -100, # 199
+  -100, # 200
+  -100, # 201
+  -100, # 202
+  -100, # 203
+  -100, # 204
+  -100, # 205
+  -100, # 206
+  -100, # 207
+  -100, # 208
+  -100, # 209
+  -100, # 210
+  -100, # 211
+  -100, # 212
+  -100, # 213
+  -100, # 214
+  -100, # 215
+  -100, # 216
+  -100, # 217
+  -100, # 218
+  -100, # 219
+  -100, # 220
+  -100, # 221
+  -100, # 222
+  -100, # 223
+  -100, # 224
+  -100, # 225
+  -100, # 226
+  -100, # 227
+  -100, # 228
+  -100, # 229
+  -100, # 230
+  -100, # 231
+  -100, # 232
+  -100, # 233
+  -100, # 234
+  -100, # 235
+  -100, # 236
+  -100, # 237
+  -100, # 238
+  -100, # 239
+  -100, # 240
+  -100, # 241
+  -100, # 242
+  -100, # 243
+  -100, # 244
+  -100, # 245
+  -100, # 246
+  -100, # 247
+  -100, # 248
+  -100, # 249
+  -100, # 250
+  -100, # 251
+  -100, # 252
+  -100, # 253
+  -100, # 254
+  -100, # 255
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/pytest/test_bytecode.py 
new/python-xdis-5.0.4/pytest/test_bytecode.py
--- old/python-xdis-5.0.1/pytest/test_bytecode.py       2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/pytest/test_bytecode.py       2020-08-30 
20:15:58.000000000 +0200
@@ -78,7 +78,10 @@
         assert got_no_dups == expect
 
     got_with_dups = list(findlinestarts(bug_loop.__code__, dup_lines=True))
-    assert len(got_no_dups) < len(got_with_dups)
+    if sys.version_info[0:2] >= (3,9):
+        assert len(got_no_dups) <= len(got_with_dups)
+    else:
+        assert len(got_no_dups) < len(got_with_dups)
 
 # FIXME: a feature of doing code this way is that
 # this compiles to the running version of code
@@ -176,6 +179,6 @@
     assert expect == offset_map
 
 if __name__ == "__main__":
-    test_get_jump_targets()
+    # test_get_jump_targets()
     # test_offset2line()
-    # test_find_linestarts()
+    test_find_linestarts()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/pytest/test_stack_effect.py 
new/python-xdis-5.0.4/pytest/test_stack_effect.py
--- old/python-xdis-5.0.1/pytest/test_stack_effect.py   2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/pytest/test_stack_effect.py   2020-08-30 
20:15:58.000000000 +0200
@@ -22,7 +22,7 @@
     versions = ((2, 5), (2, 6), (2, 7),
                 (3, 0), (3, 1), (3, 2), (3, 3),
                 (3, 4), (3, 5),
-                (3, 6), (3, 7), (3, 8), )
+                (3, 6), (3, 7), (3, 8), (3, 9))
     for version in versions:
         v_str = "%s%s" % (version[0], version[1])
         opc = get_opcode(version, False)
@@ -77,7 +77,10 @@
 
     def test_one(xdis_args, dis_args, has_arg):
         effect = xstack_effect(*xdis_args)
-        check_effect = dis.stack_effect(*dis_args)
+        try:
+            check_effect = dis.stack_effect(*dis_args)
+        except:
+            from trepan.api import debug; debug()
         assert effect != -100, (
             "%d (%s) needs adjusting; should be: should have effect %d"
             % (opcode, opname, check_effect)
@@ -138,5 +141,5 @@
 
 
 if __name__ == "__main__":
-    test_stack_effect_fixed()
-    # test_stack_effect_vs_dis()
+    # test_stack_effect_fixed()
+    test_stack_effect_vs_dis()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/setup.py 
new/python-xdis-5.0.4/setup.py
--- old/python-xdis-5.0.1/setup.py      2020-06-28 18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/setup.py      2020-08-30 20:15:58.000000000 +0200
@@ -1,5 +1,6 @@
 #!/usr/bin/env python
 """Setup script for the 'xdis' distribution."""
+from xdis.version import VERSION
 
 from __pkginfo__ import (
     author,
@@ -10,10 +11,8 @@
     classifiers,
     modname,
     py_modules,
-    scripts,
     short_desc,
     tests_require,
-    VERSION,
     web,
     zip_safe,
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/__init__.py 
new/python-xdis-5.0.4/xdis/__init__.py
--- old/python-xdis-5.0.1/xdis/__init__.py      2020-06-28 18:40:07.000000000 
+0200
+++ new/python-xdis-5.0.4/xdis/__init__.py      2020-08-30 20:15:58.000000000 
+0200
@@ -156,3 +156,8 @@
     code2num,
     co_flags_is_async,
 )
+
+from xdis.version import VERSION
+
+# This ensures VERSION will appear in pydoc
+__version__ = VERSION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/bin/pydisasm.py 
new/python-xdis-5.0.4/xdis/bin/pydisasm.py
--- old/python-xdis-5.0.1/xdis/bin/pydisasm.py  2020-06-28 18:40:07.000000000 
+0200
+++ new/python-xdis-5.0.4/xdis/bin/pydisasm.py  2020-08-30 20:15:58.000000000 
+0200
@@ -18,13 +18,17 @@
 
 PATTERNS = ("*.pyc", "*.pyo")
 
+if click.__version__ >= "7.":
+    case_sensitive={"case_sensitive": False}
+else:
+    case_sensitive={}
 
 @click.command()
 @click.option(
     "--format",
     "-F",
     type=click.Choice(["xasm", "bytes", "classic", "extended", 
"extended-bytes", "header"],
-                      case_sensitive=False),
+                      **case_sensitive),
 )
 @click.version_option(version=VERSION)
 @click.argument("files", nargs=-1, type=click.Path(readable=True), 
required=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/lineoffsets.py 
new/python-xdis-5.0.4/xdis/lineoffsets.py
--- old/python-xdis-5.0.1/xdis/lineoffsets.py   2020-06-28 18:40:07.000000000 
+0200
+++ new/python-xdis-5.0.4/xdis/lineoffsets.py   2020-08-30 20:15:58.000000000 
+0200
@@ -49,6 +49,7 @@
 
     def _populate_lines(self):
         code = self.code
+        code_map = {code.co_name: code}
         last_line_info = None
         for instr in get_instructions_bytes(
             bytecode=code.co_code,
@@ -75,12 +76,15 @@
         if self.include_children:
             for c in code.co_consts:
                 if iscode(c):
+                    code_map[c.co_name] = c
                     code_info = LineOffsetInfo(self.opc, c, True)
+                    code_map.update(code_info.code_map)
                     self.children[code_info.name] = code_info
                     self.lines += code_info.lines
                     pass
                 pass
             pass
+        self.code_map = code_map
 
 
     def __str__(self):
@@ -152,19 +156,18 @@
             print("%s has no children" % (code_info.name))
 
         print("\tlines with children and dups:\n\t%s" %
-              code_info.line_numbers(include_dups=True, include_children=True))
+              code_info.line_numbers(include_dups=True))
         print(
             "\tlines without children and without dups:\n\t%s" %
-            code_info.line_numbers(include_dups=False, include_children=False))
-        print(
-            "\tlines without dups and children:\n\t%s"
-            % code_info.line_numbers(include_dups=False, include_children=True)
-        )
+            code_info.line_numbers(include_dups=False))
         print("Offsets in %s" % code_info.name, code_info.offsets)
-        lines = code_info.line_numbers(include_offsets=True, 
include_children=True)
+        lines = code_info.line_numbers(include_offsets=True)
         for line_num, li in lines.items():
             print("\tline: %4d: %s" % (line_num, ", ".join([str(i.offsets) for 
i in li])))
         print("=" * 30)
+        for mod, code in code_info.code_map.items():
+            print(mod, ":", code)
+        print("=" * 30)
         for li in code_info.lines:
             print(li)
             pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/magics.py 
new/python-xdis-5.0.4/xdis/magics.py
--- old/python-xdis-5.0.1/xdis/magics.py        2020-06-28 18:40:07.000000000 
+0200
+++ new/python-xdis-5.0.4/xdis/magics.py        2020-08-30 20:15:58.000000000 
+0200
@@ -125,7 +125,7 @@
 # that's come before.  The tags are included in the following table, starting
 # with Python 3.2a0.
 
-# The below is taken from from Python/import.c, and
+# The below is taken from from Python/import.c, and more recently
 # Lib/importlib/_bootstrap.py and other sources
 
 #                  magic,  canonic version number
@@ -137,6 +137,7 @@
 # 1.5, 1.5.1, 1.5.2
 add_magic_from_int(20121, "1.5")  # 1.5.1, 1.5.2
 add_magic_from_int(50428, "1.6")  # 1.6
+
 add_magic_from_int(50823, "2.0")  # 2.0, 2.0.1
 add_magic_from_int(60202, "2.1")  # 2.1, 2.1.1, 2.1.2
 add_magic_from_int(60717, "2.2")  # 2.2
@@ -282,7 +283,7 @@
 
 # Reverse evaluation order of key: value in dict comprehensions
 # #35224
-add_magic_from_int(3411, "3.8.0a1+")
+add_magic_from_int(3411, "3.8.0b2+")
 
 # Swap the position of positional args and positional only args in
 # ast.arguments #37593)
@@ -291,8 +292,24 @@
 # Fix "break" and "continue" in "finally" #37830
 add_magic_from_int(3413, "3.8.0rc1+")
 
+# add LOAD_ASSERTION_ERROR #34880
+add_magic_from_int(3420, "3.9.0a0")
+
+# simplified bytecode for with blocks #32949
+add_magic_from_int(3421, "3.9.0a0")
+
+# Remove BEGIN_FINALLY, END_FINALLY, CALL_FINALLY, POP_FINALLY bytecodes #33387
 add_magic_from_int(3422, "3.9.0alpha1")
 
+# add IS_OP, CONTAINS_OP and JUMP_IF_NOT_EXC_MATCH bytecodes #39156
+add_magic_from_int(3423, "3.9.0a0")
+
+# simplify bytecodes for *value unpacking
+add_magic_from_int(3424, "3.9.0a2")
+
+# simplify bytecodes for **value unpacking
+add_magic_from_int(3425, "3.9.0beta5")
+
 # Weird ones
 # WTF? Python 3.2.5 and PyPy have weird magic numbers
 
@@ -353,7 +370,7 @@
 add_canonic_versions("3.5 3.5.0 3.5.1", "3.5")
 add_canonic_versions("3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 3.5.7 3.5.8 3.5.9", 
"3.5.2")
 add_canonic_versions(
-    "3.6b2 3.6 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.6.9 
3.6.10",
+    "3.6b2 3.6 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.6.9 
3.6.10 3.6.11 3.6.12",
     "3.6rc1",
 )
 
@@ -369,13 +386,16 @@
 add_canonic_versions("2.7.8Pyston", "2.7.7Pyston")
 add_canonic_versions("3.7.0alpha3", "3.7.0alpha3")
 add_canonic_versions(
-    "3.7 3.7.0beta5 3.7.1 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7", "3.7.0"
+    "3.7 3.7.0beta5 3.7.1 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.7.8 3.7.9", 
"3.7.0"
 )
 add_canonic_versions("3.8.0alpha0 3.8.0alpha3 3.8.0a0", "3.8.0a3+")
-add_canonic_versions("3.8b4 3.8.0candidate1 3.8 3.8.0 3.8.1 3.8.2 3.8.3", 
"3.8.0rc1+")
+add_canonic_versions("3.8b4 3.8.0candidate1 3.8 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 
3.8.5", "3.8.0rc1+")
 add_canonic_versions(
     "3.9 3.9.0 3.9.0a1+ 3.9.0a2+ 3.9.0alpha1 3.9.0alpha2", "3.9.0alpha1"
 )
+add_canonic_versions(
+    "3.9 3.9.0 3.9.0b5+", "3.9.0beta5"
+)
 
 # The canonic version for a canonic version is itself
 for v in versions.values():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/op_imports.py 
new/python-xdis-5.0.4/xdis/op_imports.py
--- old/python-xdis-5.0.1/xdis/op_imports.py    2020-06-28 18:40:07.000000000 
+0200
+++ new/python-xdis-5.0.4/xdis/op_imports.py    2020-08-30 20:15:58.000000000 
+0200
@@ -120,7 +120,9 @@
     '3.8' : opcode_38,
     '3.9.0alpha1' : opcode_39,
     '3.9.0alpha2' : opcode_39,
+    '3.9.0beta5' : opcode_39,
     '3.9' : opcode_39,
+    3.9 : opcode_39,
 
     '2.6pypy':  opcode_26pypy,
     '2.7pypy':  opcode_27pypy,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/base.py 
new/python-xdis-5.0.4/xdis/opcodes/base.py
--- old/python-xdis-5.0.1/xdis/opcodes/base.py  2020-06-28 18:40:07.000000000 
+0200
+++ new/python-xdis-5.0.4/xdis/opcodes/base.py  2020-08-30 20:15:58.000000000 
+0200
@@ -302,6 +302,11 @@
             break
     return ".".join(reversed(resolved))
 
+def extended_format_ATTR(opc, instructions):
+    if instructions[1].opname in ("LOAD_CONST", "LOAD_GLOBAL",
+                                  "LOAD_ATTR", "LOAD_NAME"):
+        return "%s.%s" % (instructions[1].argrepr, instructions[0].argrepr)
+
 def extended_format_MAKE_FUNCTION_older(opc, instructions):
     """make_function_inst should be a "MAKE_FUNCTION" or "MAKE_CLOSURE" 
instruction. TOS
     should have the function or closure name.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_15.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_15.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_15.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_15.py     2020-08-30 
20:15:58.000000000 +0200
@@ -26,6 +26,7 @@
     compare_op,
     const_op,
     def_op,
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RAISE_VARARGS_older,
@@ -231,7 +232,9 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_16.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_16.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_16.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_16.py     2020-08-30 
20:15:58.000000000 +0200
@@ -25,6 +25,9 @@
 
 import xdis.opcodes.opcode_15 as opcode_15
 from xdis.opcodes.base import (
+    extended_format_ATTR,
+    extended_format_MAKE_FUNCTION_older,
+    extended_format_RETURN_VALUE,
     init_opdata,
     nargs_op,
     finalize_opcodes,
@@ -57,4 +60,10 @@
     "MAKE_FUNCTION": format_MAKE_FUNCTION_default_argc,
 }
 
+opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
+    "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
+    "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
+}
 finalize_opcodes(l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_20.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_20.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_20.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_20.py     2020-08-30 
20:15:58.000000000 +0200
@@ -21,13 +21,14 @@
 
 import xdis.opcodes.opcode_21 as opcode_21
 from xdis.opcodes.base import (
-    init_opdata,
+    extended_format_ATTR,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RETURN_VALUE,
     finalize_opcodes,
     format_CALL_FUNCTION_pos_name_encoded,
     format_MAKE_FUNCTION_default_argc,
     format_extended_arg,
+    init_opdata,
     rm_op,
     update_pj2,
 )
@@ -58,6 +59,8 @@
 }
 
 opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_21.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_21.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_21.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_21.py     2020-08-30 
20:15:58.000000000 +0200
@@ -21,11 +21,12 @@
 
 import xdis.opcodes.opcode_22 as opcode_22
 from xdis.opcodes.base import (
-    init_opdata,
+    extended_format_ATTR,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RETURN_VALUE,
     finalize_opcodes,
     format_extended_arg,
+    init_opdata,
     rm_op,
     update_pj2,
 )
@@ -54,6 +55,8 @@
 }
 
 opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_22.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_22.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_22.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_22.py     2020-08-30 
20:15:58.000000000 +0200
@@ -8,6 +8,7 @@
 import xdis.opcodes.opcode_2x as opcode_2x
 from xdis.opcodes.base import (
     def_op,
+    extended_format_ATTR,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RETURN_VALUE,
     init_opdata,
@@ -36,6 +37,8 @@
 }
 
 opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_23.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_23.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_23.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_23.py     2020-08-30 
20:15:58.000000000 +0200
@@ -8,6 +8,7 @@
 
 import xdis.opcodes.opcode_2x as opcode_2x
 from xdis.opcodes.base import (
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RAISE_VARARGS_older,
@@ -40,9 +41,11 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
 
 finalize_opcodes(l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_24.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_24.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_24.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_24.py     2020-08-30 
20:15:58.000000000 +0200
@@ -9,6 +9,7 @@
 import xdis.opcodes.opcode_2x as opcode_2x
 from xdis.opcodes.base import (
     def_op,
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RAISE_VARARGS_older,
@@ -52,7 +53,9 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
-    "RETURN_VALUE": extended_format_RETURN_VALUE,
-    "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
+    "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
+    "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_25.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_25.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_25.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_25.py     2020-08-30 
20:15:58.000000000 +0200
@@ -9,6 +9,7 @@
 import xdis.opcodes.opcode_24 as opcode_24
 from xdis.opcodes.base import (
     def_op,
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RAISE_VARARGS_older,
@@ -47,8 +48,10 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
 finalize_opcodes(l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_26.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_26.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_26.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_26.py     2020-08-30 
20:15:58.000000000 +0200
@@ -22,6 +22,7 @@
 
 from xdis.opcodes.base import (
     store_op,
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RAISE_VARARGS_older,
@@ -59,8 +60,10 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
-    "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
+    "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
 finalize_opcodes(l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_26pypy.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_26pypy.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_26pypy.py 2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_26pypy.py 2020-08-30 
20:15:58.000000000 +0200
@@ -22,7 +22,10 @@
 
 import xdis.opcodes.opcode_26 as opcode_26
 from xdis.opcodes.base import (
-    finalize_opcodes, init_opdata,
+    extended_format_ATTR,
+    extended_format_RETURN_VALUE,
+    finalize_opcodes,
+    init_opdata,
     jrel_op, name_op, nargs_op, varargs_op,
     update_pj2
     )
@@ -51,3 +54,9 @@
 update_pj2(globals(), l)
 
 finalize_opcodes(l)
+
+opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
+    "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_27.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_27.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_27.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_27.py     2020-08-30 
20:15:58.000000000 +0200
@@ -23,6 +23,7 @@
 from xdis.opcodes.base import (
     compare_op,
     def_op,
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RAISE_VARARGS_older,
@@ -103,7 +104,9 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "LOAD_ATTR": extended_format_ATTR,
+    "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
-    "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
+    "STORE_ATTR": extended_format_ATTR,
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_27pypy.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_27pypy.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_27pypy.py 2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_27pypy.py 2020-08-30 
20:15:58.000000000 +0200
@@ -9,6 +9,7 @@
 import xdis.opcodes.opcode_27 as opcode_27
 from xdis.opcodes.base import (
     def_op,
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RAISE_VARARGS_older,
@@ -70,7 +71,9 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "LOAD_ATTR": extended_format_ATTR,
+    "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
-    "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
+    "STORE_ATTR": extended_format_ATTR,
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_30.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_30.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_30.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_30.py     2020-08-30 
20:15:58.000000000 +0200
@@ -8,9 +8,9 @@
 
 from xdis.opcodes.base import (
     def_op,
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     finalize_opcodes,
-    format_CALL_FUNCTION_pos_name_encoded,
     format_MAKE_FUNCTION_default_argc,
     format_extended_arg,
     init_opdata,
@@ -62,6 +62,8 @@
 }
 
 opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "STORE_ATTR": extended_format_ATTR,
 }
 finalize_opcodes(l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_31.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_31.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_31.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_31.py     2020-08-30 
20:15:58.000000000 +0200
@@ -8,9 +8,9 @@
 
 from xdis.opcodes.base import (
     def_op,
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     finalize_opcodes,
-    format_CALL_FUNCTION_pos_name_encoded,
     format_MAKE_FUNCTION_default_argc,
     format_extended_arg,
     init_opdata,
@@ -49,6 +49,8 @@
 }
 
 opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "STORE_ATTR": extended_format_ATTR,
 }
 finalize_opcodes(l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_32.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_32.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_32.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_32.py     2020-08-30 
20:15:58.000000000 +0200
@@ -8,6 +8,7 @@
 
 import xdis.opcodes.opcode_3x as opcode_3x
 from xdis.opcodes.base import (
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     extended_format_MAKE_FUNCTION_older,
     extended_format_RAISE_VARARGS_older,
@@ -44,9 +45,11 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
 
 finalize_opcodes(l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_32pypy.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_32pypy.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_32pypy.py 2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_32pypy.py 2020-08-30 
20:15:58.000000000 +0200
@@ -7,6 +7,8 @@
 """
 
 from xdis.opcodes.base import (
+    extended_format_ATTR,
+    extended_format_RETURN_VALUE,
     finalize_opcodes,
     init_opdata,
     jrel_op,
@@ -45,3 +47,9 @@
 update_pj3(globals(), l)
 
 finalize_opcodes(l)
+
+opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
+    "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_33.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_33.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_33.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_33.py     2020-08-30 
20:15:58.000000000 +0200
@@ -42,6 +42,11 @@
     return ("%d positional, %d name and default" %
             (pos_args, name_default))
 
+def extended_format_ATTR(opc, instructions):
+    if instructions[1].opname in ("LOAD_CONST", "LOAD_GLOBAL",
+                                  "LOAD_ATTR", "LOAD_NAME"):
+        return "%s.%s " % (instructions[1].argrepr, instructions[0].argrepr)
+
 def extended_format_MAKE_FUNCTION(opc, instructions):
     """make_function_inst should be a "MAKE_FUNCTION" or "MAKE_CLOSURE" 
instruction. TOS
     should have the function or closure name.
@@ -69,7 +74,9 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_33pypy.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_33pypy.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_33pypy.py 2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_33pypy.py 2020-08-30 
20:15:58.000000000 +0200
@@ -7,6 +7,8 @@
 """
 
 from xdis.opcodes.base import (
+    extended_format_ATTR,
+    extended_format_RETURN_VALUE,
     finalize_opcodes,
     init_opdata,
     jrel_op,
@@ -45,3 +47,9 @@
 update_pj3(globals(), l)
 
 finalize_opcodes(l)
+
+opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
+    "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_34.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_34.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_34.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_34.py     2020-08-30 
20:15:58.000000000 +0200
@@ -7,6 +7,7 @@
 """
 
 from xdis.opcodes.base import (
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     extended_format_RAISE_VARARGS_older,
     finalize_opcodes,
@@ -47,8 +48,10 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": opcode_33.extended_format_MAKE_FUNCTION,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
+    "STORE_ATTR": extended_format_ATTR,
 }
 
 finalize_opcodes(l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_35.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_35.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_35.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_35.py     2020-08-30 
20:15:58.000000000 +0200
@@ -22,6 +22,7 @@
 
 from xdis.opcodes.base import (
     def_op,
+    extended_format_ATTR,
     extended_format_CALL_FUNCTION,
     extended_format_RAISE_VARARGS_older,
     extended_format_RETURN_VALUE,
@@ -100,9 +101,11 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
 
 finalize_opcodes(l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_35pypy.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_35pypy.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_35pypy.py 2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_35pypy.py 2020-08-30 
20:15:58.000000000 +0200
@@ -8,6 +8,8 @@
 
 from xdis.opcodes.base import (
     def_op,
+    extended_format_ATTR,
+    extended_format_RETURN_VALUE,
     finalize_opcodes,
     init_opdata,
     jrel_op,
@@ -48,3 +50,9 @@
 update_pj3(globals(), l)
 
 finalize_opcodes(l)
+
+opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
+    "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_36.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_36.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_36.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_36.py     2020-08-30 
20:15:58.000000000 +0200
@@ -22,6 +22,7 @@
 
 from xdis.opcodes.base import(
     def_op,
+    extended_format_ATTR,
     extended_format_RAISE_VARARGS_older,
     extended_format_RETURN_VALUE,
     finalize_opcodes,
@@ -306,10 +307,12 @@
         return s
 
 opcode_extended_fmt = {
-    "CALL_METHOD": extended_format_CALL_METHOD,
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
     "CALL_FUNCTION_KW": extended_format_CALL_FUNCTION_KW,
+    "CALL_METHOD": extended_format_CALL_METHOD,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_36pypy.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_36pypy.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_36pypy.py 2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_36pypy.py 2020-08-30 
20:15:58.000000000 +0200
@@ -9,6 +9,7 @@
 from xdis.opcodes.base import (
     format_CALL_FUNCTION_pos_name_encoded,
     def_op,
+    extended_format_ATTR,
     extended_format_RAISE_VARARGS_older,
     extended_format_RETURN_VALUE,
     finalize_opcodes,
@@ -79,9 +80,11 @@
 }
 
 opcode_extended_fmt = {
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
 
 finalize_opcodes(l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_37.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_37.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_37.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_37.py     2020-08-30 
20:15:58.000000000 +0200
@@ -33,7 +33,7 @@
     update_pj3
     )
 
-from xdis.opcodes.opcode_33 import extended_format_MAKE_FUNCTION
+from xdis.opcodes.opcode_33 import extended_format_MAKE_FUNCTION, 
extended_format_ATTR
 import xdis.opcodes.opcode_36 as opcode_36
 
 version = 3.7
@@ -141,9 +141,11 @@
 opcode_extended_fmt = {
     "CALL_FUNCTION": opcode_36.extended_format_CALL_FUNCTION,
     "CALL_METHOD": opcode_36.extended_format_CALL_METHOD,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
 
 update_pj3(globals(), l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_38.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_38.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_38.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_38.py     2020-08-30 
20:15:58.000000000 +0200
@@ -30,7 +30,7 @@
     update_pj3,
 )
 
-from xdis.opcodes.opcode_33 import extended_format_MAKE_FUNCTION
+from xdis.opcodes.opcode_33 import extended_format_ATTR, 
extended_format_MAKE_FUNCTION
 import xdis.opcodes.opcode_37 as opcode_37
 from xdis.opcodes.opcode_36 import (
     extended_format_CALL_FUNCTION,
@@ -55,16 +55,16 @@
 rm_op(l, "SETUP_LOOP", 120)
 rm_op(l, "SETUP_EXCEPT", 121)
 
-# These are new since Python 3.7
+# These are new/changed since Python 3.7
 
 #          OP NAME            OPCODE POP PUSH
 # --------------------------------------------
-def_op(l, "ROT_FOUR", 6, 4, 4)
-def_op(l, "BEGIN_FINALLY", 53, 0, 6)
-def_op(l, "END_ASYNC_FOR", 54, 7, 0)  # POP is 0, when not 7
-def_op(l, "END_FINALLY", 88, 6, 0)  # POP is 6, when not 1
-jrel_op(l, "CALL_FINALLY", 162, 0, 1)
-nargs_op(l, "POP_FINALLY", 163, 6, 0)  # PUSH/POP vary
+def_op(l, "ROT_FOUR",          6,      4, 4)  # Opcode number changed from 5 
to 6. Why?
+def_op(l, "BEGIN_FINALLY",     53,     0, 6)
+def_op(l, "END_ASYNC_FOR",     54,     7, 0)  # POP is 0, when not 7
+def_op(l, "END_FINALLY",       88,     6, 0)  # POP is 6, when not 1
+jrel_op(l, "CALL_FINALLY",    162,     0, 1)
+nargs_op(l, "POP_FINALLY",    163,     6, 0)  # PUSH/POP vary
 
 format_value_flags = opcode_37.format_value_flags
 
@@ -81,9 +81,11 @@
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
     "CALL_METHOD": extended_format_CALL_METHOD,
+    "LOAD_ATTR": extended_format_ATTR,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION,
     "RAISE_VARARGS": opcode_37.extended_format_RAISE_VARARGS,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
 update_pj3(globals(), l)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/opcodes/opcode_39.py 
new/python-xdis-5.0.4/xdis/opcodes/opcode_39.py
--- old/python-xdis-5.0.1/xdis/opcodes/opcode_39.py     2020-06-28 
18:40:07.000000000 +0200
+++ new/python-xdis-5.0.4/xdis/opcodes/opcode_39.py     2020-08-30 
20:15:58.000000000 +0200
@@ -14,16 +14,18 @@
 #  along with this program; if not, write to the Free Software
 #  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
 """
-CPython 3.8 bytecode opcodes
+CPython 3.9 bytecode opcodes
 
 This is a like Python 3.9's opcode.py
 """
 
 from xdis.opcodes.base import(
     def_op,
+    extended_format_ATTR,
     extended_format_RETURN_VALUE,
     finalize_opcodes,
     init_opdata,
+    jabs_op,
     rm_op,
     update_pj3
     )
@@ -54,17 +56,32 @@
 rm_op(l, "WITH_CLEANUP_START", 81)
 rm_op(l, "WITH_CLEANUP_FINISH", 82)
 rm_op(l, "END_FINALLY", 88)
+rm_op(l, "BUILD_LIST_UNPACK", 149)
+rm_op(l, "BUILD_MAP_UNPACK", 150)
+rm_op(l, "BUILD_MAP_UNPACK_WITH_CALL", 151)
+rm_op(l, "BUILD_TUPLE_UNPACK", 152)
+rm_op(l, "BUILD_SET_UNPACK", 153)
+rm_op(l, "BUILD_TUPLE_UNPACK_WITH_CALL", 158)
 rm_op(l, "CALL_FINALLY", 162)
 rm_op(l, "POP_FINALLY", 163)
 
 
 # These are new since Python 3.9
 
-#          OP NAME              OPCODE  POP PUSH
-#-----------------------------------------------
-def_op(l, 'RERAISE',                48,   3, 0)
-def_op(l, 'WITH_EXCEPT_START',      49,   0, 1)
-def_op(l, 'LOAD_ASSERTION_ERROR',   74,   0, 1)
+#          OP NAME               OPCODE  POP PUSH
+#------------------------------------------------
+def_op(l, 'RERAISE',                 48,   3, 0)
+def_op(l, 'WITH_EXCEPT_START',       49,   0, 1)
+def_op(l, 'LOAD_ASSERTION_ERROR',    74,   0, 1)
+def_op(l, 'LIST_TO_TUPLE',           82,   1, 1)
+
+def_op(l, 'IS_OP',                  117,   2, 1)
+jabs_op(l, 'JUMP_IF_NOT_EXC_MATCH', 121,   2, 0)
+def_op(l, 'CONTAINS_OP',            118,   2, 1)
+def_op(l, 'LIST_EXTEND',            162,   2, 1)
+def_op(l, 'SET_UPDATE',             163,   2, 1)
+def_op(l, 'DICT_MERGE',             164,   2, 1)
+def_op(l, 'DICT_UPDATE',            165,   2, 1)
 
 format_value_flags = opcode_38.format_value_flags
 
@@ -80,10 +97,12 @@
 
 opcode_extended_fmt = {
     "CALL_FUNCTION": extended_format_CALL_FUNCTION,
+    "LOAD_ATTR": extended_format_ATTR,
     "CALL_METHOD": extended_format_CALL_METHOD,
     "MAKE_FUNCTION": extended_format_MAKE_FUNCTION,
     "RAISE_VARARGS": extended_format_RAISE_VARARGS,
     "RETURN_VALUE": extended_format_RETURN_VALUE,
+    "STORE_ATTR": extended_format_ATTR,
 }
 
 update_pj3(globals(), l)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-xdis-5.0.1/xdis/version.py 
new/python-xdis-5.0.4/xdis/version.py
--- old/python-xdis-5.0.1/xdis/version.py       2020-06-28 18:40:07.000000000 
+0200
+++ new/python-xdis-5.0.4/xdis/version.py       2020-08-30 20:15:58.000000000 
+0200
@@ -1,3 +1,3 @@
 # This file is suitable for sourcing inside POSIX shell as
 # well as importing into Python
-VERSION="5.0.1"  # noqa
+VERSION="5.0.4"  # noqa


Reply via email to