Struct charon_lib::ast::types::ParamsInfo   
source · pub struct ParamsInfo {
    pub num_region_params: usize,
    pub num_type_params: usize,
    pub num_const_generic_params: usize,
    pub num_trait_clauses: usize,
    pub num_regions_outlive: usize,
    pub num_types_outlive: usize,
    pub num_trait_type_constraints: usize,
}Expand description
We use this to store information about the parameters in parent blocks. This is necessary because in the definitions we store all the generics, including those coming from the outer impl block.
For instance:
impl Foo<T> {
        ^^^
      outer block generics
  fn bar<U>(...)  { ... }
        ^^^
      generics local to the function bar
}
In bar we store the generics: [T, U].
We however sometimes need to make a distinction between those two kinds of generics, in particular when manipulating traits. For instance:
impl<T> Foo for Bar<T> {
  fn baz<U>(...)  { ... }
}
fn test(...) {
   x.baz(...); // Here, we refer to the call as:
               // > Foo<T>::baz<U>(...)
               // If baz hadn't been a method implementation of a trait,
               // we would have refered to it as:
               // > baz<T, U>(...)
               // The reason is that with traits, we refer to the whole
               // trait implementation (as if it were a structure), then
               // pick a specific method inside (as if projecting a field
               // from a structure).
}
Remark: Rust only allows refering to the generics of the immediately outer block. For this reason, when we need to store the information about the generics of the outer block(s), we need to do it only for one level (this definitely makes things simpler).
Fields§
§num_region_params: usize§num_type_params: usize§num_const_generic_params: usize§num_trait_clauses: usize§num_regions_outlive: usize§num_types_outlive: usize§num_trait_type_constraints: usizeTrait Implementations§
source§impl Clone for ParamsInfo
 
impl Clone for ParamsInfo
source§fn clone(&self) -> ParamsInfo
 
fn clone(&self) -> ParamsInfo
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from 
source. Read moresource§impl Debug for ParamsInfo
 
impl Debug for ParamsInfo
source§impl<'de> Deserialize<'de> for ParamsInfo
 
impl<'de> Deserialize<'de> for ParamsInfo
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
    __D: Deserializer<'de>,
 
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 PartialEq for ParamsInfo
 
impl PartialEq for ParamsInfo
source§impl Serialize for ParamsInfo
 
impl Serialize for ParamsInfo
impl Eq for ParamsInfo
impl StructuralPartialEq for ParamsInfo
Auto Trait Implementations§
impl Freeze for ParamsInfo
impl RefUnwindSafe for ParamsInfo
impl Send for ParamsInfo
impl Sync for ParamsInfo
impl Unpin for ParamsInfo
impl UnwindSafe for ParamsInfo
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
 
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit)§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
 
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
 
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
 
fn equivalent(&self, key: &K) -> bool
Compare self to 
key and return true if they are equal.§impl<I, T> ExtractContext<I, ()> for T
 
impl<I, T> ExtractContext<I, ()> for T
§fn extract_context(self, _original_input: I)
 
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
§impl<T> Instrument for T
 
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
 
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
 
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
 
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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
 
impl<I> RecreateContext<I> for I
§fn recreate_context(_original_input: I, tail: I) -> 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