Skip to content

Commit 9b9cff1

Browse files
committed
improve readability on enum union default arm handling
1 parent aba51a3 commit 9b9cff1

1 file changed

Lines changed: 24 additions & 32 deletions

File tree

xdr_codegen/src/validate.rs

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,10 @@ impl Definition {
129129
deps: Vec::new(),
130130
},
131131
}),
132-
Definition::Union(u) => {
133-
match &u.body {
134-
XdrUnionBody::Bool(body) => body.validate(u, tab, size_tab),
135-
XdrUnionBody::Enum(body) => body.validate(u, tab, size_tab),
136-
}
137-
}
132+
Definition::Union(u) => match &u.body {
133+
XdrUnionBody::Bool(body) => body.validate(u, tab, size_tab),
134+
XdrUnionBody::Enum(body) => body.validate(u, tab, size_tab),
135+
},
138136
};
139137

140138
Ok(ret)
@@ -312,41 +310,30 @@ impl XdrUnionBoolBody {
312310
fn validate(
313311
&self,
314312
u: &XdrUnion,
315-
tab: &SymbolTable,
316-
size_tab: &HashMap<String, DefinitionSize>,
313+
_tab: &SymbolTable,
314+
_size_tab: &HashMap<String, DefinitionSize>,
317315
) -> ValidatedDefinition {
318-
let true_size = self.true_arm.size(tab, size_tab);
319-
let false_size = self.false_arm.size(tab, size_tab);
320-
321-
let (known, deps) = if true_size.is_some() && true_size == false_size {
322-
(true_size.unwrap(), Vec::new())
323-
} else {
324-
let arm_names: Vec<String> = [self.true_arm.name(), self.false_arm.name()]
325-
.iter()
326-
.filter_map(|val| *val)
327-
.map(|val| val.to_string())
328-
.collect();
329-
330-
if arm_names.is_empty() {
331-
panic!("both boolean arms for {} are unamed, which is weird, because the two arm sizes should have evaluated to equal eachother and never reached this case", u.name)
332-
}
333-
334-
(0, arm_names)
335-
};
316+
let arm_names: Vec<String> = [self.true_arm.name(), self.false_arm.name()]
317+
.iter()
318+
.filter_map(|val| *val)
319+
.map(|val| val.to_string())
320+
.collect();
336321

322+
// bool union body size is never known as there is always a void member and a non void
323+
// member
337324
ValidatedDefinition::Union(ValidatedUnion {
338325
name: u.name.clone(),
339326
body: ValidatedUnionBody::Bool(ValidatedUnionBoolBody {
340327
true_arm: self.true_arm.clone(),
341328
false_arm: self.false_arm.clone(),
342329
size: DefinitionSize {
343-
known,
344-
deps: deps.clone(),
330+
known: 0,
331+
deps: arm_names.clone(),
345332
},
346333
}),
347334
size: DefinitionSize {
348-
known: 4 + known,
349-
deps: deps.clone(),
335+
known: 4,
336+
deps: arm_names,
350337
},
351338
})
352339
}
@@ -409,8 +396,13 @@ impl XdrUnionEnumBody {
409396

410397
// if all the enum cases are covered by the match arms, we can elide the
411398
// default case
412-
let size = if self.default_arm.is_some() && !left.is_empty() {
413-
let default_arm = self.default_arm.as_ref().unwrap();
399+
let default_arm = if !left.is_empty() {
400+
self.default_arm.as_ref()
401+
} else {
402+
None
403+
};
404+
405+
let size = if let Some(default_arm) = default_arm {
414406
let default_size = default_arm.size(tab, size_tab);
415407
if default_size.is_none()
416408
|| arms_iter.all(|(_, d)| d.size(tab, size_tab) == default_size)

0 commit comments

Comments
 (0)