diff options
Diffstat (limited to 'macros/src')
-rw-r--r-- | macros/src/lib.rs | 50 | ||||
-rw-r--r-- | macros/src/trans.rs | 2 |
2 files changed, 7 insertions, 45 deletions
diff --git a/macros/src/lib.rs b/macros/src/lib.rs index a5fdf96d..10839eeb 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -1,64 +1,26 @@ #![deny(warnings)] -#![feature(plugin_registrar)] -#![feature(proc_macro_internals)] -#![feature(rustc_private)] +#![feature(proc_macro)] #![recursion_limit = "128"] extern crate proc_macro; #[macro_use] extern crate quote; -extern crate rustc_errors; -extern crate rustc_plugin; extern crate syn; -extern crate syntax as rustc_syntax; - -use proc_macro::TokenStream; -use rustc_errors::Handler; -use rustc_errors::emitter::ColorConfig; -use rustc_plugin::Registry; -use rustc_syntax::codemap::{CodeMap, FilePathMapping}; -use rustc_syntax::ext::base::SyntaxExtension; -use rustc_syntax::parse::ParseSess; -use rustc_syntax::symbol::Symbol; -use rustc_syntax::tokenstream::TokenStream as TokenStream_; -use std::rc::Rc; -use std::str::FromStr; mod check; mod syntax; mod trans; mod util; -fn expand_rtfm(ts: TokenStream_) -> TokenStream_ { +use proc_macro::TokenStream; + +#[proc_macro] +pub fn rtfm(ts: TokenStream) -> TokenStream { let input = format!("{}", ts); let app = syntax::parse::app(&input); let ceilings = util::compute_ceilings(&app); check::resources(&app.resources, &ceilings); - let output = format!("{}", trans::app(&app, &ceilings)); - - let mapping = FilePathMapping::empty(); - let codemap = Rc::new(CodeMap::new(mapping)); - - let tty_handler = Handler::with_tty_emitter( - ColorConfig::Auto, - true, - false, - Some(codemap.clone()), - ); - - let sess = ParseSess::with_span_handler(tty_handler, codemap.clone()); - proc_macro::__internal::set_parse_sess(&sess, || { - let ts = TokenStream::from_str(&output).unwrap(); - proc_macro::__internal::token_stream_inner(ts) - }) -} - -#[plugin_registrar] -pub fn plugin_registrar(reg: &mut Registry) { - reg.register_syntax_extension( - Symbol::intern("rtfm"), - SyntaxExtension::ProcMacro(Box::new(expand_rtfm)), - ); + format!("{}", trans::app(&app, &ceilings)).parse().unwrap() } diff --git a/macros/src/trans.rs b/macros/src/trans.rs index 790ffb8e..13dc51d1 100644 --- a/macros/src/trans.rs +++ b/macros/src/trans.rs @@ -100,7 +100,7 @@ fn init(app: &App, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) { exceptions.push(quote! { let prio_bits = #device::NVIC_PRIO_BITS; let hw = ((1 << prio_bits) - #priority) << (8 - prio_bits); - scb.shpr[rtfm::Exception::#name.nr() - 4].write(hw); + scb.shpr[#krate::Exception::#name.nr() - 4].write(hw); }); } Kind::Interrupt { enabled } => { |