-
Notifications
You must be signed in to change notification settings - Fork 13.3k
switch to EarlyBinder
as default
#105779
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Comments
@rustbot claim |
Hi @lcnr, I was able to check this out a bit and I think I understand what needs to be done here. Just to be sure: the queries that we want to change correspond to all of the I played around with this a bit on the For some of the queries (namely |
Yes that sounds correct to me. There are quite a bit of places where we currently implicitly When accessing parts of the return type of these queries which don't access generic parameters, e.g. the number of arguments or c-variadic for rust/compiler/rustc_hir_typeck/src/expr.rs Line 546 in 7f42e58
|
Ok great, thanks for all the tips! I'll work on this and let you know if I get confused. |
Hi, I’ve been playing with this and have been able to implement the changes to the queries for some of the most used ones ( I want to clean some things up and then open a PR, but I have a few questions:
Sorry in advance for so many questions 😅. If this general plan sounds alright, I'll open a PR. Thanks! |
sorry for not replying earlier. I have been on vacation. 1.i. mostly correct. This may not help too much, but 1.ii. yes, as
Thanks for working on this ❤️ it feels difficult to explain 1. so I hope that it made at least some sense. Feel free to reach out about that on zulip if you have any questions. Explaining it in sync is easier 😁 |
Thanks so much for the detailed response! This helps a lot, I really appreciate it. (And sorry to have asked so many questions right before/during the holidays...:sweat_smile:). I should have some time this week to work on this :+1: |
This has been implemented for |
…ackh726 Document `EarlyBinder::subst_identity` and `skip_binder` Finishing implementing rust-lang#105779 will change several commonly used queries to return `EarlyBinder` by default. This PR adds documentation for two of the methods used to access data inside the `EarlyBinder`. I tried to summarize some of the [discussion from the issue](rust-lang#105779 (comment)) in writing this. r? `@lcnr`
…s, r=lcnr Switch to `EarlyBinder` for `item_bounds` query Part of the work to finish rust-lang#105779 (also see rust-lang/types-team#78). Several queries `X` have a `bound_X` variant that wraps the output in `EarlyBinder`. This adds `EarlyBinder` to the return type of the `item_bounds` query and removes `bound_item_bounds`. r? `@lcnr`
Switch to `EarlyBinder` for `fn_sig` query Part of the work to finish rust-lang#105779 (also see rust-lang/types-team#78). Several queries `X` have a `bound_X` variant that wraps the output in [`EarlyBinder`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/subst/struct.EarlyBinder.html). This adds `EarlyBinder` to the return type of the `fn_sig` query and removes `bound_fn_sig`. r? `@lcnr`
Switch to `EarlyBinder` for `fn_sig` query Part of the work to finish rust-lang#105779 (also see rust-lang/types-team#78). Several queries `X` have a `bound_X` variant that wraps the output in [`EarlyBinder`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/subst/struct.EarlyBinder.html). This adds `EarlyBinder` to the return type of the `fn_sig` query and removes `bound_fn_sig`. r? `@lcnr`
Switch to `EarlyBinder` for `type_of` query Part of the work to finish rust-lang#105779 and implement rust-lang/types-team#78. Several queries `X` have a `bound_X` variant that wraps the output in `EarlyBinder`. This adds `EarlyBinder` to the return type of the `type_of` query and removes `bound_type_of`. r? `@lcnr`
Switch to `EarlyBinder` for `type_of` query Part of the work to finish rust-lang#105779 and implement rust-lang/types-team#78. Several queries `X` have a `bound_X` variant that wraps the output in `EarlyBinder`. This adds `EarlyBinder` to the return type of the `type_of` query and removes `bound_type_of`. r? `@lcnr`
Switch to `EarlyBinder` for `type_of` query Part of the work to finish rust-lang#105779 and implement rust-lang/types-team#78. Several queries `X` have a `bound_X` variant that wraps the output in `EarlyBinder`. This adds `EarlyBinder` to the return type of the `type_of` query and removes `bound_type_of`. r? `@lcnr`
@kylematsuda are you still working on this? going to unassign you but definitely don't hesitate to reassign yourself if you intend to continue working on it. Thanks a lot for your good work here ❤️ |
Ah sorry @lcnr! I got a bit busy and dropped the ball on this... but I should have time to work on it more now. Thanks for the reminder 😅 Looking in the nightly docs, here are the
Also I think at some point @BoxyUwU had suggested changing I have some questions about a few of these but I might just try and knock out the more straightforward-looking ones first. @rustbot claim |
…ct, r=compiler-errors Switch to `EarlyBinder` for `impl_subject` query Part of the work to finish rust-lang#105779. Several queries `X` have a `bound_X` variant that wraps the output in `EarlyBinder`. This adds `EarlyBinder` to the return type of the `impl_subject` query and removes `bound_impl_subject`. r? `@lcnr`
…ct, r=compiler-errors Switch to `EarlyBinder` for `impl_subject` query Part of the work to finish rust-lang#105779. Several queries `X` have a `bound_X` variant that wraps the output in `EarlyBinder`. This adds `EarlyBinder` to the return type of the `impl_subject` query and removes `bound_impl_subject`. r? ``@lcnr``
…ct, r=compiler-errors Switch to `EarlyBinder` for `impl_subject` query Part of the work to finish rust-lang#105779. Several queries `X` have a `bound_X` variant that wraps the output in `EarlyBinder`. This adds `EarlyBinder` to the return type of the `impl_subject` query and removes `bound_impl_subject`. r? ```@lcnr```
…, r=compiler-errors Switch to `EarlyBinder` for `collect_return_position_impl_trait_in_trait_tys` Part of the work to finish rust-lang#105779. This PR adds `EarlyBinder` to the return type of the `collect_return_position_impl_trait_in_trait_tys` query and removes `bound_return_position_impl_trait_in_trait_tys`. r? `@lcnr`
…tem-bounds, r=compiler-errors Switch to `EarlyBinder` for `explicit_item_bounds` Part of the work to finish rust-lang#105779. This PR adds `EarlyBinder` to the return type of the `explicit_item_bounds` query and removes `bound_explicit_item_bounds`. r? `@compiler-errors` (hope it's okay to request you, since you reviewed rust-lang#110299 and rust-lang#110498 😃)
…s, r=compiler-errors Switch to `EarlyBinder` for `explicit_item_bounds` Part of the work to finish rust-lang/rust#105779. This PR adds `EarlyBinder` to the return type of the `explicit_item_bounds` query and removes `bound_explicit_item_bounds`. r? `@compiler-errors` (hope it's okay to request you, since you reviewed #110299 and #110498 😃)
… r=BoxyUwU Make `(try_)subst_and_normalize_erasing_regions` take `EarlyBinder` Changes `subst_and_normalize_erasing_regions` and `try_subst_and_normalize_erasing_regions` to take `EarlyBinder<T>` instead of `T`. (related to rust-lang#105779) This was suggested by `@BoxyUwU` in rust-lang#107753 (comment). After changing `type_of` to return `EarlyBinder`, there were several places where the binder was immediately skipped to call `tcx.subst_and_normalize_erasing_regions`, only for the binder to be reconstructed inside of that method. r? `@BoxyUwU`
…onst, r=BoxyUwU Switch to `EarlyBinder` for `thir_abstract_const` query Part of the work to finish rust-lang#105779. This PR adds `EarlyBinder` to the return type of the `thir_abstract_const` query and removes `bound_abstract_const`. r? `@compiler-errors`
After merging #111410, all of the existing There is a bit of follow-up work that can be done (I'm happy to work on some of these if it would be helpful):
|
for clippy I am not sure how helpful opening an issue like "hey, some of the Further bubbling up I think it would also be valuable to try to make the value in |
…ackh726 Make `EarlyBinder`'s inner value private Currently, `EarlyBinder(T)`'s inner value is public, which allows implicitly skipping the binder by indexing into the tuple struct (i.e., `x.0`). `@lcnr` suggested making `EarlyBinder`'s inner value private so users are required to explicitly call `skip_binder` (rust-lang#105779 (comment)) . This PR makes the inner value private, adds `EarlyBinder::new` for constructing a new instance, and replaces uses of `x.0` with `x.skip_binder()` (or similar). It also adds some documentation to `EarlyBinder::skip_binder` explaining how to skip the binder of `&EarlyBinder<T>` to get `&T` now that the inner value is private (since previously we could just do `&x.0`). r? `@lcnr`
implement rust-lang/types-team#78
The text was updated successfully, but these errors were encountered: