cairo_lang_sierra_generator/
lib.rs

1//! Lowering from the semantic model down to Sierra. See [cairo_lang_semantic] and
2//! [cairo_lang_sierra].
3
4use db::{SierraGenGroup, SierraGeneratorTypeLongId};
5
6mod ap_change;
7mod ap_tracking;
8mod block_generator;
9pub mod canonical_id_replacer;
10pub mod db;
11pub mod executables;
12mod expr_generator_context;
13mod extra_sierra_info;
14mod function_generator;
15#[cfg(any(feature = "testing", test))]
16pub mod function_generator_test_utils;
17mod id_allocator;
18mod lifetime;
19mod local_variables;
20mod next_statement_index_fetch;
21pub mod pre_sierra;
22pub mod program_generator;
23pub mod replace_ids;
24mod resolve_labels;
25mod specialization_context;
26pub mod statements_code_locations;
27pub mod statements_functions;
28pub mod statements_locations;
29mod store_variables;
30#[cfg(any(feature = "testing", test))]
31pub mod test_utils;
32mod types;
33mod utils;
34
35impl<'a>
36    cairo_lang_utils::LookupIntern<
37        'a,
38        dyn SierraGenGroup + 'a,
39        cairo_lang_sierra::program::ConcreteLibfuncLongId,
40    > for cairo_lang_sierra::ids::ConcreteLibfuncId
41{
42    fn lookup_intern(
43        &self,
44        db: &(impl cairo_lang_utils::Upcast<dyn SierraGenGroup + 'a> + ?Sized),
45    ) -> cairo_lang_sierra::program::ConcreteLibfuncLongId {
46        SierraGenGroup::lookup_intern_concrete_lib_func(db.upcast(), self.clone())
47    }
48}
49
50impl<'a>
51    cairo_lang_utils::LookupIntern<
52        'a,
53        dyn SierraGenGroup + 'a,
54        cairo_lang_lowering::ids::FunctionId,
55    > for cairo_lang_sierra::ids::FunctionId
56{
57    fn lookup_intern(
58        &self,
59        db: &(impl cairo_lang_utils::Upcast<dyn SierraGenGroup + 'a> + ?Sized),
60    ) -> cairo_lang_lowering::ids::FunctionId {
61        SierraGenGroup::lookup_intern_sierra_function(db.upcast(), self.clone())
62    }
63}
64
65impl<'a> cairo_lang_utils::LookupIntern<'a, dyn SierraGenGroup + 'a, SierraGeneratorTypeLongId>
66    for cairo_lang_sierra::ids::ConcreteTypeId
67{
68    fn lookup_intern(
69        &self,
70        db: &(impl cairo_lang_utils::Upcast<dyn SierraGenGroup + 'a> + ?Sized),
71    ) -> SierraGeneratorTypeLongId {
72        SierraGenGroup::lookup_intern_concrete_type(db.upcast(), self.clone())
73    }
74}
75
76impl<'a>
77    cairo_lang_utils::Intern<'a, dyn SierraGenGroup + 'a, cairo_lang_sierra::ids::ConcreteLibfuncId>
78    for cairo_lang_sierra::program::ConcreteLibfuncLongId
79{
80    fn intern(
81        self,
82        db: &(impl cairo_lang_utils::Upcast<dyn SierraGenGroup + 'a> + ?Sized),
83    ) -> cairo_lang_sierra::ids::ConcreteLibfuncId {
84        SierraGenGroup::intern_concrete_lib_func(db.upcast(), self)
85    }
86}
87
88impl<'a> cairo_lang_utils::Intern<'a, dyn SierraGenGroup + 'a, cairo_lang_sierra::ids::FunctionId>
89    for cairo_lang_lowering::ids::FunctionId
90{
91    fn intern(
92        self,
93        db: &(impl cairo_lang_utils::Upcast<dyn SierraGenGroup + 'a> + ?Sized),
94    ) -> cairo_lang_sierra::ids::FunctionId {
95        SierraGenGroup::intern_sierra_function(db.upcast(), self)
96    }
97}
98
99impl<'a>
100    cairo_lang_utils::Intern<'a, dyn SierraGenGroup + 'a, cairo_lang_sierra::ids::ConcreteTypeId>
101    for SierraGeneratorTypeLongId
102{
103    fn intern(
104        self,
105        db: &(impl cairo_lang_utils::Upcast<dyn SierraGenGroup + 'a> + ?Sized),
106    ) -> cairo_lang_sierra::ids::ConcreteTypeId {
107        SierraGenGroup::intern_concrete_type(db.upcast(), self)
108    }
109}