aboutsummaryrefslogtreecommitdiff
path: root/macros/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src/lib.rs')
-rw-r--r--macros/src/lib.rs50
1 files changed, 6 insertions, 44 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()
}