MCPcopy Create free account
hub / github.com/Amanieu/regalloc3 / parse_class_def

Function parse_class_def

src/debug_utils/generic_reginfo/parse.rs:146–261  ·  view source on GitHub ↗
(
    pair: Pair<'_, Rule>,
    bank: RegBank,
    classes: &mut PrimaryMap<RegClass, RegClassData>,
    regs: &mut PrimaryMap<PhysReg, PhysRegData>,
    superclasses: &mut SecondaryMap<RegClass, RegC

Source from the content-addressed store, hash-verified

144}
145
146fn parse_class_def(
147 pair: Pair<'_, Rule>,
148 bank: RegBank,
149 classes: &mut PrimaryMap<RegClass, RegClassData>,
150 regs: &mut PrimaryMap<PhysReg, PhysRegData>,
151 superclasses: &mut SecondaryMap<RegClass, RegClassSet>,
152) -> Result<()> {
153 let span = pair.as_span();
154 let mut group_size = None;
155 let mut includes_spillslots = false;
156 let mut spill_cost = None;
157 let mut members = None;
158 let mut allocation_order = None;
159 let mut is_group = None;
160 for pair in pair.into_inner() {
161 match pair.as_rule() {
162 Rule::class => {
163 parse_expected_entity(pair, classes.next_key())?;
164 }
165 Rule::superclasses => {
166 let [class_list] = extract(pair, [Rule::class_list]);
167 let list = parse_entity_list(class_list)?;
168 superclasses.grow_to(classes.len() + 1);
169 superclasses[classes.next_key()].extend(list);
170 }
171 Rule::group_size => {
172 if group_size.is_some() {
173 Err(custom_error(pair.as_span(), "duplicate attribute"))?;
174 }
175 let [number] = extract(pair, [Rule::number]);
176 group_size = Some(parse_number(number)?);
177 }
178 Rule::allows_spillslots => {
179 if includes_spillslots {
180 Err(custom_error(pair.as_span(), "duplicate attribute"))?;
181 }
182 includes_spillslots = true;
183 }
184 Rule::spill_cost => {
185 if spill_cost.is_some() {
186 Err(custom_error(pair.as_span(), "duplicate attribute"))?;
187 }
188 let [float] = extract(pair, [Rule::float]);
189 spill_cost = Some(parse_number(float)?);
190 }
191 Rule::class_members => {
192 if members.is_some() {
193 Err(custom_error(pair.as_span(), "duplicate attribute"))?;
194 }
195 let [reg_or_reg_group_list] = extract(pair, [Rule::reg_or_reg_group_list]);
196 members = Some(parse_reg_group_list(reg_or_reg_group_list, &mut is_group)?);
197 }
198 Rule::allocation_order => {
199 if allocation_order.is_some() {
200 Err(custom_error(pair.as_span(), "duplicate attribute"))?;
201 }
202 let [reg_or_reg_group_list] = extract(pair, [Rule::reg_or_reg_group_list]);
203 allocation_order =

Callers 1

parse_bank_defFunction · 0.85

Calls 14

parse_reg_group_listFunction · 0.85
next_keyMethod · 0.80
is_someMethod · 0.80
cloneMethod · 0.80
pushMethod · 0.80
parse_expected_entityFunction · 0.70
extractFunction · 0.70
parse_entity_listFunction · 0.70
custom_errorFunction · 0.70
parse_numberFunction · 0.70
grow_toMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected