cairo_lang_sierra/extensions/modules/
uninitialized.rs

1use crate::extensions::SpecializationError;
2use crate::extensions::type_specialization_context::TypeSpecializationContext;
3use crate::extensions::types::{
4    GenericTypeArgGenericType, GenericTypeArgGenericTypeWrapper, TypeInfo,
5};
6use crate::ids::GenericTypeId;
7
8/// Uninitialized value of type T.
9#[derive(Default)]
10pub struct UninitializedTypeWrapped {}
11impl GenericTypeArgGenericType for UninitializedTypeWrapped {
12    const ID: GenericTypeId = GenericTypeId::new_inline("Uninitialized");
13
14    fn calc_info(
15        &self,
16        _context: &dyn TypeSpecializationContext,
17        long_id: crate::program::ConcreteTypeLongId,
18        TypeInfo { storable, zero_sized, .. }: TypeInfo,
19    ) -> Result<TypeInfo, SpecializationError> {
20        if storable {
21            Ok(TypeInfo {
22                long_id,
23                storable: false,
24                droppable: true,
25                duplicatable: false,
26                zero_sized,
27            })
28        } else {
29            Err(SpecializationError::UnsupportedGenericArg)
30        }
31    }
32}
33pub type UninitializedType = GenericTypeArgGenericTypeWrapper<UninitializedTypeWrapped>;