New submission from Serhiy Storchaka <storchaka+cpyt...@gmail.com>: The proposed patch fixes bugs in ast_unparse.c, makes it generating cleaner string representation, and makes the code cleaner.
Known fixed bugs: 1. Extended slices crash Python. "s[a, b:c]". 2. 1-tuples produce illegal syntax: "(a,)" => "(, a)". 3. Lambdas in f-strings produce illegal syntax. "f'{(lambda x: x)}'" => "f'{lambda x: x}'". 4. Some expressions that need parenthesis don't have them. E.g. "lambda x: (x, x)" => "lambda x: x, x". 5. Generators and yield expression always must be surrounded with parenthesis. "(x for x in y)" => "x for x in y", "(yield)" => "yield". 6. Top-level tuples must be surrounded with parenthesis. "(a, b)" => "a, b". Produced string representation is now more clean and almost not contains redundant parenthesis. "(a + b) * (c + d)" => "(a + b) * (c + d)" "(a * b) + (c * d)" => "a * b + c * d" "(a * b) * (c * d)" => "a * b * (c * d)" "(a ** b) ** (c ** d)" => "(a ** b) ** c ** d" "[(a + b)]" => "[a + b]" "[(i ** 2) for i in range(1, (a + 1))]" => "[i ** 2 for i in range(1, a + 1)]" Maybe other bugs were fixed in process. And finally I use macros for simple repeated fragments of code like if (-1 == append_charp(writer, str)) { return -1; } This made the meaningful code much shorter and saved around 250 lines of code. ---------- components: Interpreter Core messages: 316439 nosy: lukasz.langa, serhiy.storchaka priority: normal severity: normal status: open title: Fix converting AST expression to string and optimize parenthesis type: behavior versions: Python 3.7, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue33475> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com