Issue33475
Created on 2018-05-12 22:22 by serhiy.storchaka, last changed 2022-04-11 14:59 by admin. This issue is now closed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 6774 | merged | serhiy.storchaka, 2018-05-12 22:31 | |
| PR 6927 | merged | serhiy.storchaka, 2018-05-17 06:45 | |
| Messages (4) | |||
|---|---|---|---|
| msg316439 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2018-05-12 22:22 | |
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.
|
|||
| msg316881 - (view) | Author: Łukasz Langa (lukasz.langa) * | Date: 2018-05-17 03:17 | |
New changeset 64fddc423fcbe90b8088446c63385ec0aaf3077c by Łukasz Langa (Serhiy Storchaka) in branch 'master': bpo-33475: Fix and improve converting annotations to strings. (GH-6774) https://github.com/python/cpython/commit/64fddc423fcbe90b8088446c63385ec0aaf3077c |
|||
| msg316887 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2018-05-17 07:03 | |
There are still problems with f-strings like f'''{"'"}''' => f'{"\'"}' (SyntaxError: f-string expression part cannot include a backslash). But this is a separate hard issue (issue33552).
|
|||
| msg317177 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2018-05-20 15:06 | |
New changeset b32f8897eafcf335f9e9899c5e622a0b27679437 by Serhiy Storchaka in branch '3.7': [3.7] bpo-33475: Fix and improve converting annotations to strings. (GH-6774). (GH-6927) https://github.com/python/cpython/commit/b32f8897eafcf335f9e9899c5e622a0b27679437 |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:59:00 | admin | set | github: 77656 |
| 2018-05-23 05:18:22 | serhiy.storchaka | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
| 2018-05-20 15:06:10 | serhiy.storchaka | set | messages: + msg317177 |
| 2018-05-17 07:03:45 | serhiy.storchaka | set | messages: + msg316887 |
| 2018-05-17 06:45:07 | serhiy.storchaka | set | pull_requests: + pull_request6598 |
| 2018-05-17 03:17:53 | lukasz.langa | set | messages: + msg316881 |
| 2018-05-14 20:20:14 | gvanrossum | set | nosy:
- gvanrossum |
| 2018-05-12 22:38:25 | serhiy.storchaka | set | nosy:
+ gvanrossum |
| 2018-05-12 22:31:49 | serhiy.storchaka | set | keywords:
+ patch stage: patch review pull_requests: + pull_request6462 |
| 2018-05-12 22:22:34 | serhiy.storchaka | create | |