#![feature(plugin, rustc_private)]
#![plugin(quasi_macros)]
extern crate quasi;
extern crate syntax;
use syntax::codemap;
use syntax::ext::base::ExtCtxt;
use syntax::ext::expand;
use syntax::parse;
use syntax::print::pprust;
fn make_ext_ctxt(sess: &parse::ParseSess) -> ExtCtxt {
let info = codemap::ExpnInfo {
call_site: codemap::DUMMY_SP,
callee: codemap::NameAndSpan {
name: "test".to_string(),
format: codemap::MacroAttribute,
allow_internal_unstable: false,
span: None
}
};
let cfg = Vec::new();
let ecfg = expand::ExpansionConfig::default(String::new());
let mut cx = ExtCtxt::new(&sess, cfg, ecfg);
cx.bt_push(info);
cx
}
fn main() {
let sess = parse::ParseSess::new();
let cx = make_ext_ctxt(&sess);
let x = 1;
let e = quote_expr!(&cx, 1 + $x);
println!("{}", pprust::expr_to_string(&e));
}