-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
bpo-43950: Specialize tracebacks for subscripts/binary ops #27037
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
Conversation
For the |
cc31c2d
to
413d601
Compare
@@ -512,8 +516,143 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent, i | |||
return err; | |||
} | |||
|
|||
/* AST based Traceback Specialization |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought from the title of the PR that it's related to Mark's bytecode specializations. Are you settled on using this word? Seems a bit overloaded now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
They are not relevant at all, but I can see the confusion. Any suggestions on alternative renaming?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here's how clang's documentation talks about their carets: https://clang.llvm.org/diagnostics.html
So following from there maybe something like Precision traceback
or Pointing traceback
because we're pointing to a specific part in the expression or trying to make it more precise?
@isidentical this may need rebasing now that the other PR is merged |
Let's focus on land this one next @ammaraskar @isidentical |
@ammaraskar after your +def _extract_anchors_from_segment(segment):
+ import ast
+
+ tree = ast.parse(segment)
+ if len(tree.body) == 1:
+ statement = tree.body[0]
+ match statement:
+ case ast.Expr(expr):
+ match expr:
+ case ast.BinOp():
+ operator_str = segment[expr.left.end_col_offset:expr.right.col_offset]
+ operator_offset = len(operator_str) - len(operator_str.lstrip())
+ return operator_offset, operator_offset + 1
+ case ast.Subscript():
+ return expr.value.end_col_offset, expr.slice.col_offset
+ return -1, -1 |
94801f4
to
26e900e
Compare
Co-authored-by: Batuhan Taskaya <[email protected]>
d77011d
to
d79d365
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just some basic stylistic suggestions mostly, looks good to me.
4a9a967
to
26430d4
Compare
🤖 New build scheduled with the buildbot fleet by @isidentical for commit 26430d4 🤖 If you want to schedule another build, you need to add the ":hammer: test-with-buildbots" label again. |
Ping @pablogsal |
Apparently ASAN is failing, though not sure if it is relevant. |
Python/traceback.c
Outdated
err = PyFile_WriteString(" ", f); | ||
if (err < 0) { | ||
goto done; | ||
if (source_line) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is this guarded by source_line
? How we can correctly calculate the offsets if we cannot get the line to calculate the characters? How can tHe code path when this is false and we continue with the bytes be corrent?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@isidentical This still applies, could you please check out what's going on here?
@isidentical I have pushed 081738d to greatly simplify the code structure. I think it reads better now. Please, check it out |
Thanks @pablogsal, it LGTM. Feel free to merge! |
@isidentical Please, check out #27037 (comment) |
Ah, I think that is not relevant. I just checked again, and it seems like |
Also I am not really sure if we get any cases where primary/secondary will be different, but if so I think it would be nicer to make amendments to the traceback.py logic to do the same. |
In this PR or in a different one? |
We should also add some tests where we fail to parse the source. Is this covered currently? |
This PR. |
Also, I am not very sure what you refer to with "will be different". Can you elaborate?
I don't see this covered. Could you add a test for this? |
Also, I am not very sure what you refer to with "will be different". Can
you elaborate?
With the latest commit you pass primary/secondary (^/~) characters to the
AST visitors. But for both of the cases they get assigned the same values
so that is what I meant by 'will be different' (are there any other
specializations that you plan would change the values for these 2
variables).
I am currently unavailable to add a test, but can try to write something
off tonight.
…On Mon, Jul 12, 2021, 3:38 PM Pablo Galindo Salgado < ***@***.***> wrote:
Also I am not really sure if we get any cases where primary/secondary will
be different, but if so I think it would be nicer to make amendments to the
traceback.py logic to do the same.
Also, I am not very sure what you refer to with "will be different". Can
you elaborate?
We should also add some tests where we fail to parse the source. Is this
covered currently?
I don't see this covered. Could you add a test for this?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#27037 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ALJKHQJO6MPLFWJU5R75MZ3TXLO37ANCNFSM473CEDAA>
.
|
5d2036a
to
a67c8aa
Compare
a67c8aa
to
045c491
Compare
We now have a test for when parsing fails and the |
Yes, the most important step: celebrate 🎉 (also pray for the buildbots to not fail 😉 ) |
Since python/cpython#27037, they can include tildes in addition to the carets.
Since python/cpython#27037, they can include tildes in addition to the carets.
Examples;
https://bugs.python.org/issue43950