Skip to content

Commit 09e41b6

Browse files
committed
Add macros from plugins in libsyntax_ext::register_builtins.
1 parent 2df25ad commit 09e41b6

File tree

4 files changed

+21
-23
lines changed

4 files changed

+21
-23
lines changed

src/librustc_driver/driver.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ pub fn phase_2_configure_and_expand<'a, F>(sess: &Session,
649649
let resolver_arenas = Resolver::arenas();
650650
let mut resolver =
651651
Resolver::new(sess, &krate, make_glob_map, &mut crate_loader, &resolver_arenas);
652-
syntax_ext::register_builtins(&mut resolver, sess.features.borrow().quote);
652+
syntax_ext::register_builtins(&mut resolver, syntax_exts, sess.features.borrow().quote);
653653

654654
krate = time(time_passes, "expansion", || {
655655
// 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,
686686
..syntax::ext::expand::ExpansionConfig::default(crate_name.to_string())
687687
};
688688
let mut ecx = ExtCtxt::new(&sess.parse_sess, krate.config.clone(), cfg, &mut resolver);
689-
let ret = syntax::ext::expand::expand_crate(&mut ecx, syntax_exts, krate);
689+
let ret = syntax::ext::expand::expand_crate(&mut ecx, krate);
690690
if cfg!(windows) {
691691
env::set_var("PATH", &old_path);
692692
}

src/libsyntax/ext/base.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -738,14 +738,9 @@ impl<'a> ExtCtxt<'a> {
738738
token::intern(st)
739739
}
740740

741-
pub fn initialize(&mut self, user_exts: Vec<NamedSyntaxExtension>, krate: &ast::Crate) {
741+
pub fn initialize(&mut self, krate: &ast::Crate) {
742742
self.crate_root = std_inject::injected_crate_name(krate);
743743

744-
for (name, extension) in user_exts {
745-
let ident = ast::Ident::with_empty_ctxt(name);
746-
self.resolver.add_ext(ident, Rc::new(extension));
747-
}
748-
749744
let mut module = ModuleData {
750745
mod_path: vec![token::str_to_ident(&self.ecfg.crate_name)],
751746
directory: PathBuf::from(self.parse_sess.codemap().span_to_filename(krate.span)),

src/libsyntax/ext/expand.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -866,19 +866,15 @@ impl<'feat> ExpansionConfig<'feat> {
866866
}
867867
}
868868

869-
pub fn expand_crate(cx: &mut ExtCtxt,
870-
user_exts: Vec<NamedSyntaxExtension>,
871-
c: Crate) -> Crate {
872-
cx.initialize(user_exts, &c);
869+
pub fn expand_crate(cx: &mut ExtCtxt, c: Crate) -> Crate {
870+
cx.initialize(&c);
873871
cx.monotonic_expander().expand_crate(c)
874872
}
875873

876874
// Expands crate using supplied MacroExpander - allows for
877875
// non-standard expansion behaviour (e.g. step-wise).
878-
pub fn expand_crate_with_expander(expander: &mut MacroExpander,
879-
user_exts: Vec<NamedSyntaxExtension>,
880-
c: Crate) -> Crate {
881-
expander.cx.initialize(user_exts, &c);
876+
pub fn expand_crate_with_expander(expander: &mut MacroExpander, c: Crate) -> Crate {
877+
expander.cx.initialize(&c);
882878
expander.expand_crate(c)
883879
}
884880

src/libsyntax_ext/lib.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,23 @@ pub mod deriving;
5050

5151
use std::rc::Rc;
5252
use syntax::ast;
53-
use syntax::ext::base::{MacroExpanderFn, NormalTT, IdentTT, MultiModifier};
53+
use syntax::ext::base::{MacroExpanderFn, NormalTT, IdentTT, MultiModifier, NamedSyntaxExtension};
5454
use syntax::ext::tt::macro_rules::MacroRulesExpander;
5555
use syntax::parse::token::intern;
5656

57-
pub fn register_builtins(resolver: &mut syntax::ext::base::Resolver, enable_quotes: bool) {
57+
pub fn register_builtins(resolver: &mut syntax::ext::base::Resolver,
58+
user_exts: Vec<NamedSyntaxExtension>,
59+
enable_quotes: bool) {
5860
let mut register = |name, ext| {
59-
resolver.add_ext(ast::Ident::with_empty_ctxt(intern(name)), Rc::new(ext));
61+
resolver.add_ext(ast::Ident::with_empty_ctxt(name), Rc::new(ext));
6062
};
6163

62-
register("macro_rules", IdentTT(Box::new(MacroRulesExpander), None, false));
64+
register(intern("macro_rules"), IdentTT(Box::new(MacroRulesExpander), None, false));
6365

6466
macro_rules! register {
6567
($( $name:ident: $f:expr, )*) => { $(
66-
register(stringify!($name), NormalTT(Box::new($f as MacroExpanderFn), None, false));
68+
register(intern(stringify!($name)),
69+
NormalTT(Box::new($f as MacroExpanderFn), None, false));
6770
)* }
6871
}
6972

@@ -108,7 +111,11 @@ pub fn register_builtins(resolver: &mut syntax::ext::base::Resolver, enable_quot
108111
}
109112

110113
// format_args uses `unstable` things internally.
111-
register("format_args", NormalTT(Box::new(format::expand_format_args), None, true));
114+
register(intern("format_args"), NormalTT(Box::new(format::expand_format_args), None, true));
112115

113-
register("derive", MultiModifier(Box::new(deriving::expand_derive)));
116+
register(intern("derive"), MultiModifier(Box::new(deriving::expand_derive)));
117+
118+
for (name, ext) in user_exts {
119+
register(name, ext);
120+
}
114121
}

0 commit comments

Comments
 (0)