From 1556948458a386d13ff756e64dc60f8a6198e9d8 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Fri, 22 Sep 2017 18:19:18 +0200 Subject: Fix shared resource handling and extend example. The extended example tests that this actually works this time. --- macros/src/trans.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'macros/src/trans.rs') diff --git a/macros/src/trans.rs b/macros/src/trans.rs index 890e083..45841e7 100644 --- a/macros/src/trans.rs +++ b/macros/src/trans.rs @@ -351,6 +351,11 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec) { Ownership::Shared { ceiling } => { if let Some(resource) = app.resources.get(name) { let ty = &resource.ty; + let res_rvalue = if resource.expr.is_some() { + quote!(#_name) + } else { + quote!(#_name.some) + }; impl_items.push(quote! { type Data = #ty; @@ -361,7 +366,7 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec) { ) -> &'cs #krate::Static<#ty> { assert!(t.value() >= #ceiling); - unsafe { #krate::Static::ref_(&#_name) } + unsafe { #krate::Static::ref_(&#res_rvalue) } } fn borrow_mut<'cs>( @@ -371,7 +376,7 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec) { assert!(t.value() >= #ceiling); unsafe { - #krate::Static::ref_mut(&mut #_name) + #krate::Static::ref_mut(&mut #res_rvalue) } } @@ -387,7 +392,7 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec) { { unsafe { #krate::claim( - #krate::Static::ref_(&#_name), + #krate::Static::ref_(&#res_rvalue), #ceiling, #device::NVIC_PRIO_BITS, t, @@ -408,7 +413,7 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec) { { unsafe { #krate::claim( - #krate::Static::ref_mut(&mut #_name), + #krate::Static::ref_mut(&mut #res_rvalue), #ceiling, #device::NVIC_PRIO_BITS, t, -- cgit v1.2.3