mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-11-30 15:34:33 +01:00
reject duplicate arguments in #[interrupt] and #[exception]
This program was being accepted: ``` rust #[task( capacity = 1, capacity = 2, priority = 1, priority = 2, )] fn foo() {} ``` now it will trigger a compiler error
This commit is contained in:
parent
6b61cd2e3f
commit
73529ea650
3 changed files with 62 additions and 0 deletions
|
@ -937,6 +937,13 @@ fn parse_args(input: ParseStream<'_>, accept_capacity: bool) -> parse::Result<Ta
|
|||
let ident_s = ident.to_string();
|
||||
match &*ident_s {
|
||||
"capacity" if accept_capacity => {
|
||||
if capacity.is_some() {
|
||||
return Err(parse::Error::new(
|
||||
ident.span(),
|
||||
"argument appears more than once",
|
||||
));
|
||||
}
|
||||
|
||||
// #lit
|
||||
let lit: LitInt = content.parse()?;
|
||||
|
||||
|
@ -958,6 +965,13 @@ fn parse_args(input: ParseStream<'_>, accept_capacity: bool) -> parse::Result<Ta
|
|||
capacity = Some(value as u8);
|
||||
}
|
||||
"priority" => {
|
||||
if priority.is_some() {
|
||||
return Err(parse::Error::new(
|
||||
ident.span(),
|
||||
"argument appears more than once",
|
||||
));
|
||||
}
|
||||
|
||||
// #lit
|
||||
let lit: LitInt = content.parse()?;
|
||||
|
||||
|
|
24
tests/cfail/duplicate-args-2.rs
Normal file
24
tests/cfail/duplicate-args-2.rs
Normal file
|
@ -0,0 +1,24 @@
|
|||
#![no_main]
|
||||
#![no_std]
|
||||
|
||||
extern crate lm3s6965;
|
||||
extern crate panic_halt;
|
||||
extern crate rtfm;
|
||||
|
||||
use rtfm::app;
|
||||
|
||||
#[app(device = lm3s6965)]
|
||||
const APP: () = {
|
||||
#[init]
|
||||
fn init() {}
|
||||
|
||||
#[task(
|
||||
priority = 1,
|
||||
priority = 2, //~ ERROR argument appears more than once
|
||||
)]
|
||||
fn foo() {}
|
||||
|
||||
extern "C" {
|
||||
fn UART0();
|
||||
}
|
||||
};
|
24
tests/cfail/duplicate-args.rs
Normal file
24
tests/cfail/duplicate-args.rs
Normal file
|
@ -0,0 +1,24 @@
|
|||
#![no_main]
|
||||
#![no_std]
|
||||
|
||||
extern crate lm3s6965;
|
||||
extern crate panic_halt;
|
||||
extern crate rtfm;
|
||||
|
||||
use rtfm::app;
|
||||
|
||||
#[app(device = lm3s6965)]
|
||||
const APP: () = {
|
||||
#[init]
|
||||
fn init() {}
|
||||
|
||||
#[task(
|
||||
capacity = 1,
|
||||
capacity = 2, //~ ERROR argument appears more than once
|
||||
)]
|
||||
fn foo() {}
|
||||
|
||||
extern "C" {
|
||||
fn UART0();
|
||||
}
|
||||
};
|
Loading…
Reference in a new issue