]> git.proxmox.com Git - rustc.git/blame - src/test/ui-fulldeps/auxiliary/plugin-args.rs
New upstream version 1.40.0+dfsg1
[rustc.git] / src / test / ui-fulldeps / auxiliary / plugin-args.rs
CommitLineData
1a4d82fc
JJ
1// force-host
2
3#![feature(plugin_registrar)]
c34b1796 4#![feature(box_syntax, rustc_private)]
1a4d82fc
JJ
5
6extern crate syntax;
e74abb32 7extern crate syntax_expand;
3157f602 8extern crate syntax_pos;
1a4d82fc 9extern crate rustc;
416331ca 10extern crate rustc_driver;
1a4d82fc
JJ
11
12use std::borrow::ToOwned;
13use syntax::ast;
e74abb32
XL
14use syntax_expand::base::{SyntaxExtension, SyntaxExtensionKind};
15use syntax_expand::base::{TTMacroExpander, ExtCtxt, MacResult, MacEager};
1a4d82fc 16use syntax::print::pprust;
476ff2be 17use syntax::symbol::Symbol;
3157f602 18use syntax_pos::Span;
8bb4bdeb 19use syntax::tokenstream::TokenStream;
e1599b0c 20use rustc_driver::plugin::Registry;
1a4d82fc
JJ
21
22struct Expander {
9e0c209e 23 args: Vec<ast::NestedMetaItem>,
1a4d82fc
JJ
24}
25
26impl TTMacroExpander for Expander {
27 fn expand<'cx>(&self,
28 ecx: &'cx mut ExtCtxt,
29 sp: Span,
416331ca 30 _: TokenStream) -> Box<dyn MacResult+'cx> {
9e0c209e 31 let args = self.args.iter().map(|i| pprust::meta_list_item_to_string(i))
c1a9b12d 32 .collect::<Vec<_>>().join(", ");
476ff2be 33 MacEager::expr(ecx.expr_str(sp, Symbol::intern(&args)))
1a4d82fc
JJ
34 }
35}
36
37#[plugin_registrar]
38pub fn plugin_registrar(reg: &mut Registry) {
a7813a04 39 let args = reg.args().to_owned();
dc9dc135
XL
40 reg.register_syntax_extension(Symbol::intern("plugin_args"), SyntaxExtension::default(
41 SyntaxExtensionKind::LegacyBang(Box::new(Expander { args })), reg.sess.edition()
42 ));
1a4d82fc 43}