-
-
Notifications
You must be signed in to change notification settings - Fork 32.1k
gh-131798: JIT: Assign type to sliced string/list/tuple #134671
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
// Slicing a string/list/tuple always returns the same type. | ||
PyTypeObject *type = sym_get_type(container); | ||
if (type == &PyUnicode_Type || | ||
type == &PyList_Type || |
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.
type == &PyList_Type || | |
type == &PyBytes_Type || | |
type == &PyList_Type || |
I do not know whether slicing a bytes object occurs often enough to add PyBytes_Type
here (and whether the jit slows down if we add more cases here), but if I understand correctly slicing bytes
(or bytearray
) results in a bytes
(or bytearray
) so we could add them.
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.
@fluhus, this PR is probably fine for now, but feel free to add other sequence types like this in a follow-up PR (with tests)!
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.
Looks great, just one style nitpick:
def test_remove_guard_for_known_type_str(self): | ||
def f(n): | ||
for i in range(n): | ||
false = i == TIER2_THRESHOLD | ||
empty = "X"[:false] | ||
empty += "" # Make JIT realize this is a string. |
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.
Nice!
// Slicing a string/list/tuple always returns the same type. | ||
PyTypeObject *type = sym_get_type(container); | ||
if (type == &PyUnicode_Type || | ||
type == &PyList_Type || |
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.
@fluhus, this PR is probably fine for now, but feel free to add other sequence types like this in a follow-up PR (with tests)!
Slicing a string/list/tuple always returns the same type.
Make the optimizer assign a string/list/tuple type to the result of slicing a string/list/tuple.
@brandtbucher