mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-11-23 20:22:51 +01:00
Fix "Could not find Op
in proc_macro
"
This commit is contained in:
parent
53dbbad891
commit
14b1811182
4 changed files with 25 additions and 22 deletions
|
@ -17,6 +17,10 @@ cortex-m = "0.4.0"
|
||||||
cortex-m-rtfm-macros = { path = "macros", version = "0.3.1" }
|
cortex-m-rtfm-macros = { path = "macros", version = "0.3.1" }
|
||||||
rtfm-core = "0.2.0"
|
rtfm-core = "0.2.0"
|
||||||
untagged-option = "0.1.1"
|
untagged-option = "0.1.1"
|
||||||
|
syn = "0.14.2"
|
||||||
|
quote = "0.6.3"
|
||||||
|
proc-macro2 = "0.4.6"
|
||||||
|
failure = "0.1.1"
|
||||||
|
|
||||||
[target.'cfg(target_arch = "x86_64")'.dev-dependencies]
|
[target.'cfg(target_arch = "x86_64")'.dev-dependencies]
|
||||||
compiletest_rs = "0.3.5"
|
compiletest_rs = "0.3.5"
|
||||||
|
|
|
@ -11,10 +11,10 @@ version = "0.3.1"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
failure = "0.1.1"
|
failure = "0.1.1"
|
||||||
proc-macro2 = "0.3.6"
|
proc-macro2 = "0.4.6"
|
||||||
quote = "0.5.1"
|
quote = "0.6.3"
|
||||||
rtfm-syntax = "0.3.0"
|
rtfm-syntax = {git = "https://github.com/chocol4te/rtfm-syntax.git"}
|
||||||
syn = "0.13.1"
|
syn = "0.14.2"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
proc-macro = true
|
proc-macro = true
|
||||||
|
|
|
@ -61,7 +61,7 @@ pub fn app(app: check::App) -> Result<App> {
|
||||||
tasks: app.tasks
|
tasks: app.tasks
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(k, v)| {
|
.map(|(k, v)| {
|
||||||
let v = ::check::task(k.as_ref(), v)?;
|
let v = ::check::task(&k.to_string(), v)?;
|
||||||
|
|
||||||
Ok((k, v))
|
Ok((k, v))
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
use proc_macro2::Span;
|
use proc_macro2::{TokenStream, Span};
|
||||||
use quote::Tokens;
|
|
||||||
use syn::{Ident, LitStr};
|
use syn::{Ident, LitStr};
|
||||||
|
|
||||||
use analyze::Ownerships;
|
use analyze::Ownerships;
|
||||||
use check::{App, Kind};
|
use check::{App, Kind};
|
||||||
|
|
||||||
fn krate() -> Ident {
|
fn krate() -> Ident {
|
||||||
Ident::from("rtfm")
|
Ident::new("rtfm", Span::call_site())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn app(app: &App, ownerships: &Ownerships) -> Tokens {
|
pub fn app(app: &App, ownerships: &Ownerships) -> TokenStream {
|
||||||
let mut root = vec![];
|
let mut root = vec![];
|
||||||
let mut main = vec![quote!(#![allow(path_statements)])];
|
let mut main = vec![quote!(#![allow(path_statements)])];
|
||||||
|
|
||||||
|
@ -28,7 +27,7 @@ pub fn app(app: &App, ownerships: &Ownerships) -> Tokens {
|
||||||
quote!(#(#root)*)
|
quote!(#(#root)*)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn idle(app: &App, ownerships: &Ownerships, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) {
|
fn idle(app: &App, ownerships: &Ownerships, main: &mut Vec<TokenStream>, root: &mut Vec<TokenStream>) {
|
||||||
let krate = krate();
|
let krate = krate();
|
||||||
|
|
||||||
let mut mod_items = vec![];
|
let mut mod_items = vec![];
|
||||||
|
@ -54,7 +53,7 @@ fn idle(app: &App, ownerships: &Ownerships, main: &mut Vec<Tokens>, root: &mut V
|
||||||
let super_ = if needs_reexport {
|
let super_ = if needs_reexport {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(Ident::from("super"))
|
Some(Ident::new("super", Span::call_site()))
|
||||||
};
|
};
|
||||||
let mut rexprs = vec![];
|
let mut rexprs = vec![];
|
||||||
let mut rfields = vec![];
|
let mut rfields = vec![];
|
||||||
|
@ -70,7 +69,7 @@ fn idle(app: &App, ownerships: &Ownerships, main: &mut Vec<Tokens>, root: &mut V
|
||||||
pub #name: &'static mut #ty,
|
pub #name: &'static mut #ty,
|
||||||
});
|
});
|
||||||
|
|
||||||
let _name = Ident::from(format!("_{}", name.as_ref()));
|
let _name = Ident::new(&name.to_string(), Span::call_site());
|
||||||
rexprs.push(if resource.expr.is_some() {
|
rexprs.push(if resource.expr.is_some() {
|
||||||
quote! {
|
quote! {
|
||||||
#name: &mut #super_::#_name,
|
#name: &mut #super_::#_name,
|
||||||
|
@ -136,7 +135,7 @@ fn idle(app: &App, ownerships: &Ownerships, main: &mut Vec<Tokens>, root: &mut V
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let _name = Ident::from(format!("_{}", name.as_ref()));
|
let _name = Ident::new(&name.to_string(), Span::call_site());
|
||||||
let resource = app.resources
|
let resource = app.resources
|
||||||
.get(name)
|
.get(name)
|
||||||
.expect(&format!("BUG: resource {} has no definition", name));
|
.expect(&format!("BUG: resource {} has no definition", name));
|
||||||
|
@ -224,7 +223,7 @@ fn idle(app: &App, ownerships: &Ownerships, main: &mut Vec<Tokens>, root: &mut V
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn init(app: &App, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) {
|
fn init(app: &App, main: &mut Vec<TokenStream>, root: &mut Vec<TokenStream>) {
|
||||||
let device = &app.device;
|
let device = &app.device;
|
||||||
let krate = krate();
|
let krate = krate();
|
||||||
|
|
||||||
|
@ -263,7 +262,7 @@ fn init(app: &App, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) {
|
||||||
&mut #name
|
&mut #name
|
||||||
},));
|
},));
|
||||||
} else {
|
} else {
|
||||||
let _name = Ident::from(format!("_{}", name.as_ref()));
|
let _name = Ident::new(&name.to_string(), Span::call_site());
|
||||||
lifetime = Some(quote!('a));
|
lifetime = Some(quote!('a));
|
||||||
|
|
||||||
fields.push(quote! {
|
fields.push(quote! {
|
||||||
|
@ -310,7 +309,7 @@ fn init(app: &App, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) {
|
||||||
let mut fields = vec![];
|
let mut fields = vec![];
|
||||||
|
|
||||||
for (name, resource) in late_resources {
|
for (name, resource) in late_resources {
|
||||||
let _name = Ident::from(format!("_{}", name.as_ref()));
|
let _name = Ident::new(&name.to_string(), Span::call_site());
|
||||||
|
|
||||||
let ty = &resource.ty;
|
let ty = &resource.ty;
|
||||||
|
|
||||||
|
@ -415,11 +414,11 @@ fn init(app: &App, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
|
fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<TokenStream>) {
|
||||||
let krate = krate();
|
let krate = krate();
|
||||||
|
|
||||||
for name in ownerships.keys() {
|
for name in ownerships.keys() {
|
||||||
let _name = Ident::from(format!("_{}", name.as_ref()));
|
let _name = Ident::new(&name.to_string(), Span::call_site());
|
||||||
|
|
||||||
// Declare the static that holds the resource
|
// Declare the static that holds the resource
|
||||||
let resource = app.resources
|
let resource = app.resources
|
||||||
|
@ -442,7 +441,7 @@ fn resources(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>, main: &mut Vec<Tokens>) {
|
fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<TokenStream>, main: &mut Vec<TokenStream>) {
|
||||||
let device = &app.device;
|
let device = &app.device;
|
||||||
let krate = krate();
|
let krate = krate();
|
||||||
|
|
||||||
|
@ -456,7 +455,7 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>, main: &mut
|
||||||
if has_resources {
|
if has_resources {
|
||||||
for rname in &task.resources {
|
for rname in &task.resources {
|
||||||
let ceiling = ownerships[rname].ceiling();
|
let ceiling = ownerships[rname].ceiling();
|
||||||
let _rname = Ident::from(format!("_{}", rname.as_ref()));
|
let _rname = Ident::new(&rname.to_string(), Span::call_site());
|
||||||
let resource = app.resources
|
let resource = app.resources
|
||||||
.get(rname)
|
.get(rname)
|
||||||
.expect(&format!("BUG: resource {} has no definition", rname));
|
.expect(&format!("BUG: resource {} has no definition", rname));
|
||||||
|
@ -594,8 +593,8 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>, main: &mut
|
||||||
}
|
}
|
||||||
|
|
||||||
let path = &task.path;
|
let path = &task.path;
|
||||||
let _tname = Ident::from(format!("_{}", tname));
|
let _tname = Ident::new(&tname.to_string(), Span::call_site());
|
||||||
let export_name = LitStr::new(tname.as_ref(), Span::call_site());
|
let export_name = LitStr::new(&tname.to_string(), Span::call_site());
|
||||||
root.push(quote! {
|
root.push(quote! {
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
|
|
Loading…
Reference in a new issue