diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-03-23 10:29:11 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-23 10:29:11 +0100 |
| commit | bee074f032970fd1b59650c04a70e75eeee9c63b (patch) | |
| tree | fae855037a249c1191dfca9c29ee8e9261790b85 /src/test/codegen/src-hash-algorithm/src-hash-algorithm-md5.rs | |
| parent | 906b39958322c54b76de4f301976e7753777be4e (diff) | |
| parent | d9a15ccd976bc8a4a79c99fbf68892c2bbdfffec (diff) | |
| download | rust-bee074f032970fd1b59650c04a70e75eeee9c63b.tar.gz rust-bee074f032970fd1b59650c04a70e75eeee9c63b.zip | |
Rollup merge of #69968 - eddyb:tupled-closure-captures, r=nikomatsakis
rustc: keep upvars tupled in {Closure,Generator}Substs.
Previously, each closure/generator capture's (aka "upvar") type was tracked as one "synthetic" type parameter in the closure/generator substs, and figuring out where the parent `fn`'s generics end and the synthetics start involved slicing at `tcx.generics_of(def_id).parent_count`.
Needing to query `generics_of` limited @davidtwco (who wants to compute some `TypeFlags` differently for parent generics vs upvars, and `TyCtxt` is not available there), which is how I got started on this, but it's also possible that the `generics_of` queries are slowing down `{Closure,Generator}Substs` methods.
To give an example, for a `foo::<T, U>::{closure#0}` with captures `x: X` and `y: Y`, substs are:
* before this PR: `[T, U, /*kind*/, /*signature*/, X, Y]`
* after this PR: `[T, U, /*kind*/, /*signature*/, (X, Y)]`
You can see that, with this PR, no matter how many captures, the last 3 entries in the substs (or 5 for a generator) are always the "synthetic" ones, with the last one being the tuple of capture types.
r? @nikomatsakis cc @Zoxc
Diffstat (limited to 'src/test/codegen/src-hash-algorithm/src-hash-algorithm-md5.rs')
0 files changed, 0 insertions, 0 deletions
