cairo_lang_sierra/extensions/modules/
mod.rs1use self::enm::EnumType;
2use self::int::unsigned128::Uint128Type;
3use self::structure::StructType;
4use super::lib_func::SignatureSpecializationContext;
5use super::{NamedType, SpecializationError};
6use crate::ids::{ConcreteTypeId, UserTypeId};
7use crate::program::GenericArg;
8
9pub mod ap_tracking;
10pub mod array;
11pub mod bitwise;
12pub mod boolean;
13pub mod bounded_int;
14pub mod boxing;
15pub mod branch_align;
16pub mod bytes31;
17pub mod casts;
18pub mod circuit;
19pub mod const_type;
20pub mod consts;
21pub mod coupon;
22pub mod debug;
23pub mod drop;
24pub mod duplicate;
25pub mod ec;
26pub mod enm;
27pub mod felt252;
28pub mod felt252_dict;
29pub mod function_call;
30pub mod gas;
31pub mod int;
32pub mod is_zero;
33pub mod mem;
34pub mod non_zero;
35pub mod nullable;
36pub mod pedersen;
37pub mod poseidon;
38pub mod range;
39pub mod range_check;
40pub mod segment_arena;
41pub mod snapshot;
42pub mod span;
43pub mod squashed_felt252_dict;
44pub mod starknet;
45pub mod structure;
46pub mod try_from_felt252;
47pub mod unconditional_jump;
48pub mod uninitialized;
49pub mod utils;
50
51fn get_unit_type(
53 context: &dyn SignatureSpecializationContext,
54) -> Result<ConcreteTypeId, SpecializationError> {
55 context.get_concrete_type(StructType::id(), &[GenericArg::UserType(UserTypeId::from_string(
56 "Tuple",
57 ))])
58}
59
60fn get_bool_type(
62 context: &dyn SignatureSpecializationContext,
63) -> Result<ConcreteTypeId, SpecializationError> {
64 let unit_type = get_unit_type(context)?;
65 context.get_concrete_type(EnumType::id(), &[
66 GenericArg::UserType(UserTypeId::from_string("core::bool")),
67 GenericArg::Type(unit_type.clone()),
68 GenericArg::Type(unit_type),
69 ])
70}
71
72fn get_u256_type(
74 context: &dyn SignatureSpecializationContext,
75) -> Result<ConcreteTypeId, SpecializationError> {
76 let u128_ty = context.get_concrete_type(Uint128Type::id(), &[])?;
77 context.get_concrete_type(StructType::id(), &[
78 GenericArg::UserType(UserTypeId::from_string("core::integer::u256")),
79 GenericArg::Type(u128_ty.clone()),
80 GenericArg::Type(u128_ty),
81 ])
82}