aboutsummaryrefslogtreecommitdiff
path: root/macros/src
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src')
-rw-r--r--macros/src/codegen/resources.rs79
-rw-r--r--macros/src/codegen/resources_struct.rs8
2 files changed, 45 insertions, 42 deletions
diff --git a/macros/src/codegen/resources.rs b/macros/src/codegen/resources.rs
index 1161a7a5..bec46020 100644
--- a/macros/src/codegen/resources.rs
+++ b/macros/src/codegen/resources.rs
@@ -57,6 +57,7 @@ pub fn codegen(
let attrs = &res.attrs;
const_app.push(quote!(
+ #[allow(non_upper_case_globals)]
#(#attrs)*
#(#cfgs)*
#loc_attr
@@ -65,50 +66,48 @@ pub fn codegen(
));
}
- // generate a resource proxy if needed
- if res.mutability.is_some() {
- if let Some(Ownership::Shared { ceiling }) = analysis.ownerships.get(name) {
- let cfg_core = util::cfg_core(loc.core().expect("UNREACHABLE"), app.args.cores);
+ if let Some(Ownership::Contended { ceiling }) = analysis.ownerships.get(name) {
+ let cfg_core = util::cfg_core(loc.core().expect("UNREACHABLE"), app.args.cores);
- mod_resources.push(quote!(
- #(#cfgs)*
- #cfg_core
- pub struct #name<'a> {
- priority: &'a Priority,
+ mod_resources.push(quote!(
+ #[allow(non_camel_case_types)]
+ #(#cfgs)*
+ #cfg_core
+ pub struct #name<'a> {
+ priority: &'a Priority,
+ }
+
+ #(#cfgs)*
+ #cfg_core
+ impl<'a> #name<'a> {
+ #[inline(always)]
+ pub unsafe fn new(priority: &'a Priority) -> Self {
+ #name { priority }
}
- #(#cfgs)*
- #cfg_core
- impl<'a> #name<'a> {
- #[inline(always)]
- pub unsafe fn new(priority: &'a Priority) -> Self {
- #name { priority }
- }
-
- #[inline(always)]
- pub unsafe fn priority(&self) -> &Priority {
- self.priority
- }
+ #[inline(always)]
+ pub unsafe fn priority(&self) -> &Priority {
+ self.priority
}
- ));
-
- let ptr = if expr.is_none() {
- quote!(#name.as_mut_ptr())
- } else {
- quote!(&mut #name)
- };
-
- const_app.push(util::impl_mutex(
- extra,
- cfgs,
- cfg_core.as_ref(),
- true,
- name,
- quote!(#ty),
- *ceiling,
- ptr,
- ));
- }
+ }
+ ));
+
+ let ptr = if expr.is_none() {
+ quote!(#name.as_mut_ptr())
+ } else {
+ quote!(&mut #name)
+ };
+
+ const_app.push(util::impl_mutex(
+ extra,
+ cfgs,
+ cfg_core.as_ref(),
+ true,
+ name,
+ quote!(#ty),
+ *ceiling,
+ ptr,
+ ));
}
}
diff --git a/macros/src/codegen/resources_struct.rs b/macros/src/codegen/resources_struct.rs
index 0248f199..07a60616 100644
--- a/macros/src/codegen/resources_struct.rs
+++ b/macros/src/codegen/resources_struct.rs
@@ -24,13 +24,17 @@ pub fn codegen(
let mut values = vec![];
let mut has_cfgs = false;
- for name in resources {
+ for (name, access) in resources {
let (res, expr) = app.resource(name).expect("UNREACHABLE");
let cfgs = &res.cfgs;
has_cfgs |= !cfgs.is_empty();
- let mut_ = res.mutability;
+ let mut_ = if access.is_exclusive() {
+ Some(quote!(mut))
+ } else {
+ None
+ };
let ty = &res.ty;
if ctxt.is_init() {