-
-
Notifications
You must be signed in to change notification settings - Fork 30.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gh-104799: Default missing lists in AST to the empty list #104834
Conversation
(This PR is on top of the changes from #104828.) |
Ideally I'd like this to go into 3.12 to fix the BC issues in #104799, but maybe it's too late. |
So I understand correctly, this changes the representation of a missing list from I am a little concerned (just a little) about the performance implications. |
No, it changes from raising a TypeError to PyList_New(0). This is easier to see in the generated code than in the code generator: @@ -9306,10 +9404,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i; So this shouldn't affect performance for code that was already working. |
Thanks @JelleZijlstra for the PR 🌮🎉.. I'm working now to backport this PR to: 3.12. |
…onGH-104834) (cherry picked from commit 77d2579) Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com> Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
GH-105213 is a backport of this pull request to the 3.12 branch. |
Motivated by #104799: avoid breaking backward compatibility with the manual creation of
ast.FunctionDef
nodes. Now, if a list-type field is missing, we simply default to the empty list.This affects all AST nodes though, not just the new ones.
__match_args__
attributes of AST nodes #104799📚 Documentation preview 📚: https://cpython-previews--104834.org.readthedocs.build/