pub struct SpecializationContextForRegistry<'a, TType: GenericType> {
pub functions: &'a HashMap<FunctionId, Function>,
pub concrete_type_ids: &'a HashMap<(GenericTypeId, &'a [GenericArg]), ConcreteTypeId>,
pub concrete_types: &'a HashMap<ConcreteTypeId, TType::Concrete>,
pub function_ap_change: OrderedHashMap<FunctionId, usize>,
}
Expand description
Context required for specialization process.
Fields§
§functions: &'a HashMap<FunctionId, Function>
§concrete_type_ids: &'a HashMap<(GenericTypeId, &'a [GenericArg]), ConcreteTypeId>
§concrete_types: &'a HashMap<ConcreteTypeId, TType::Concrete>
§function_ap_change: OrderedHashMap<FunctionId, usize>
AP changes information for Sierra user functions.
Trait Implementations§
Source§impl<TType: GenericType> SignatureSpecializationContext for SpecializationContextForRegistry<'_, TType>
impl<TType: GenericType> SignatureSpecializationContext for SpecializationContextForRegistry<'_, TType>
Source§fn try_get_concrete_type(
&self,
id: GenericTypeId,
generic_args: &[GenericArg],
) -> Option<ConcreteTypeId>
fn try_get_concrete_type( &self, id: GenericTypeId, generic_args: &[GenericArg], ) -> Option<ConcreteTypeId>
Returns concrete type id given a generic type and the generic arguments.
Source§fn try_get_function_signature(
&self,
function_id: &FunctionId,
) -> Option<FunctionSignature>
fn try_get_function_signature( &self, function_id: &FunctionId, ) -> Option<FunctionSignature>
Returns the function’s signature object associated with the given FunctionId.
Source§fn as_type_specialization_context(&self) -> &dyn TypeSpecializationContext
fn as_type_specialization_context(&self) -> &dyn TypeSpecializationContext
Upcasting to the TypeSpecializationContext, since trait upcasting is still experimental.
Source§fn try_get_function_ap_change(
&self,
function_id: &FunctionId,
) -> Option<SierraApChange>
fn try_get_function_ap_change( &self, function_id: &FunctionId, ) -> Option<SierraApChange>
Returns the ap-change of the given function.
Source§fn get_concrete_type(
&self,
id: GenericTypeId,
generic_args: &[GenericArg],
) -> Result<ConcreteTypeId, SpecializationError>
fn get_concrete_type( &self, id: GenericTypeId, generic_args: &[GenericArg], ) -> Result<ConcreteTypeId, SpecializationError>
Wraps Self::try_get_concrete_type with a result object.
Source§fn get_function_signature(
&self,
function_id: &FunctionId,
) -> Result<FunctionSignature, SpecializationError>
fn get_function_signature( &self, function_id: &FunctionId, ) -> Result<FunctionSignature, SpecializationError>
Wraps Self::try_get_function_signature with a result object.
Source§fn get_function_ap_change(
&self,
function_id: &FunctionId,
) -> Result<SierraApChange, SpecializationError>
fn get_function_ap_change( &self, function_id: &FunctionId, ) -> Result<SierraApChange, SpecializationError>
Wraps Self::try_get_function_ap_change with a result object.
Source§fn get_wrapped_concrete_type(
&self,
id: GenericTypeId,
wrapped: ConcreteTypeId,
) -> Result<ConcreteTypeId, SpecializationError>
fn get_wrapped_concrete_type( &self, id: GenericTypeId, wrapped: ConcreteTypeId, ) -> Result<ConcreteTypeId, SpecializationError>
Returns the concrete id of
T<S>
given generic type T and concrete type S.Source§impl<TType: GenericType> SpecializationContext for SpecializationContextForRegistry<'_, TType>
impl<TType: GenericType> SpecializationContext for SpecializationContextForRegistry<'_, TType>
Source§fn try_get_function(&self, function_id: &FunctionId) -> Option<Function>
fn try_get_function(&self, function_id: &FunctionId) -> Option<Function>
Returns the function object associated with the given FunctionId.
Source§fn upcast(&self) -> &dyn SignatureSpecializationContext
fn upcast(&self) -> &dyn SignatureSpecializationContext
Upcasting to the SignatureSpecializationContext, since trait upcasting is still
experimental.
Source§fn get_function(
&self,
function_id: &FunctionId,
) -> Result<Function, SpecializationError>
fn get_function( &self, function_id: &FunctionId, ) -> Result<Function, SpecializationError>
Wraps Self::try_get_function with a result object.
Source§impl<TType: GenericType> TypeSpecializationContext for SpecializationContextForRegistry<'_, TType>
impl<TType: GenericType> TypeSpecializationContext for SpecializationContextForRegistry<'_, TType>
Source§fn try_get_type_info(&self, id: ConcreteTypeId) -> Option<TypeInfo>
fn try_get_type_info(&self, id: ConcreteTypeId) -> Option<TypeInfo>
Returns the type information for the type with the given id.
Source§fn get_type_info(
&self,
id: ConcreteTypeId,
) -> Result<TypeInfo, SpecializationError>
fn get_type_info( &self, id: ConcreteTypeId, ) -> Result<TypeInfo, SpecializationError>
Wraps Self::try_get_type_info with a result object.
Auto Trait Implementations§
impl<'a, TType> Freeze for SpecializationContextForRegistry<'a, TType>
impl<'a, TType> RefUnwindSafe for SpecializationContextForRegistry<'a, TType>
impl<'a, TType> Send for SpecializationContextForRegistry<'a, TType>
impl<'a, TType> Sync for SpecializationContextForRegistry<'a, TType>
impl<'a, TType> Unpin for SpecializationContextForRegistry<'a, TType>
impl<'a, TType> UnwindSafe for SpecializationContextForRegistry<'a, TType>
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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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