Skip to content

Commit 1a1204c

Browse files
committed
refactor-accessors
1 parent f0f71e9 commit 1a1204c

File tree

2 files changed

+149
-242
lines changed

2 files changed

+149
-242
lines changed

src/generate/peripheral.rs

+51-67
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ struct RegisterBlockField {
294294
syn_field: syn::Field,
295295
offset: u32,
296296
size: u32,
297-
accessors: Vec<Accessor>,
297+
accessors: Vec<AccessType>,
298298
}
299299

300300
#[derive(Clone, Debug)]
@@ -1003,17 +1003,18 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
10031003
let doc = make_comment(cluster_size, info.address_offset, &description);
10041004
let name: Ident = ident(&info.name, config, "cluster_accessor", span);
10051005
let syn_field = new_syn_field(name.clone(), ty.clone());
1006+
let accessor = Accessor::Reg(RegAccessor {
1007+
doc,
1008+
name,
1009+
ty,
1010+
offset: unsuffixed(info.address_offset),
1011+
})
1012+
.raw_if(false);
10061013
cluster_expanded.push(RegisterBlockField {
10071014
syn_field,
10081015
offset: info.address_offset,
10091016
size: cluster_size,
1010-
accessors: vec![RegAccessor {
1011-
doc,
1012-
name,
1013-
ty,
1014-
offset: unsuffixed(info.address_offset),
1015-
}
1016-
.into()],
1017+
accessors: vec![accessor],
10171018
})
10181019
}
10191020
Cluster::Array(info, array_info) => {
@@ -1059,28 +1060,18 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
10591060
info.address_offset,
10601061
&description,
10611062
);
1062-
let mut accessors = Vec::<Accessor>::with_capacity((array_info.dim + 1) as _);
1063-
accessors.push(if array_convertible {
1064-
ArrayAccessor {
1065-
doc,
1066-
name: accessor_name.clone(),
1067-
ty: ty.clone(),
1068-
offset: unsuffixed(info.address_offset),
1069-
dim: unsuffixed(array_info.dim),
1070-
increment: unsuffixed(array_info.dim_increment),
1071-
}
1072-
.into()
1073-
} else {
1074-
RawArrayAccessor {
1063+
let mut accessors = Vec::with_capacity((array_info.dim + 1) as _);
1064+
accessors.push(
1065+
Accessor::Array(ArrayAccessor {
10751066
doc,
10761067
name: accessor_name.clone(),
10771068
ty: ty.clone(),
10781069
offset: unsuffixed(info.address_offset),
10791070
dim: unsuffixed(array_info.dim),
10801071
increment: unsuffixed(array_info.dim_increment),
1081-
}
1082-
.into()
1083-
});
1072+
})
1073+
.raw_if(!array_convertible),
1074+
);
10841075
if !sequential_indexes_from0 || !ends_with_index {
10851076
for (i, ci) in svd::cluster::expand(info, array_info).enumerate() {
10861077
let idx_name = ident(&ci.name, config, "cluster_accessor", span);
@@ -1091,14 +1082,14 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
10911082
);
10921083
let i = unsuffixed(i as u64);
10931084
accessors.push(
1094-
ArrayElemAccessor {
1085+
Accessor::ArrayElem(ArrayElemAccessor {
10951086
doc,
10961087
name: idx_name,
10971088
ty: ty.clone(),
10981089
basename: accessor_name.clone(),
10991090
i,
1100-
}
1101-
.into(),
1091+
})
1092+
.raw_if(false),
11021093
);
11031094
}
11041095
}
@@ -1128,17 +1119,18 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
11281119
let name = ident(&ci.name, config, "cluster_accessor", span);
11291120
let syn_field = new_syn_field(name.clone(), ty.clone());
11301121

1122+
let accessor = Accessor::Reg(RegAccessor {
1123+
doc,
1124+
name,
1125+
ty: ty.clone(),
1126+
offset: unsuffixed(info.address_offset),
1127+
})
1128+
.raw_if(false);
11311129
cluster_expanded.push(RegisterBlockField {
11321130
syn_field,
11331131
offset: ci.address_offset,
11341132
size: cluster_size,
1135-
accessors: vec![RegAccessor {
1136-
doc,
1137-
name,
1138-
ty: ty.clone(),
1139-
offset: unsuffixed(info.address_offset),
1140-
}
1141-
.into()],
1133+
accessors: vec![accessor],
11421134
});
11431135
}
11441136
}
@@ -1179,17 +1171,18 @@ fn expand_register(
11791171
let ty = name_to_ty(ident(&ty_str, config, "register", span));
11801172
let name: Ident = ident(&ty_name, config, "register_accessor", span);
11811173
let syn_field = new_syn_field(name.clone(), ty.clone());
1174+
let accessor = Accessor::Reg(RegAccessor {
1175+
doc,
1176+
name,
1177+
ty,
1178+
offset: unsuffixed(info.address_offset),
1179+
})
1180+
.raw_if(false);
11821181
register_expanded.push(RegisterBlockField {
11831182
syn_field,
11841183
offset: info.address_offset,
11851184
size: register_size,
1186-
accessors: vec![RegAccessor {
1187-
doc,
1188-
name,
1189-
ty,
1190-
offset: unsuffixed(info.address_offset),
1191-
}
1192-
.into()],
1185+
accessors: vec![accessor],
11931186
})
11941187
}
11951188
Register::Array(info, array_info) => {
@@ -1250,28 +1243,18 @@ fn expand_register(
12501243
info.address_offset,
12511244
&description,
12521245
);
1253-
let mut accessors = Vec::<Accessor>::with_capacity((array_info.dim + 1) as _);
1254-
accessors.push(if array_convertible {
1255-
ArrayAccessor {
1256-
doc,
1257-
name: accessor_name.clone(),
1258-
ty: ty.clone(),
1259-
offset: unsuffixed(info.address_offset),
1260-
dim: unsuffixed(array_info.dim),
1261-
increment: unsuffixed(array_info.dim_increment),
1262-
}
1263-
.into()
1264-
} else {
1265-
RawArrayAccessor {
1246+
let mut accessors = Vec::with_capacity((array_info.dim + 1) as _);
1247+
accessors.push(
1248+
Accessor::Array(ArrayAccessor {
12661249
doc,
12671250
name: accessor_name.clone(),
12681251
ty: ty.clone(),
12691252
offset: unsuffixed(info.address_offset),
12701253
dim: unsuffixed(array_info.dim),
12711254
increment: unsuffixed(array_info.dim_increment),
1272-
}
1273-
.into()
1274-
});
1255+
})
1256+
.raw_if(!array_convertible),
1257+
);
12751258
if !sequential_indexes_from0 || !ends_with_index {
12761259
for (i, ri) in svd::register::expand(info, array_info).enumerate() {
12771260
let idx_name = ident(
@@ -1287,14 +1270,14 @@ fn expand_register(
12871270
);
12881271
let i = unsuffixed(i as u64);
12891272
accessors.push(
1290-
ArrayElemAccessor {
1273+
Accessor::ArrayElem(ArrayElemAccessor {
12911274
doc,
12921275
name: idx_name,
12931276
ty: ty.clone(),
12941277
basename: accessor_name.clone(),
12951278
i,
1296-
}
1297-
.into(),
1279+
})
1280+
.raw_if(false),
12981281
);
12991282
}
13001283
};
@@ -1324,17 +1307,18 @@ fn expand_register(
13241307
let name = ident(&ri.name, config, "register_accessor", span);
13251308
let syn_field = new_syn_field(name.clone(), ty.clone());
13261309

1310+
let accessor = Accessor::Reg(RegAccessor {
1311+
doc,
1312+
name,
1313+
ty: ty.clone(),
1314+
offset: unsuffixed(info.address_offset),
1315+
})
1316+
.raw_if(false);
13271317
register_expanded.push(RegisterBlockField {
13281318
syn_field,
13291319
offset: ri.address_offset,
13301320
size: register_size,
1331-
accessors: vec![RegAccessor {
1332-
doc,
1333-
name,
1334-
ty: ty.clone(),
1335-
offset: unsuffixed(info.address_offset),
1336-
}
1337-
.into()],
1321+
accessors: vec![accessor],
13381322
});
13391323
}
13401324
}

0 commit comments

Comments
 (0)