aboutsummaryrefslogtreecommitdiff
path: root/cortex-m-rt/macros/src
diff options
context:
space:
mode:
authorGravatar bors[bot] <bors[bot]@users.noreply.github.com> 2018-10-26 18:57:40 +0000
committerGravatar bors[bot] <bors[bot]@users.noreply.github.com> 2018-10-26 18:57:40 +0000
commitc5d24f867d7d4f4f270ba99eef89f97cf38a4445 (patch)
tree3e7ac8f340beebbfe4f0e9be6a53e1e74820e605 /cortex-m-rt/macros/src
parentac9c05361cfbe46ace2162a3985e4660610747aa (diff)
parent01802586446225d43790e160768dd6bfb07590a4 (diff)
downloadcortex-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.rs45
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<_>>();