charon_lib::ast::types

Struct GenericParams

source
pub struct GenericParams {
    pub regions: Vector<RegionId, RegionVar>,
    pub types: Vector<TypeVarId, TypeVar>,
    pub const_generics: Vector<ConstGenericVarId, ConstGenericVar>,
    pub trait_clauses: Vector<TraitClauseId, TraitClause>,
    pub regions_outlive: Vec<RegionBinder<RegionOutlives>>,
    pub types_outlive: Vec<RegionBinder<TypeOutlives>>,
    pub trait_type_constraints: Vec<RegionBinder<TraitTypeConstraint>>,
}
Expand description

Generic parameters for a declaration. We group the generics which come from the Rust compiler substitutions (the regions, types and const generics) as well as the trait clauses. The reason is that we consider that those are parameters that need to be filled. We group in a different place the predicates which are not trait clauses, because those enforce constraints but do not need to be filled with witnesses/instances.

Fields§

§regions: Vector<RegionId, RegionVar>§types: Vector<TypeVarId, TypeVar>§const_generics: Vector<ConstGenericVarId, ConstGenericVar>§trait_clauses: Vector<TraitClauseId, TraitClause>§regions_outlive: Vec<RegionBinder<RegionOutlives>>

The first region in the pair outlives the second region

§types_outlive: Vec<RegionBinder<TypeOutlives>>

The type outlives the region

§trait_type_constraints: Vec<RegionBinder<TraitTypeConstraint>>

Constraints over trait associated types

Implementations§

source§

impl GenericParams

source

pub fn empty() -> Self

source

pub fn is_empty(&self) -> bool

source

pub fn has_predicates(&self) -> bool

source

pub fn len(&self) -> usize

source

pub fn identity_args(&self) -> GenericArgs

Construct a set of generic arguments in the scope of self that matches self and feeds each required parameter with itself. E.g. given parameters for <T, U> where U: PartialEq<T>, the arguments would be <T, U>[@TraitClause0].

source

pub fn split(&self, info: &ParamsInfo) -> (Self, Self)

Split these params in two, according to the provided ParamsInfo.

source§

impl GenericParams

source

pub fn fmt_with_ctx_with_trait_clauses<C>( &self, ctx: &C, tab: &str, info: &Option<ParamsInfo>, ) -> (String, String, bool)
where C: AstFormatter,

source

fn format_clauses<C>(&self, ctx: &C, tab: &str) -> String
where C: AstFormatter,

source

pub fn fmt_where_clauses( tab: &str, num_parent_clauses: usize, clauses: Vec<String>, ) -> String

[num_parent_clauses]: we store in the definitions all the clauses they have access to, which includes the clauses inherited from the parent. This can be confusing: we insert a delimiter between the inherited clauses and the local clauses.

Trait Implementations§

source§

impl Clone for GenericParams

source§

fn clone(&self) -> GenericParams

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for GenericParams

source§

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

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

impl Default for GenericParams

source§

fn default() -> GenericParams

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for GenericParams

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Drive for GenericParams

source§

fn drive<V: Visitor>(&self, visitor: &mut V)

source§

impl DriveMut for GenericParams

source§

fn drive_mut<V: VisitorMut>(&mut self, visitor: &mut V)

source§

impl<C: AstFormatter> FmtWithCtx<C> for GenericParams

source§

fn fmt_with_ctx(&self, ctx: &C) -> String

source§

fn fmt_with_ctx_and_indent(&self, _tab: &str, _ctx: &C) -> String

source§

fn with_ctx<'a>(&'a self, ctx: &'a C) -> impl Display + 'a

Returns a struct that implements Display. This allows the following: Read more
source§

impl PartialEq for GenericParams

source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Serialize for GenericParams

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for GenericParams

source§

impl StructuralPartialEq for GenericParams

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, dst: *mut T)

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

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<I, T> ExtractContext<I, ()> for T

§

fn extract_context(self, _original_input: I)

Given the context attached to a nom error, and given the original input to the nom parser, extract more the useful context information. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<I> RecreateContext<I> for I

§

fn recreate_context(_original_input: I, tail: I) -> I

Given the original input, as well as the context reported by nom, recreate a context in the original string where the error occurred. Read more
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.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,