aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen/module.rs
diff options
context:
space:
mode:
authorGravatar Emil Fresk <emil.fresk@gmail.com> 2021-04-08 18:25:09 +0200
committerGravatar Emil Fresk <emil.fresk@gmail.com> 2021-04-08 19:58:20 +0200
commit6aa0fb450f417ce899b43f4539eb226b391a0f2e (patch)
tree2202c8bb4aa2ba2451f025784a5bad99c4370b2e /macros/src/codegen/module.rs
parent43c5ad79c27fbdefa00e2373eba554ec11e1d9df (diff)
downloadrtic-6aa0fb450f417ce899b43f4539eb226b391a0f2e.tar.gz
rtic-6aa0fb450f417ce899b43f4539eb226b391a0f2e.tar.zst
rtic-6aa0fb450f417ce899b43f4539eb226b391a0f2e.zip
Goodbye static mut
Diffstat (limited to 'macros/src/codegen/module.rs')
-rw-r--r--macros/src/codegen/module.rs38
1 files changed, 24 insertions, 14 deletions
diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs
index 50146c02..8c148ccb 100644
--- a/macros/src/codegen/module.rs
+++ b/macros/src/codegen/module.rs
@@ -245,14 +245,15 @@ pub fn codegen(
let input = #tupled;
unsafe {
- if let Some(index) = rtic::export::interrupt::free(|_| #app_path::#fq.dequeue()) {
+ if let Some(index) = rtic::export::interrupt::free(|_| #app_path::#fq.get_mut_unchecked().dequeue()) {
#app_path::#inputs
+ .get_mut_unchecked()
.get_unchecked_mut(usize::from(index))
.as_mut_ptr()
.write(input);
rtic::export::interrupt::free(|_| {
- #app_path::#rq.enqueue_unchecked((#app_path::#t::#name, index));
+ #app_path::#rq.get_mut_unchecked().enqueue_unchecked((#app_path::#t::#name, index));
});
rtic::pend(#device::#enum_::#interrupt);
@@ -304,6 +305,9 @@ pub fn codegen(
let user_imports = &app.user_imports;
let tq_marker = util::mark_internal_ident(&util::timer_queue_marker_ident());
+ // let doc = format!(" RTIC internal: {}:{}", file!(), line!());
+ // items.push(quote!(#[doc = #doc]));
+
items.push(quote!(
/// Holds methods related to this monotonic
pub mod #m {
@@ -325,12 +329,16 @@ pub fn codegen(
impl SpawnHandle {
pub fn cancel(self) -> Result<#ty, ()> {
rtic::export::interrupt::free(|_| unsafe {
- let tq = &mut *#app_path::#tq.as_mut_ptr();
+ let tq = &mut *#app_path::#tq.get_mut_unchecked().as_mut_ptr();
if let Some((_task, index)) = tq.cancel_marker(self.marker) {
// Get the message
- let msg = #app_path::#inputs.get_unchecked(usize::from(index)).as_ptr().read();
+ let msg = #app_path::#inputs
+ .get_unchecked()
+ .get_unchecked(usize::from(index))
+ .as_ptr()
+ .read();
// Return the index to the free queue
- #app_path::#fq.split().0.enqueue_unchecked(index);
+ #app_path::#fq.get_mut_unchecked().split().0.enqueue_unchecked(index);
Ok(msg)
} else {
@@ -350,10 +358,10 @@ pub fn codegen(
pub fn reschedule_at(self, instant: rtic::time::Instant<#app_path::#mono_type>) -> Result<Self, ()>
{
rtic::export::interrupt::free(|_| unsafe {
- let marker = #tq_marker;
- #tq_marker = #tq_marker.wrapping_add(1);
+ let marker = *#tq_marker.get_mut_unchecked();
+ *#tq_marker.get_mut_unchecked() = #tq_marker.get_mut_unchecked().wrapping_add(1);
- let tq = &mut *#app_path::#tq.as_mut_ptr();
+ let tq = &mut *#app_path::#tq.get_mut_unchecked().as_mut_ptr();
tq.update_marker(self.marker, marker, instant, || #pend).map(|_| SpawnHandle { marker })
})
@@ -373,7 +381,7 @@ pub fn codegen(
D::T: Into<<#app_path::#mono_type as rtic::time::Clock>::T>,
{
- let instant = if rtic::export::interrupt::free(|_| unsafe { #app_path::#m_ident.is_none() }) {
+ let instant = if rtic::export::interrupt::free(|_| unsafe { #app_path::#m_ident.get_mut_unchecked().is_none() }) {
rtic::time::Instant::new(0)
} else {
#app_path::monotonics::#m::now()
@@ -390,19 +398,21 @@ pub fn codegen(
) -> Result<SpawnHandle, #ty> {
unsafe {
let input = #tupled;
- if let Some(index) = rtic::export::interrupt::free(|_| #app_path::#fq.dequeue()) {
+ if let Some(index) = rtic::export::interrupt::free(|_| #app_path::#fq.get_mut_unchecked().dequeue()) {
#app_path::#inputs
+ .get_mut_unchecked()
.get_unchecked_mut(usize::from(index))
.as_mut_ptr()
.write(input);
#app_path::#instants
+ .get_mut_unchecked()
.get_unchecked_mut(usize::from(index))
.as_mut_ptr()
.write(instant);
rtic::export::interrupt::free(|_| {
- let marker = #tq_marker;
+ let marker = *#tq_marker.get_mut_unchecked();
let nr = rtic::export::NotReady {
instant,
index,
@@ -410,15 +420,15 @@ pub fn codegen(
marker,
};
- #tq_marker = #tq_marker.wrapping_add(1);
+ *#tq_marker.get_mut_unchecked() = #tq_marker.get_mut_unchecked().wrapping_add(1);
- let tq = unsafe { &mut *#app_path::#tq.as_mut_ptr() };
+ let tq = &mut *#app_path::#tq.get_mut_unchecked().as_mut_ptr();
tq.enqueue_unchecked(
nr,
|| #enable_interrupt,
|| #pend,
- #app_path::#m_ident.as_mut());
+ #app_path::#m_ident.get_mut_unchecked().as_mut());
Ok(SpawnHandle { marker })
})
a>Gravatar Jarred Sumner 2-1/+3 2023-02-15don't return an error thereGravatar Jarred Sumner 2-1/+3 2023-02-15Fix castGravatar Jarred Sumner 1-15/+17 2023-02-15ensure we allocate for > 6 argumentsGravatar Jarred Sumner 1-6/+13 2023-02-15Update async_hooks.exports.jsGravatar Jarred Sumner 1-2/+2 2023-02-15workaround prisma's usage of `eval("__dirname")`Gravatar Jarred Sumner 1-1/+23 2023-02-15some cleanupGravatar Jarred Sumner 2-15/+9 2023-02-15ED25519 WebCrypto (#1971)Gravatar Jarred Sumner 12-11/+1167 2023-02-14Fix up async_hooks polyfillGravatar Jarred Sumner 2-8/+63 2023-02-14Add temporary polyfill for async_hooksGravatar Jarred Sumner 5-108/+324 2023-02-14:mask: async_hooksGravatar Jarred Sumner 1-0/+4 2023-02-14[install] link network-delayed `.bin` scripts correctly (#2076)Gravatar Alex Lam S.L 3-16/+21 2023-02-14don't break esbuildGravatar Jarred Sumner 7-75/+50 2023-02-14Add workaround for `tls` and `worker_threads`Gravatar Jarred Sumner 3-1/+64 2023-02-14[install] improve `package.json` validation (#2074)Gravatar Alex Lam S.L 6-104/+342 2023-02-14[WIP] fix(node:fs): export `fs.ReadStream` and `fs.WriteStream` (#1798)Gravatar Derrick Farris 4-72/+326 2023-02-14Reject with error when invalid fetch() body (#2047)Gravatar Eric Zhang 2-12/+44 2023-02-13fix(FormData): make String explicit, thanks @dylan-conway (#2065)Gravatar Derrick Farris 1-1/+1 2023-02-13fix(FormData): add string literal operator (#2064)Gravatar Derrick Farris 1-2/+2 2023-02-13Add pretty printer for FormDataGravatar Jarred Sumner 5-1/+101 2023-02-13Add dynamic port assigning to Bun.serve (#2062)Gravatar MichaƂ Warda 3-5/+40 2023-02-13feat(napi): add `napi_get_value_bigint_words` (#2061)Gravatar Derrick Farris 3-0/+44 2023-02-13Fixes https://github.com/oven-sh/bun/issues/1456Gravatar Jarred Sumner 8-1/+148