python-uncompyle6 v3.6.2 Release Notes

Release Date: 2020-01-05 // about 2 years ago
  • Yet again the focus has been on just fixing bugs, mostly geared in the
    later 3.x range. To get some sense what sill needs fixing, consult
    โœ… test/stdlib/runtests.sh. And that only has a portion of what's known.

    make_function.py has gotten so complex that it was split out into 3 parts
    to handle different version ranges: Python <3, Python 3.0..3.6 and Python 3.7+.

    ๐Ÿ“„ An important fix is that we had been dropping docstrings in Python 3 code as a result
    ๐Ÿ”€ of a incomplete merge from the decompile3 base with respect to the transform phase.

    Also important (at least to me) is that we can now handle 3.6+
    variable type annotations. Some of the decompile3 code uses that in
    its source code, and I now use variable annotations in conjunction
    with mypy in some of my other Python projects

    Code generation for imports, especially where the import is dotted
    ๐Ÿš€ changed a bit in 3.7; with this release are just now tracking that
    ๐Ÿ”„ change better. For this I've added pseudo instruction
    IMPORT_NAME_ATTR, derived from the IMPORT_NAME instruction, to
    indicate when an import contains a dotted import. Similarly, code for
    3.7 import .. as is basically the same as from .. import, the
    only difference is the target of the name changes to an "alias" in the
    former. As a result, the disambiguation is now done on the semantic
    ๐Ÿ“œ action side, rathero than in parsing grammar rules.

    ๐Ÿ›  Some small specific fixes:

    • ๐Ÿ“œ 3.7+ some chained compare parsing has been fixed. Other remain.
    • ๐Ÿ‘ better if/else rule checking in the 3.4 and below range.
    • ๐Ÿ›  3.4+ keyword-only parameter handling was fixed more generally
    • ๐Ÿ›  3.3 .. 3.5 keyword-only parameter args in lambda was fixed