1. 13 3月, 2022 2 次提交
  2. 11 3月, 2022 1 次提交
    • N
      Improve `AdtDef` interning. · ca5525d5
      Nicholas Nethercote 提交于
      This commit makes `AdtDef` use `Interned`. Much the commit is tedious
      changes to introduce getter functions. The interesting changes are in
      `compiler/rustc_middle/src/ty/adt.rs`.
      ca5525d5
  3. 01 3月, 2022 1 次提交
  4. 21 2月, 2022 1 次提交
  5. 20 2月, 2022 1 次提交
  6. 15 2月, 2022 2 次提交
    • N
      Overhaul `Const`. · a95fb8b1
      Nicholas Nethercote 提交于
      Specifically, rename the `Const` struct as `ConstS` and re-introduce `Const` as
      this:
      ```
      pub struct Const<'tcx>(&'tcx Interned<ConstS>);
      ```
      This now matches `Ty` and `Predicate` more closely, including using
      pointer-based `eq` and `hash`.
      
      Notable changes:
      - `mk_const` now takes a `ConstS`.
      - `Const` was copy, despite being 48 bytes. Now `ConstS` is not, so need a
        we need separate arena for it, because we can't use the `Dropless` one any
        more.
      - Many `&'tcx Const<'tcx>`/`&Const<'tcx>` to `Const<'tcx>` changes
      - Many `ct.ty` to `ct.ty()` and `ct.val` to `ct.val()` changes.
      - Lots of tedious sigil fiddling.
      a95fb8b1
    • N
      Overhaul `TyS` and `Ty`. · e9a0c429
      Nicholas Nethercote 提交于
      Specifically, change `Ty` from this:
      ```
      pub type Ty<'tcx> = &'tcx TyS<'tcx>;
      ```
      to this
      ```
      pub struct Ty<'tcx>(Interned<'tcx, TyS<'tcx>>);
      ```
      There are two benefits to this.
      - It's now a first class type, so we can define methods on it. This
        means we can move a lot of methods away from `TyS`, leaving `TyS` as a
        barely-used type, which is appropriate given that it's not meant to
        be used directly.
      - The uniqueness requirement is now explicit, via the `Interned` type.
        E.g. the pointer-based `Eq` and `Hash` comes from `Interned`, rather
        than via `TyS`, which wasn't obvious at all.
      
      Much of this commit is boring churn. The interesting changes are in
      these files:
      - compiler/rustc_middle/src/arena.rs
      - compiler/rustc_middle/src/mir/visit.rs
      - compiler/rustc_middle/src/ty/context.rs
      - compiler/rustc_middle/src/ty/mod.rs
      
      Specifically:
      - Most mentions of `TyS` are removed. It's very much a dumb struct now;
        `Ty` has all the smarts.
      - `TyS` now has `crate` visibility instead of `pub`.
      - `TyS::make_for_test` is removed in favour of the static `BOOL_TY`,
        which just works better with the new structure.
      - The `Eq`/`Ord`/`Hash` impls are removed from `TyS`. `Interned`s impls
        of `Eq`/`Hash` now suffice. `Ord` is now partly on `Interned`
        (pointer-based, for the `Equal` case) and partly on `TyS`
        (contents-based, for the other cases).
      - There are many tedious sigil adjustments, i.e. adding or removing `*`
        or `&`. They seem to be unavoidable.
      e9a0c429
  7. 11 1月, 2022 1 次提交
    • A
      Store a `Symbol` instead of an `Ident` in `VariantDef`/`FieldDef` · 450ef861
      Aaron Hill 提交于
      The field is also renamed from `ident` to `name. In most cases,
      we don't actually need the `Span`. A new `ident` method is added
      to `VariantDef` and `FieldDef`, which constructs the full `Ident`
      using `tcx.def_ident_span()`. This method is used in the cases
      where we actually need an `Ident`.
      
      This makes incremental compilation properly track changes
      to the `Span`, without all of the invalidations caused by storing
      a `Span` directly via an `Ident`.
      450ef861
  8. 12 10月, 2021 1 次提交
  9. 09 10月, 2021 1 次提交
  10. 02 10月, 2021 1 次提交
  11. 26 9月, 2021 6 次提交
  12. 15 9月, 2021 1 次提交
  13. 16 7月, 2021 1 次提交
  14. 15 7月, 2021 1 次提交
  15. 22 5月, 2021 1 次提交
  16. 12 5月, 2021 1 次提交
  17. 12 3月, 2021 1 次提交
  18. 25 1月, 2021 1 次提交
  19. 19 1月, 2021 1 次提交
  20. 24 12月, 2020 1 次提交
  21. 22 12月, 2020 11 次提交
  22. 20 12月, 2020 1 次提交
  23. 04 12月, 2020 1 次提交