[issue33475] Fix converting AST expression to string and optimize parenthesis
Serhiy Storchaka
report at bugs.python.org
Sat May 12 18:22:34 EDT 2018
New submission from Serhiy Storchaka <storchaka+cpython at 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 <report at bugs.python.org>
<https://bugs.python.org/issue33475>
_______________________________________
More information about the Python-bugs-list
mailing list