Add macros from plugins in libsyntax_ext::register_builtins
.
This commit is contained in:
parent
2df25adbed
commit
09e41b6784
@ -649,7 +649,7 @@ pub fn phase_2_configure_and_expand<'a, F>(sess: &Session,
|
||||
let resolver_arenas = Resolver::arenas();
|
||||
let mut resolver =
|
||||
Resolver::new(sess, &krate, make_glob_map, &mut crate_loader, &resolver_arenas);
|
||||
syntax_ext::register_builtins(&mut resolver, sess.features.borrow().quote);
|
||||
syntax_ext::register_builtins(&mut resolver, syntax_exts, sess.features.borrow().quote);
|
||||
|
||||
krate = time(time_passes, "expansion", || {
|
||||
// Windows dlls do not have rpaths, so they don't know how to find their
|
||||
@ -686,7 +686,7 @@ pub fn phase_2_configure_and_expand<'a, F>(sess: &Session,
|
||||
..syntax::ext::expand::ExpansionConfig::default(crate_name.to_string())
|
||||
};
|
||||
let mut ecx = ExtCtxt::new(&sess.parse_sess, krate.config.clone(), cfg, &mut resolver);
|
||||
let ret = syntax::ext::expand::expand_crate(&mut ecx, syntax_exts, krate);
|
||||
let ret = syntax::ext::expand::expand_crate(&mut ecx, krate);
|
||||
if cfg!(windows) {
|
||||
env::set_var("PATH", &old_path);
|
||||
}
|
||||
|
@ -738,14 +738,9 @@ impl<'a> ExtCtxt<'a> {
|
||||
token::intern(st)
|
||||
}
|
||||
|
||||
pub fn initialize(&mut self, user_exts: Vec<NamedSyntaxExtension>, krate: &ast::Crate) {
|
||||
pub fn initialize(&mut self, krate: &ast::Crate) {
|
||||
self.crate_root = std_inject::injected_crate_name(krate);
|
||||
|
||||
for (name, extension) in user_exts {
|
||||
let ident = ast::Ident::with_empty_ctxt(name);
|
||||
self.resolver.add_ext(ident, Rc::new(extension));
|
||||
}
|
||||
|
||||
let mut module = ModuleData {
|
||||
mod_path: vec![token::str_to_ident(&self.ecfg.crate_name)],
|
||||
directory: PathBuf::from(self.parse_sess.codemap().span_to_filename(krate.span)),
|
||||
|
@ -866,19 +866,15 @@ impl<'feat> ExpansionConfig<'feat> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn expand_crate(cx: &mut ExtCtxt,
|
||||
user_exts: Vec<NamedSyntaxExtension>,
|
||||
c: Crate) -> Crate {
|
||||
cx.initialize(user_exts, &c);
|
||||
pub fn expand_crate(cx: &mut ExtCtxt, c: Crate) -> Crate {
|
||||
cx.initialize(&c);
|
||||
cx.monotonic_expander().expand_crate(c)
|
||||
}
|
||||
|
||||
// Expands crate using supplied MacroExpander - allows for
|
||||
// non-standard expansion behaviour (e.g. step-wise).
|
||||
pub fn expand_crate_with_expander(expander: &mut MacroExpander,
|
||||
user_exts: Vec<NamedSyntaxExtension>,
|
||||
c: Crate) -> Crate {
|
||||
expander.cx.initialize(user_exts, &c);
|
||||
pub fn expand_crate_with_expander(expander: &mut MacroExpander, c: Crate) -> Crate {
|
||||
expander.cx.initialize(&c);
|
||||
expander.expand_crate(c)
|
||||
}
|
||||
|
||||
|
@ -50,20 +50,23 @@ pub mod deriving;
|
||||
|
||||
use std::rc::Rc;
|
||||
use syntax::ast;
|
||||
use syntax::ext::base::{MacroExpanderFn, NormalTT, IdentTT, MultiModifier};
|
||||
use syntax::ext::base::{MacroExpanderFn, NormalTT, IdentTT, MultiModifier, NamedSyntaxExtension};
|
||||
use syntax::ext::tt::macro_rules::MacroRulesExpander;
|
||||
use syntax::parse::token::intern;
|
||||
|
||||
pub fn register_builtins(resolver: &mut syntax::ext::base::Resolver, enable_quotes: bool) {
|
||||
pub fn register_builtins(resolver: &mut syntax::ext::base::Resolver,
|
||||
user_exts: Vec<NamedSyntaxExtension>,
|
||||
enable_quotes: bool) {
|
||||
let mut register = |name, ext| {
|
||||
resolver.add_ext(ast::Ident::with_empty_ctxt(intern(name)), Rc::new(ext));
|
||||
resolver.add_ext(ast::Ident::with_empty_ctxt(name), Rc::new(ext));
|
||||
};
|
||||
|
||||
register("macro_rules", IdentTT(Box::new(MacroRulesExpander), None, false));
|
||||
register(intern("macro_rules"), IdentTT(Box::new(MacroRulesExpander), None, false));
|
||||
|
||||
macro_rules! register {
|
||||
($( $name:ident: $f:expr, )*) => { $(
|
||||
register(stringify!($name), NormalTT(Box::new($f as MacroExpanderFn), None, false));
|
||||
register(intern(stringify!($name)),
|
||||
NormalTT(Box::new($f as MacroExpanderFn), None, false));
|
||||
)* }
|
||||
}
|
||||
|
||||
@ -108,7 +111,11 @@ pub fn register_builtins(resolver: &mut syntax::ext::base::Resolver, enable_quot
|
||||
}
|
||||
|
||||
// format_args uses `unstable` things internally.
|
||||
register("format_args", NormalTT(Box::new(format::expand_format_args), None, true));
|
||||
register(intern("format_args"), NormalTT(Box::new(format::expand_format_args), None, true));
|
||||
|
||||
register("derive", MultiModifier(Box::new(deriving::expand_derive)));
|
||||
register(intern("derive"), MultiModifier(Box::new(deriving::expand_derive)));
|
||||
|
||||
for (name, ext) in user_exts {
|
||||
register(name, ext);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user