cairo_lang_sierra/extensions/modules/
mod.rs

1use 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
51/// Helper for Unit type def.
52fn 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
60/// Helper for Bool type def.
61fn 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
72/// Helper for u256 type def.
73fn 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}