cairo_lang_sierra/extensions/modules/
trace.rs1use super::consts::SignatureAndConstConcreteLibfunc;
2use crate::extensions::lib_func::{
3 LibfuncSignature, SierraApChange, SignatureSpecializationContext,
4};
5use crate::extensions::{NamedLibfunc, SpecializationError, args_as_single_value};
6use crate::program::GenericArg;
7
8#[derive(Default)]
10pub struct TraceLibfunc {}
11impl NamedLibfunc for TraceLibfunc {
12 const STR_ID: &'static str = "trace";
13
14 type Concrete = SignatureAndConstConcreteLibfunc;
15
16 fn specialize_signature(
17 &self,
18 _context: &dyn SignatureSpecializationContext,
19 generic_args: &[GenericArg],
20 ) -> Result<LibfuncSignature, SpecializationError> {
21 let _flag = args_as_single_value(generic_args)?;
22 Ok(LibfuncSignature::new_non_branch_ex(
23 vec![],
24 vec![],
25 SierraApChange::Known { new_vars_only: false },
26 ))
27 }
28
29 fn specialize(
30 &self,
31 context: &dyn crate::extensions::lib_func::SpecializationContext,
32 args: &[GenericArg],
33 ) -> Result<Self::Concrete, SpecializationError> {
34 let flag = args_as_single_value(args)?;
35 Ok(Self::Concrete {
36 signature: self.specialize_signature(context.upcast(), args)?,
37 c: flag,
38 })
39 }
40}