pub enum Attribute {
Opaque,
Exclude,
Rename(String),
VariantsPrefix(String),
VariantsSuffix(String),
Transparent,
IsContract {
kind: String,
target: MaybeAssocItemId,
},
HasContract {
kind: String,
contract: FunDeclId,
},
DocComment(String),
Builtin(AttributeKind),
Unknown(RawAttribute),
}Expand description
Attributes (#[...]).
Variants§
Opaque
Do not translate the body of this item.
Written #[charon::opaque]
Exclude
Do not translate this item at all.
Written #[charon::exclude]
Rename(String)
Provide a new name that consumers of the llbc can use.
Written #[charon::rename("new_name")]
VariantsPrefix(String)
For enums only: rename the variants by pre-pending their names with the given prefix.
Written #[charon::variants_prefix("prefix_")].
VariantsSuffix(String)
Same as VariantsPrefix, but appends to the name instead of pre-pending.
Transparent
The structure is treated as a transparent wrapper around its sole field.
Written #[charon::transparent].
IsContract
An item annotated with #[charon::contract(kind = "...", parent)] or
#[charon::contract(kind = "...", for = "...")]. This makes it a contract for the target
item.
HasContract
An item that has a contract that applies to it. The referenced item is the function that specifies the contract.
DocComment(String)
A doc-comment such as /// ....
Builtin(AttributeKind)
A built-in attribute.
Unknown(RawAttribute)
None of the above.
Implementations§
Source§impl Attribute
impl Attribute
pub fn is_opaque(&self) -> bool
pub fn is_exclude(&self) -> bool
pub fn is_rename(&self) -> bool
pub fn is_variants_prefix(&self) -> bool
pub fn is_variants_suffix(&self) -> bool
pub fn is_transparent(&self) -> bool
pub fn is_is_contract(&self) -> bool
pub fn is_has_contract(&self) -> bool
pub fn is_doc_comment(&self) -> bool
pub fn is_builtin(&self) -> bool
pub fn is_unknown(&self) -> bool
Source§impl Attribute
impl Attribute
pub fn as_opaque(&self) -> Option<()>
pub fn as_exclude(&self) -> Option<()>
pub fn as_rename(&self) -> Option<&String>
pub fn as_variants_prefix(&self) -> Option<&String>
pub fn as_variants_suffix(&self) -> Option<&String>
pub fn as_transparent(&self) -> Option<()>
pub fn as_is_contract(&self) -> Option<(&String, &MaybeAssocItemId)>
pub fn as_has_contract(&self) -> Option<(&String, &FunDeclId)>
pub fn as_doc_comment(&self) -> Option<&String>
pub fn as_builtin(&self) -> Option<&AttributeKind>
pub fn as_unknown(&self) -> Option<&RawAttribute>
Source§impl Attribute
impl Attribute
pub fn as_opaque_mut(&mut self) -> Option<()>
pub fn as_exclude_mut(&mut self) -> Option<()>
pub fn as_rename_mut(&mut self) -> Option<&mut String>
pub fn as_variants_prefix_mut(&mut self) -> Option<&mut String>
pub fn as_variants_suffix_mut(&mut self) -> Option<&mut String>
pub fn as_transparent_mut(&mut self) -> Option<()>
pub fn as_is_contract_mut( &mut self, ) -> Option<(&mut String, &mut MaybeAssocItemId)>
pub fn as_has_contract_mut(&mut self) -> Option<(&mut String, &mut FunDeclId)>
pub fn as_doc_comment_mut(&mut self) -> Option<&mut String>
pub fn as_builtin_mut(&mut self) -> Option<&mut AttributeKind>
pub fn as_unknown_mut(&mut self) -> Option<&mut RawAttribute>
Source§impl Attribute
impl Attribute
pub fn to_opaque(self) -> Option<()>
pub fn to_exclude(self) -> Option<()>
pub fn to_rename(self) -> Option<String>
pub fn to_variants_prefix(self) -> Option<String>
pub fn to_variants_suffix(self) -> Option<String>
pub fn to_transparent(self) -> Option<()>
pub fn to_is_contract(self) -> Option<(String, MaybeAssocItemId)>
pub fn to_has_contract(self) -> Option<(String, FunDeclId)>
pub fn to_doc_comment(self) -> Option<String>
pub fn to_builtin(self) -> Option<AttributeKind>
pub fn to_unknown(self) -> Option<RawAttribute>
Source§impl Attribute
impl Attribute
fn fmt_unindented<C: AstFormatter>(&self, ctx: &C, f: &mut impl Write) -> Result
Trait Implementations§
Source§impl AstVisitable for Attribute
impl AstVisitable for Attribute
Source§fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn drive_two<V: ZipAst>(&self, other: &Self, v: &mut V) -> ControlFlow<V::Break>
fn drive_two<V: ZipAst>(&self, other: &Self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
self, in pre-order traversal.Source§fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
self, in pre-order traversal.Source§impl<'de> Deserialize<'de> for Attribute
impl<'de> Deserialize<'de> for Attribute
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>,
Source§impl<'s, V> Drive<'s, V> for Attributewhere
V: Visitor + Visit<'s, String> + Visit<'s, MaybeAssocItemId> + Visit<'s, FunDeclId> + Visit<'s, RawAttribute>,
impl<'s, V> Drive<'s, V> for Attributewhere
V: Visitor + Visit<'s, String> + Visit<'s, MaybeAssocItemId> + Visit<'s, FunDeclId> + Visit<'s, RawAttribute>,
Source§fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self.Source§impl<'s, V> DriveMut<'s, V> for Attributewhere
V: Visitor + VisitMut<'s, String> + VisitMut<'s, MaybeAssocItemId> + VisitMut<'s, FunDeclId> + VisitMut<'s, RawAttribute>,
impl<'s, V> DriveMut<'s, V> for Attributewhere
V: Visitor + VisitMut<'s, String> + VisitMut<'s, MaybeAssocItemId> + VisitMut<'s, FunDeclId> + VisitMut<'s, RawAttribute>,
Source§fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self.Source§impl<'s, V> DriveTwo<'s, V> for Attributewhere
V: Visitor<Break: Default> + VisitTwo<'s, String> + VisitTwo<'s, MaybeAssocItemId> + VisitTwo<'s, FunDeclId> + VisitTwo<'s, RawAttribute>,
impl<'s, V> DriveTwo<'s, V> for Attributewhere
V: Visitor<Break: Default> + VisitTwo<'s, String> + VisitTwo<'s, MaybeAssocItemId> + VisitTwo<'s, FunDeclId> + VisitTwo<'s, RawAttribute>,
Source§fn drive_two_inner(
&'s self,
other: &'s Self,
visitor: &mut V,
) -> ControlFlow<V::Break>
fn drive_two_inner( &'s self, other: &'s Self, visitor: &mut V, ) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self and other, if they correspond. If
the values don’t match up, this returns Break(Default::default()).impl Eq for Attribute
Source§impl<C: AstFormatter> FmtWithCtx<C> for Attribute
impl<C: AstFormatter> FmtWithCtx<C> for Attribute
impl StructuralPartialEq for Attribute
Auto Trait Implementations§
impl Freeze for Attribute
impl RefUnwindSafe for Attribute
impl Send for Attribute
impl Sync for Attribute
impl Unpin for Attribute
impl UnsafeUnpin for Attribute
impl UnwindSafe for Attribute
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§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
§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
key and return true if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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> ⓘ
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> ⓘ
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 moreimpl<T> Mappable for T
Source§impl<T> TyVisitable for Twhere
T: AstVisitable,
impl<T> TyVisitable for Twhere
T: AstVisitable,
Source§fn visit_vars(&mut self, v: &mut impl VarsVisitor)
fn visit_vars(&mut self, v: &mut impl VarsVisitor)
self, as seen from the outside of self. This means
that any variable bound inside self will be skipped, and all the seen De Bruijn indices
will count from the outside of self.Source§fn substitute(self, generics: &GenericArgs) -> Self
fn substitute(self, generics: &GenericArgs) -> Self
self by replacing them with the provided values.
Note: if self is an item that comes from a TraitDecl, you must use
substitute_with_self or substitute_inner_binder, otherwise you’ll get panics.Source§fn substitute_inner_binder(self, generics: &GenericArgs) -> Self
fn substitute_inner_binder(self, generics: &GenericArgs) -> Self
self by replacing them with the provided values.
This is appropriate when substituting an inner binder.Source§fn substitute_explicits(self, generics: &GenericArgs) -> Self
fn substitute_explicits(self, generics: &GenericArgs) -> Self
Source§fn substitute_with_self(
self,
generics: &GenericArgs,
self_ref: &TraitRefKind,
) -> Self
fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self
TraitRefKind::SelfId trait ref.Source§fn substitute_with_tref(self, tref: &TraitRef) -> Self
fn substitute_with_tref(self, tref: &TraitRef) -> Self
TraitRefKind::SelfId trait ref.Source§fn try_substitute_with_tref(
self,
tref: &TraitRef,
) -> Result<Self, GenericsMismatch>
fn try_substitute_with_tref( self, tref: &TraitRef, ) -> Result<Self, GenericsMismatch>
TraitRefKind::SelfId trait ref.fn try_substitute( self, generics: &GenericArgs, ) -> Result<Self, GenericsMismatch>
fn try_substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Result<Self, GenericsMismatch>
Source§fn move_under_binder(self) -> Self
fn move_under_binder(self) -> Self
Source§fn move_under_binders(self, depth: DeBruijnId) -> Self
fn move_under_binders(self, depth: DeBruijnId) -> Self
depth binders.Source§fn move_from_under_binder(self) -> Option<Self>
fn move_from_under_binder(self) -> Option<Self>
Source§fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
depth binders. Returns None if it contains a variable bound in
one of these depth binders.Source§fn visit_db_id<B>(
&mut self,
f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>,
) -> ControlFlow<B>
fn visit_db_id<B>( &mut self, f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>, ) -> ControlFlow<B>
self, as seen from the outside of self. This means
that any variable bound inside self will be skipped, and all the seen indices will count
from the outside of self.