Type Alias rustc_middle::query::queries::def_kind::ProvidedValue

source ·
pub type ProvidedValue<'tcx> = DefKind;
Expand description

This type alias specifies the type returned from query providers and the type used for decoding. For regular queries this is the declared returned type V, but arena_cache will use <V as Deref>::Target instead.

Aliased Type§

enum ProvidedValue<'tcx> {
Show 30 variants Mod, Struct, Union, Enum, Variant, Trait, TyAlias, ForeignTy, TraitAlias, AssocTy, TyParam, Fn, Const, ConstParam, Static { mutability: Mutability, nested: bool, }, Ctor(CtorOf, CtorKind), AssocFn, AssocConst, Macro(MacroKind), ExternCrate, Use, ForeignMod, AnonConst, InlineConst, OpaqueTy, Field, LifetimeParam, GlobalAsm, Impl { of_trait: bool, }, Closure,
}

Variants§

§

Mod

§

Struct

Refers to the struct itself, [DefKind::Ctor] refers to its constructor if it exists.

§

Union

§

Enum

§

Variant

Refers to the variant itself, [DefKind::Ctor] refers to its constructor if it exists.

§

Trait

§

TyAlias

Type alias: type Foo = Bar;

§

ForeignTy

Type from an extern block.

§

TraitAlias

Trait alias: trait IntIterator = Iterator<Item = i32>;

§

AssocTy

Associated type: trait MyTrait { type Assoc; }

§

TyParam

Type parameter: the T in struct Vec<T> { ... }

§

Fn

§

Const

§

ConstParam

Constant generic parameter: struct Foo<const N: usize> { ... }

§

Static

Fields

§mutability: Mutability

Whether it’s a static mut or just a static.

§nested: bool

Whether it’s an anonymous static generated for nested allocations.

§

Ctor(CtorOf, CtorKind)

Refers to the struct or enum variant’s constructor.

The reason Ctor exists in addition to [DefKind::Struct] and [DefKind::Variant] is because structs and enum variants exist in the type namespace, whereas struct and enum variant constructors exist in the value namespace.

You may wonder why enum variants exist in the type namespace as opposed to the value namespace. Check out RFC 2593 for intuition on why that is.

§

AssocFn

Associated function: impl MyStruct { fn associated() {} } or trait Foo { fn associated() {} }

§

AssocConst

Associated constant: trait MyTrait { const ASSOC: usize; }

§

Macro(MacroKind)

§

ExternCrate

§

Use

§

ForeignMod

An extern block.

§

AnonConst

Anonymous constant, e.g. the 1 + 2 in [u8; 1 + 2]

§

InlineConst

An inline constant, e.g. const { 1 + 2 }

§

OpaqueTy

Opaque type, aka impl Trait.

§

Field

A field in a struct, enum or union. e.g.

  • bar in struct Foo { bar: u8 }
  • Foo::Bar::0 in enum Foo { Bar(u8) }
§

LifetimeParam

Lifetime parameter: the 'a in struct Foo<'a> { ... }

§

GlobalAsm

A use of global_asm!.

§

Impl

Fields

§of_trait: bool
§

Closure

A closure, coroutine, or coroutine-closure.

These are all represented with the same ExprKind::Closure in the AST and HIR, which makes it difficult to distinguish these during def collection. Therefore, we treat them all the same, and code which needs to distinguish them can match or hir::ClosureKind or type_of.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 3 bytes

Size for each variant:

  • Mod: 0 bytes
  • Struct: 0 bytes
  • Union: 0 bytes
  • Enum: 0 bytes
  • Variant: 0 bytes
  • Trait: 0 bytes
  • TyAlias: 0 bytes
  • ForeignTy: 0 bytes
  • TraitAlias: 0 bytes
  • AssocTy: 0 bytes
  • TyParam: 0 bytes
  • Fn: 0 bytes
  • Const: 0 bytes
  • ConstParam: 0 bytes
  • Static: 2 bytes
  • Ctor: 2 bytes
  • AssocFn: 0 bytes
  • AssocConst: 0 bytes
  • Macro: 1 byte
  • ExternCrate: 0 bytes
  • Use: 0 bytes
  • ForeignMod: 0 bytes
  • AnonConst: 0 bytes
  • InlineConst: 0 bytes
  • OpaqueTy: 0 bytes
  • Field: 0 bytes
  • LifetimeParam: 0 bytes
  • GlobalAsm: 0 bytes
  • Impl: 1 byte
  • Closure: 0 bytes