Skip to main content

ReferenceKind

Enum ReferenceKind 

Source
pub enum ReferenceKind {
    Local,
    TopLevel(QualName),
    Foreign(QualName, PackageName, usize),
    Constructor(Constructor),
    Specialised(usize),
    InstanceMember(Box<InstanceMember>),
}
Expand description

Which of the things a Reference names: a name bound in the declaration, a declaration of this module, one of another, or a constructor — and, once specialise has run, a specialisation or an instance’s member, which are what a name that asked for an instance becomes.

Variants§

§

Local

A parameter of the enclosing declaration, or a name one of its patterns bound. It is in scope for that declaration alone.

§

TopLevel(QualName)

A declaration of the module being compiled, named in full.

§

Foreign(QualName, PackageName, usize)

A declaration of another module, named in full: a named import of whatever that module emitted.

The typer checks it against the type that module’s interface declares. The PackageName is the package that declares the module, which is where the import is read from: a module’s name says which file it is within its package, and the package says which package’s directory holds that file.

The usize is the declaration’s arity, read from the same interface (Interface::arities): the count a call has to supply to be a direct call, exactly as Declaration::arity is for a TopLevel name. A module exports each declaration as the plain n-ary function it emitted, so an importer needs the arity to call it.

§

Constructor(Constructor)

A union constructor: it builds a tagged value rather than reading a binding.

§

Specialised(usize)

A Specialisation of this module: a place in Module::specialisations. What specialise makes of a reference to a constrained declaration, and of a class member whose instance has a context.

§

InstanceMember(Box<InstanceMember>)

A member of an instance that has no context (InstanceMember). What specialise makes of a class member used at a type that has one.

Boxed: it names a class, a head and a module in full, and would make every other kind of reference as large.

Trait Implementations§

Source§

impl Clone for ReferenceKind

Source§

fn clone(&self) -> ReferenceKind

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ReferenceKind

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for ReferenceKind

Source§

fn eq(&self, other: &ReferenceKind) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ReferenceKind

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.