Samish
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