@@ -43,7 +43,7 @@ compiler (for example, generating [MIR](./mir/)) currently work exactly like thi
43
43
in-depth description of what queries are and how they work.
44
44
If you intend to write a query of your own, this is a good read.
45
45
46
- ### Invoking queries
46
+ ## Invoking queries
47
47
48
48
Invoking a query is simple. The [ ` TyCtxt ` ] ("type context") struct offers a method
49
49
for each defined query. For example, to invoke the ` type_of `
@@ -55,7 +55,7 @@ let ty = tcx.type_of(some_def_id);
55
55
56
56
[ `TyCtxt` ] : https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html
57
57
58
- ### How the compiler executes a query
58
+ ## How the compiler executes a query
59
59
60
60
So you may be wondering what happens when you invoke a query
61
61
method. The answer is that, for each query, the compiler maintains a
@@ -64,7 +64,7 @@ simple: we clone the return value out of the cache and return it
64
64
(therefore, you should try to ensure that the return types of queries
65
65
are cheaply cloneable; insert an ` Rc ` if necessary).
66
66
67
- #### Providers
67
+ ### Providers
68
68
69
69
If, however, the query is * not* in the cache, then the compiler will
70
70
try to find a suitable ** provider** . A provider is a function that has
@@ -97,7 +97,7 @@ fn provider<'tcx>(
97
97
Providers take two arguments: the ` tcx ` and the query key.
98
98
They return the result of the query.
99
99
100
- #### How providers are setup
100
+ ### How providers are setup
101
101
102
102
When the tcx is created, it is given the providers by its creator using
103
103
the [ ` Providers ` ] [ providers_struct ] struct. This struct is generated by
@@ -164,7 +164,7 @@ they define both a `provide` and a `provide_extern` function, through
164
164
[ rustc_metadata ] : https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/index.html
165
165
[ wasm_import_module_map ] : https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/back/symbol_export/fn.wasm_import_module_map.html
166
166
167
- ### Adding a new query
167
+ ## Adding a new query
168
168
169
169
How do you add a new query?
170
170
Defining a query takes place in two steps:
@@ -238,7 +238,7 @@ which is used to cheaply modify MIR in place. See the definition
238
238
of ` Steal ` for more details. New uses of ` Steal ` should ** not** be
239
239
added without alerting ` @rust-lang/compiler ` .
240
240
241
- #### Query structs and descriptions
241
+ ### Query structs and descriptions
242
242
243
243
For each query, the ` rustc_queries ` macro will generate a "query struct"
244
244
named after the query. This struct is a kind of placeholder
@@ -294,7 +294,7 @@ rustc_queries! {
294
294
295
295
` rustc_queries ` macro will generate an appropriate ` impl ` automatically.
296
296
297
- ## External Links
297
+ ## External links
298
298
299
299
Related design ideas, and tracking issues:
300
300
0 commit comments