diff options
author | 2018-10-26 18:57:40 +0000 | |
---|---|---|
committer | 2018-10-26 18:57:40 +0000 | |
commit | c5d24f867d7d4f4f270ba99eef89f97cf38a4445 (patch) | |
tree | 3e7ac8f340beebbfe4f0e9be6a53e1e74820e605 /cortex-m-rt/macros/src | |
parent | ac9c05361cfbe46ace2162a3985e4660610747aa (diff) | |
parent | 01802586446225d43790e160768dd6bfb07590a4 (diff) | |
download | cortex-m-c5d24f867d7d4f4f270ba99eef89f97cf38a4445.tar.gz cortex-m-c5d24f867d7d4f4f270ba99eef89f97cf38a4445.tar.zst cortex-m-c5d24f867d7d4f4f270ba99eef89f97cf38a4445.zip |
Merge #140
140: entry/exception/interrupt: improvements to the `static mut` transformation r=therealprof a=japaric
see individual commits for details
Co-authored-by: Jorge Aparicio <jorge@japaric.io>
Diffstat (limited to 'cortex-m-rt/macros/src')
-rw-r--r-- | cortex-m-rt/macros/src/lib.rs | 45 |
1 files changed, 21 insertions, 24 deletions
diff --git a/cortex-m-rt/macros/src/lib.rs b/cortex-m-rt/macros/src/lib.rs index 56ec88c..dd89f06 100644 --- a/cortex-m-rt/macros/src/lib.rs +++ b/cortex-m-rt/macros/src/lib.rs @@ -113,20 +113,19 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { let vars = statics .into_iter() .map(|var| { + let attrs = var.attrs; let ident = var.ident; - // `let` can't shadow a `static mut` so we must give the `static` a different - // name. We'll create a new name by appending an underscore to the original name - // of the `static`. - let mut ident_ = ident.to_string(); - ident_.push('_'); - let ident_ = Ident::new(&ident_, Span::call_site()); let ty = var.ty; let expr = var.expr; quote!( - static mut #ident_: #ty = #expr; #[allow(non_snake_case)] - let #ident: &'static mut #ty = unsafe { &mut #ident_ }; + let #ident: &'static mut #ty = unsafe { + #(#attrs)* + static mut #ident: #ty = #expr; + + &mut #ident + }; ) }).collect::<Vec<_>>(); @@ -401,20 +400,19 @@ pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { let vars = statics .into_iter() .map(|var| { + let attrs = var.attrs; let ident = var.ident; - // `let` can't shadow a `static mut` so we must give the `static` a different - // name. We'll create a new name by appending an underscore to the original name - // of the `static`. - let mut ident_ = ident.to_string(); - ident_.push('_'); - let ident_ = Ident::new(&ident_, Span::call_site()); let ty = var.ty; let expr = var.expr; quote!( - static mut #ident_: #ty = #expr; #[allow(non_snake_case)] - let #ident: &mut #ty = unsafe { &mut #ident_ }; + let #ident: &mut #ty = unsafe { + #(#attrs)* + static mut #ident: #ty = #expr; + + &mut #ident + }; ) }).collect::<Vec<_>>(); @@ -545,20 +543,19 @@ pub fn interrupt(args: TokenStream, input: TokenStream) -> TokenStream { let vars = statics .into_iter() .map(|var| { + let attrs = var.attrs; let ident = var.ident; - // `let` can't shadow a `static mut` so we must give the `static` a different - // name. We'll create a new name by appending an underscore to the original name - // of the `static`. - let mut ident_ = ident.to_string(); - ident_.push('_'); - let ident_ = Ident::new(&ident_, Span::call_site()); let ty = var.ty; let expr = var.expr; quote!( - static mut #ident_: #ty = #expr; #[allow(non_snake_case)] - let #ident: &mut #ty = unsafe { &mut #ident_ }; + let #ident: &mut #ty = unsafe { + #(#attrs)* + static mut #ident: #ty = #expr; + + &mut #ident + }; ) }).collect::<Vec<_>>(); |