cairo_lang_sierra/extensions/modules/
drop.rs1use crate::extensions::lib_func::{
2 LibfuncSignature, ParamSignature, SierraApChange, SignatureOnlyGenericLibfunc,
3 SignatureSpecializationContext,
4};
5use crate::extensions::{SpecializationError, args_as_single_type};
6use crate::program::GenericArg;
7
8#[derive(Default)]
10pub struct DropLibfunc {}
11impl SignatureOnlyGenericLibfunc for DropLibfunc {
12 const STR_ID: &'static str = "drop";
13
14 fn specialize_signature(
15 &self,
16 context: &dyn SignatureSpecializationContext,
17 generic_args: &[GenericArg],
18 ) -> Result<LibfuncSignature, SpecializationError> {
19 let ty = args_as_single_type(generic_args)?;
20 let info = context.get_type_info(ty.clone())?;
21 if info.droppable {
22 Ok(LibfuncSignature::new_non_branch_ex(
23 vec![ParamSignature {
24 ty,
25 allow_deferred: true,
26 allow_add_const: true,
27 allow_const: true,
28 }],
29 vec![],
30 SierraApChange::Known { new_vars_only: true },
31 ))
32 } else {
33 Err(SpecializationError::UnsupportedGenericArg)
34 }
35 }
36}