aboutsummaryrefslogtreecommitdiff
path: root/macros/src
diff options
context:
space:
mode:
authorGravatar Jonas Schievink <jonasschievink@gmail.com> 2017-09-22 18:19:18 +0200
committerGravatar Jonas Schievink <jonasschievink@gmail.com> 2017-09-22 18:19:18 +0200
commit1556948458a386d13ff756e64dc60f8a6198e9d8 (patch)
treee06c41e37dcc732ef2525cdc676e519564b173bd /macros/src
parent70e243694dba333c62116e692edecfaf93186413 (diff)
downloadrtic-1556948458a386d13ff756e64dc60f8a6198e9d8.tar.gz
rtic-1556948458a386d13ff756e64dc60f8a6198e9d8.tar.zst
rtic-1556948458a386d13ff756e64dc60f8a6198e9d8.zip
Fix shared resource handling and extend example.
The extended example tests that this actually works this time.
Diffstat (limited to 'macros/src')
-rw-r--r--macros/src/trans.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/macros/src/trans.rs b/macros/src/trans.rs
index 890e083d..45841e73 100644
--- a/macros/src/trans.rs
+++ b/macros/src/trans.rs
@@ -351,6 +351,11 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
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<Tokens>) {
) -> &'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<Tokens>) {
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<Tokens>) {
{
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<Tokens>) {
{
unsafe {
#krate::claim(
- #krate::Static::ref_mut(&mut #_name),
+ #krate::Static::ref_mut(&mut #res_rvalue),
#ceiling,
#device::NVIC_PRIO_BITS,
t,