aboutsummaryrefslogtreecommitdiff
path: root/macros/src/syntax
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src/syntax')
-rw-r--r--macros/src/syntax/mod.rs6
-rw-r--r--macros/src/syntax/parse.rs16
2 files changed, 13 insertions, 9 deletions
diff --git a/macros/src/syntax/mod.rs b/macros/src/syntax/mod.rs
index 53c17a82..757e05ed 100644
--- a/macros/src/syntax/mod.rs
+++ b/macros/src/syntax/mod.rs
@@ -10,7 +10,7 @@ pub struct App {
pub device: Tokens,
pub idle: Idle,
pub init: Init,
- pub resources: Resources,
+ pub resources: Statics,
pub tasks: Tasks,
}
@@ -21,7 +21,7 @@ pub struct Init {
#[derive(Debug)]
pub struct Idle {
- pub local: Resources,
+ pub local: Statics,
pub path: Tokens,
pub resources: HashSet<Ident>,
}
@@ -46,6 +46,6 @@ pub struct Resource {
pub ty: Tokens,
}
-pub type Resources = HashMap<Ident, Resource>;
+pub type Statics = HashMap<Ident, Resource>;
pub type Tasks = HashMap<Ident, Task>;
diff --git a/macros/src/syntax/parse.rs b/macros/src/syntax/parse.rs
index 9cfbd78b..056e804a 100644
--- a/macros/src/syntax/parse.rs
+++ b/macros/src/syntax/parse.rs
@@ -2,7 +2,7 @@ use std::collections::{HashMap, HashSet};
use syn::{self, DelimToken, Ident, IntTy, Lit, Token, TokenTree};
-use syntax::{App, Idle, Init, Kind, Resource, Resources, Task, Tasks};
+use syntax::{App, Idle, Init, Kind, Resource, Statics, Task, Tasks};
pub fn app(input: &str) -> App {
let tts = syn::parse_token_trees(input).unwrap();
@@ -96,7 +96,7 @@ pub fn app(input: &str) -> App {
block.delim
);
- resources = Some(super::parse::resources(block.tts));
+ resources = Some(super::parse::statics(block.tts));
}
}
"tasks" => {
@@ -169,7 +169,7 @@ pub fn idle(tts: Vec<TokenTree>) -> Idle {
block.delim
);
- local = Some(super::parse::resources(block.tts));
+ local = Some(super::parse::statics(block.tts));
} else {
panic!("expected block, found {:?}", tt);
}
@@ -273,7 +273,7 @@ pub fn init(tts: Vec<TokenTree>) -> Init {
fn idents(tts: Vec<TokenTree>) -> HashSet<Ident> {
let mut idents = HashSet::new();
- let mut tts = tts.into_iter();
+ let mut tts = tts.into_iter().peekable();
while let Some(tt) = tts.next() {
if let TokenTree::Token(Token::Ident(id)) = tt {
assert!(!idents.contains(&id), "ident {} already listed", id);
@@ -281,6 +281,10 @@ fn idents(tts: Vec<TokenTree>) -> HashSet<Ident> {
if let Some(tt) = tts.next() {
assert_eq!(tt, TokenTree::Token(Token::Comma));
+
+ if tts.peek().is_none() {
+ break;
+ }
} else {
break;
}
@@ -292,7 +296,7 @@ fn idents(tts: Vec<TokenTree>) -> HashSet<Ident> {
idents
}
-pub fn resources(tts: Vec<TokenTree>) -> Resources {
+pub fn statics(tts: Vec<TokenTree>) -> Statics {
let mut resources = HashMap::new();
let mut tts = tts.into_iter();
@@ -502,7 +506,7 @@ fn task(tts: Vec<TokenTree>) -> Task {
);
}
- let resources = resources.expect("resources field is missing");
+ let resources = resources.unwrap_or(HashSet::new());
let priority = priority.expect("priority field is missing");
let kind = if let Some(enabled) = enabled {
Kind::Interrupt { enabled }