Skip to content

Commit 15b72b7

Browse files
committed
Flatten nesting in Bitfield::extend_ctor_impl
This commit flattens the nesting in `Bitfield::extend_ctor_impl`, as requested in review, because it was getting pretty deep. Should be easier to read now.
1 parent a7f44bd commit 15b72b7

File tree

1 file changed

+48
-45
lines changed

1 file changed

+48
-45
lines changed

src/codegen/mod.rs

+48-45
Original file line numberDiff line numberDiff line change
@@ -1070,55 +1070,58 @@ impl Bitfield {
10701070
ctor_name: &ast::Ident,
10711071
unit_field_int_ty: &P<ast::Ty>)
10721072
-> P<ast::Item> {
1073-
match ctor_impl.unwrap().node {
1074-
ast::ItemKind::Impl(_, _, _, _, _, ref items) => {
1075-
assert_eq!(items.len(), 1);
1073+
let items = match ctor_impl.unwrap().node {
1074+
ast::ItemKind::Impl(_, _, _, _, _, items) => {
1075+
items
1076+
}
1077+
_ => unreachable!(),
1078+
};
10761079

1077-
match items.get(0).unwrap().node {
1078-
ast::ImplItemKind::Method(ref sig, ref body) => {
1079-
let params = sig.decl.clone().unwrap().inputs;
1080-
let param_name = bitfield_getter_name(ctx, parent, self.name());
1081-
1082-
let bitfield_ty_item = ctx.resolve_item(self.ty());
1083-
let bitfield_ty = bitfield_ty_item.expect_type();
1084-
let bitfield_ty_layout = bitfield_ty.layout(ctx)
1085-
.expect("Bitfield without layout? Gah!");
1086-
let bitfield_int_ty = BlobTyBuilder::new(bitfield_ty_layout).build();
1087-
let bitfield_ty = bitfield_ty
1088-
.to_rust_ty_or_opaque(ctx, bitfield_ty_item);
1089-
1090-
let offset = self.offset_into_unit();
1091-
let mask = self.mask();
1092-
1093-
// If we're generating unstable Rust, add the const.
1094-
let fn_prefix = if ctx.options().unstable_rust {
1095-
quote_tokens!(ctx.ext_cx(), pub const fn)
1096-
} else {
1097-
quote_tokens!(ctx.ext_cx(), pub fn)
1098-
};
1080+
assert_eq!(items.len(), 1);
1081+
let (sig, body) = match items[0].node {
1082+
ast::ImplItemKind::Method(ref sig, ref body) => {
1083+
(sig, body)
1084+
}
1085+
_ => unreachable!(),
1086+
};
10991087

1100-
quote_item!(
1101-
ctx.ext_cx(),
1102-
impl XxxUnused {
1103-
#[inline]
1104-
$fn_prefix $ctor_name($params $param_name : $bitfield_ty)
1105-
-> $unit_field_int_ty {
1106-
let bitfield_unit_val = $body;
1107-
let $param_name = $param_name
1108-
as $bitfield_int_ty
1109-
as $unit_field_int_ty;
1110-
let mask = $mask as $unit_field_int_ty;
1111-
let $param_name = ($param_name << $offset) & mask;
1112-
bitfield_unit_val | $param_name
1113-
}
1114-
}
1115-
).unwrap()
1116-
}
1117-
_ => unreachable!(),
1088+
let params = sig.decl.clone().unwrap().inputs;
1089+
let param_name = bitfield_getter_name(ctx, parent, self.name());
1090+
1091+
let bitfield_ty_item = ctx.resolve_item(self.ty());
1092+
let bitfield_ty = bitfield_ty_item.expect_type();
1093+
let bitfield_ty_layout = bitfield_ty.layout(ctx)
1094+
.expect("Bitfield without layout? Gah!");
1095+
let bitfield_int_ty = BlobTyBuilder::new(bitfield_ty_layout).build();
1096+
let bitfield_ty = bitfield_ty
1097+
.to_rust_ty_or_opaque(ctx, bitfield_ty_item);
1098+
1099+
let offset = self.offset_into_unit();
1100+
let mask = self.mask();
1101+
1102+
// If we're generating unstable Rust, add the const.
1103+
let fn_prefix = if ctx.options().unstable_rust {
1104+
quote_tokens!(ctx.ext_cx(), pub const fn)
1105+
} else {
1106+
quote_tokens!(ctx.ext_cx(), pub fn)
1107+
};
1108+
1109+
quote_item!(
1110+
ctx.ext_cx(),
1111+
impl XxxUnused {
1112+
#[inline]
1113+
$fn_prefix $ctor_name($params $param_name : $bitfield_ty)
1114+
-> $unit_field_int_ty {
1115+
let bitfield_unit_val = $body;
1116+
let $param_name = $param_name
1117+
as $bitfield_int_ty
1118+
as $unit_field_int_ty;
1119+
let mask = $mask as $unit_field_int_ty;
1120+
let $param_name = ($param_name << $offset) & mask;
1121+
bitfield_unit_val | $param_name
11181122
}
11191123
}
1120-
_ => unreachable!(),
1121-
}
1124+
).unwrap()
11221125
}
11231126
}
11241127

0 commit comments

Comments
 (0)