-
-
Notifications
You must be signed in to change notification settings - Fork 33.9k
bpo-40228: More robust frame.setlineno. #19437
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
bpo-40228: More robust frame.setlineno. #19437
Conversation
Objects/frameobject.c
Outdated
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.
Please put the { on its own line (PEP 7).
Objects/frameobject.c
Outdated
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.
Please check this call for failure.
Objects/frameobject.c
Outdated
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.
Please use PyBytes_GET_SIZE() here instead of PyBytes_Size().
Objects/frameobject.c
Outdated
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.
lines is leaked here.
Objects/frameobject.c
Outdated
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.
Please use PyBytes_GET_SIZE().
Objects/frameobject.c
Outdated
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.
PyBytes_AS_STRING().
PEP 7 states that no line should be longer than 79 characters.
Objects/frameobject.c
Outdated
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.
PyBytes_AS_STRING().
|
@ZackerySpytz thanks for the review |
|
Re-basing to force test re-run before merging. |
35a951c to
55daf2c
Compare
Makes no assumptions about the layout of bytecode.
Makes setting
frame.f_linenomore robust and flexible.To improve robustness, the code takes the simple, pragmatic approach: If it is safe to make the jump, then do so. We no longer attempt to decide if it "reasonable" or "sensible", merely if it is safe.
"Safe" in this context, means "won't crash the interpreter".
The increased flexibility is a side effect of this more pragmatic approach.
There are number of test cases where a jump is safe, but we disallowed it. Those cases are now allowed.
A couple of cases are now disallowed. Those involve jumping to unreachable code. Since we cannot compute the exception stack state for unreachable code, it is unsafe to jump to it.
Removing assumptions about the bytecode layout will allow us to enhance the compiler without worrying about breaking this code all the time.
Another point in favour of this PR is that it reduces the code size by about 80 lines.
https://bugs.python.org/issue40228