diff options
author | 2021-07-22 10:57:49 +0000 | |
---|---|---|
committer | 2021-07-22 10:57:49 +0000 | |
commit | 49d4185e3bc3921250dfdf90c2816770adf1625f (patch) | |
tree | f89490cd0990be12b0ba8d30e408f64f8c0bc78d /macros/src | |
parent | adb4bc4c4ea85b12a6d7f75821e76ee33a9a8e70 (diff) | |
parent | 5f395658f03ccd092d9e17edc949804012869157 (diff) | |
download | rtic-49d4185e3bc3921250dfdf90c2816770adf1625f.tar.gz rtic-49d4185e3bc3921250dfdf90c2816770adf1625f.tar.zst rtic-49d4185e3bc3921250dfdf90c2816770adf1625f.zip |
Merge #501
501: Propogate the task attributes to the spawn handles r=AfoHT a=crawford
This allows tasks to be gated by `cfg` attributes when also using
monotonics. For example:
```rust
#[cfg(feature = "logging")]
#[task(shared = [logger])]
fn logger_init(mut cx: logger_init::Context) {
/* ... */
}
```
Without this change, the reschedule_at() implementation is
unconditionally included even though it references the SpawnHandle from
its task module, which is _conditionally_ included. This resulted in
compiler errors like the following:
```
error[E0433]: failed to resolve: use of undeclared crate or module `logger_init`
--> src/main.rs:243:8
|
243 | fn logger_init(mut cx: logger_init::Context) {
| ^^^^^^^^^^^ use of undeclared crate or module `logger_init`
```
Co-authored-by: Alex Crawford <rtic@code.acrawford.com>
Diffstat (limited to 'macros/src')
-rw-r--r-- | macros/src/codegen/module.rs | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs index a59d6628..c7092bd3 100644 --- a/macros/src/codegen/module.rs +++ b/macros/src/codegen/module.rs @@ -317,11 +317,13 @@ pub fn codegen( )); items.push(quote!( + #(#cfgs)* pub struct #internal_spawn_handle_ident { #[doc(hidden)] marker: u32, } + #(#cfgs)* impl #internal_spawn_handle_ident { pub fn cancel(self) -> Result<#ty, ()> { rtic::export::interrupt::free(|_| unsafe { |