Uh oh!
There was an error while loading. Please reload this page.
Add some high-level docs to FnCtxt and ItemCtxt - #100256
Conversation
I haven't understood the difference between these before, but `@compiler-errors` helped me clear it up. Hopefully this will help other people who've been confused!
camelid
commented
Aug 8, 2022
Please let me know if I mixed these up or if there are any other inaccuracies :) |
| use std::ops::Deref; | ||
| /// The `FnCtxt` stores type-checking context needed to type-check function bodies, | ||
| /// in contrast to [`ItemCtxt`], which is used to type-check item *signatures*. |
There was a problem hiding this comment.
It's a bit more accurate to mention:
- that this is used to lower things where we don't care about the body. For example,
ItemCtxtis used to check structs and stuff too.
i. An important distinction is thatFnCtxthas anInferCtxt, whileItemCtxtexpects no inference to go on in there. - This is also (via the
AstConvtrait) primarily used for lowering things from HIR -> middle representations of things. For example, we use it in thetcx.type_ofquery, which does little checking and mostly lowering.
There was a problem hiding this comment.
Thanks! I added the info you suggested.
The one thing is that I couldn't find an InferCtxt field -- or any mention of InferCtxt for that matter -- in FnCtxt. Is it accessed in some indirect way?
There was a problem hiding this comment.
Is it accessed in some indirect way
Yea, good question. It's stored in inh: &Inherited -- this is how several FnCtxts actually share the same InferCtxt. This Inherited struct is important because closures can share inference variables and other info to their containing functions, for example.
There was a problem hiding this comment.
Ah, that makes sense! Thanks :)
Uh oh!
There was an error while loading. Please reload this page.
This comment has been minimized.
This comment has been minimized.
compiler-errors
left a comment
There was a problem hiding this comment.
This is a good addition, thanks.
r=me once CI is green.
camelid
commented
Aug 8, 2022
@bors r=compiler-errors rollup |
bors
commented
Aug 8, 2022
…r-errors Add some high-level docs to `FnCtxt` and `ItemCtxt` I haven't understood the difference between these before, but ``@compiler-errors`` helped me clear it up. Hopefully this will help other people who've been confused! r? `@compiler-errors`
matthiaskrgr
commented
Aug 9, 2022
@bors r- |
compiler-errors
commented
Aug 9, 2022
r=me when things work |
camelid
commented
Aug 9, 2022
Should be good now. @bors r=compiler-errors |
bors
commented
Aug 9, 2022
…iaskrgr Rollup of 14 pull requests Successful merges: - rust-lang#98775 (rustdoc: improve scroll locking in the rustdoc mobile sidebars) - rust-lang#99479 (rustdoc-json: Remove doc FIXME for Import::id and explain) - rust-lang#100040 (Error on broken pipe but do not backtrace or ICE) - rust-lang#100072 (linker-plugin-lto.md: Correct the name of example c file) - rust-lang#100098 (Some "this expression has a field"-related fixes) - rust-lang#100226 (Do not manually craft a span pointing inside a multibyte character.) - rust-lang#100240 (Fail gracefully when const pattern is not structural match.) - rust-lang#100256 (Add some high-level docs to `FnCtxt` and `ItemCtxt`) - rust-lang#100261 (Set tainted errors bit before emitting coerce suggestions.) - rust-lang#100275 (also update anyhow in codegen_cranelift) - rust-lang#100281 (Remove more Clean trait implementations) - rust-lang#100314 (Mention `unit-test` in MIR opt test README) - rust-lang#100319 (Remove more Clean trait implementations) - rust-lang#100323 ([rustdoc] Don't render impl blocks with doc comment if they only contain private items by default) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
I haven't understood the difference between these before, but
@compiler-errorshelped me clear it up. Hopefully this will help otherpeople who've been confused!
r? @compiler-errors