Skip to content

Commit cfc8bc4

Browse files
committed
Generate register type alias so as not to break user code
1 parent 04d7af3 commit cfc8bc4

File tree

2 files changed

+34
-30
lines changed

2 files changed

+34
-30
lines changed

src/generate/peripheral.rs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -902,26 +902,32 @@ fn new_syn_field(ident: &str, ty: syn::Type) -> syn::Field {
902902
}
903903
}
904904

905-
fn name_to_ty_cow<'a>(name: &'a String, ns: Option<&str>) -> Cow<'a, str> {
906-
if let Some(ns) = ns {
905+
fn name_to_ty_str_wrapped(name: &String, ns: Option<&str>) -> String {
906+
let namespace = if let Some(ns) = ns {
907907
Cow::Owned(
908908
String::from("self::")
909909
+ &ns.to_sanitized_snake_case()
910910
+ "::"
911-
+ &name.to_sanitized_upper_case(),
911+
+ &name.to_sanitized_snake_case(),
912912
)
913913
} else {
914-
name.to_sanitized_upper_case()
915-
}
916-
}
917-
918-
fn name_to_ty_str_wrapped(name: &String, ns: Option<&str>) -> String {
919-
let ident = name_to_ty_cow(name, ns);
920-
format!("crate::Reg<{}>", ident)
914+
name.to_sanitized_snake_case()
915+
};
916+
let ident = name.to_sanitized_upper_case();
917+
format!("crate::Reg<{}::{}>", namespace, ident)
921918
}
922919

923920
fn name_to_ty(name: &String, ns: Option<&str>) -> Result<syn::Type, syn::Error> {
924-
let ident = name_to_ty_cow(name, ns);
921+
let ident = if let Some(ns) = ns {
922+
Cow::Owned(
923+
String::from("self::")
924+
+ &ns.to_sanitized_snake_case()
925+
+ "::"
926+
+ &name.to_sanitized_upper_case(),
927+
)
928+
} else {
929+
name.to_sanitized_upper_case()
930+
};
925931
Ok(syn::Type::Path(parse_str::<syn::TypePath>(&ident)?))
926932
}
927933

src/generate/register.rs

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@ pub fn render(
5454
let desc = format!("Reader of register {}", register.name);
5555
mod_items.extend(quote! {
5656
#[doc = #desc]
57-
pub struct R(crate::R<super::#name_pc>);
57+
pub struct R(crate::R<#name_pc>);
5858

5959
impl core::ops::Deref for R {
60-
type Target = crate::R<super::#name_pc>;
60+
type Target = crate::R<#name_pc>;
6161

6262
fn deref(&self) -> &Self::Target {
6363
&self.0
@@ -78,7 +78,7 @@ pub fn render(
7878
let desc = format!("Writer for register {}", register.name);
7979
mod_items.extend(quote! {
8080
#[doc = #desc]
81-
pub struct W(crate::W<super::#name_pc>);
81+
pub struct W(crate::W<#name_pc>);
8282

8383
impl W {
8484
pub unsafe fn bits(&mut self, bits: #rty) -> &mut Self {
@@ -101,8 +101,8 @@ pub fn render(
101101
}
102102
}
103103

104-
impl core::convert::From<crate::W<super::#name_pc>> for W {
105-
fn from(writer: crate::W<super::#name_pc>) -> Self {
104+
impl core::convert::From<crate::W<#name_pc>> for W {
105+
fn from(writer: crate::W<#name_pc>) -> Self {
106106
W(writer)
107107
}
108108
}
@@ -111,7 +111,7 @@ pub fn render(
111111
let doc = format!("Register {} `reset()`'s with value {}", register.name, &rv);
112112
mod_items.extend(quote! {
113113
#[doc = #doc]
114-
impl crate::Resettable for super::#name_pc {
114+
impl crate::Resettable for #name_pc {
115115
#[inline(always)]
116116
fn reset_value() -> Self::Ux { #rv }
117117
}
@@ -185,12 +185,12 @@ pub fn render(
185185

186186
if name_sc != "cfg" {
187187
doc += format!(
188-
"\n\nFor information about available fields see [{0}]({0}) module",
188+
"\n\nFor information about available fields see [{0}](index.html) module",
189189
&name_sc
190190
)
191191
.as_str();
192192
}
193-
out.extend(quote! {
193+
mod_items.extend(quote! {
194194
#[doc = #doc]
195195
pub struct #name_pc;
196196

@@ -200,30 +200,28 @@ pub fn render(
200200
});
201201

202202
if can_read {
203-
let doc = format!(
204-
"`read()` method returns [{0}::R]({0}::R) reader structure",
205-
&name_sc
206-
);
207-
out.extend(quote! {
203+
let doc = "`read()` method returns [R](R) reader structure";
204+
mod_items.extend(quote! {
208205
#[doc = #doc]
209206
impl crate::Readable for #name_pc {
210207
type Reader = R;
211208
}
212209
});
213210
}
214211
if can_write {
215-
let doc = format!(
216-
"`write(|w| ..)` method takes [{0}::W]({0}::W) writer structure",
217-
&name_sc
218-
);
219-
out.extend(quote! {
212+
let doc = "`write(|w| ..)` method takes [W](W) writer structure";
213+
mod_items.extend(quote! {
220214
#[doc = #doc]
221215
impl crate::Writable for #name_pc {
222-
type Writer = #name_sc::W;
216+
type Writer = W;
223217
}
224218
});
225219
}
226220

221+
out.extend(quote! {
222+
pub type #name_pc = crate::Reg<#name_sc::#name_pc>;
223+
});
224+
227225
out.extend(quote! {
228226
#[doc = #description]
229227
pub mod #name_sc #open

0 commit comments

Comments
 (0)