Move #[macro_reexport] to extern crate
This commit is contained in:
parent
60be2f52d2
commit
0816255c80
13 changed files with 53 additions and 71 deletions
|
|
@ -16,6 +16,7 @@ use codemap;
|
|||
use codemap::{CodeMap, Span, ExpnId, ExpnInfo, NO_EXPANSION};
|
||||
use ext;
|
||||
use ext::expand;
|
||||
use ext::tt::macro_rules;
|
||||
use parse;
|
||||
use parse::parser;
|
||||
use parse::token;
|
||||
|
|
@ -568,6 +569,15 @@ impl<'a> ExtCtxt<'a> {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn insert_macro(&mut self, def: ast::MacroDef) {
|
||||
if def.export {
|
||||
self.exported_macros.push(def.clone());
|
||||
}
|
||||
let ext = macro_rules::compile(self, &def);
|
||||
self.syntax_env.insert(def.ident.name, ext);
|
||||
}
|
||||
|
||||
/// Emit `msg` attached to `sp`, and stop compilation immediately.
|
||||
///
|
||||
/// `span_err` should be strongly preferred where-ever possible:
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ use ast;
|
|||
use ast_util::path_to_ident;
|
||||
use ext::mtwt;
|
||||
use ext::build::AstBuilder;
|
||||
use ext::tt::macro_rules;
|
||||
use attr;
|
||||
use attr::AttrMetaMethods;
|
||||
use codemap;
|
||||
|
|
@ -636,14 +635,10 @@ pub fn expand_item_mac(it: P<ast::Item>,
|
|||
id: ast::DUMMY_NODE_ID,
|
||||
span: it.span,
|
||||
imported_from: None,
|
||||
export: attr::contains_name(it.attrs.as_slice(), "macro_export"),
|
||||
body: tts,
|
||||
};
|
||||
let ext = macro_rules::compile(fld.cx, &def);
|
||||
fld.cx.syntax_env.insert(def.ident.name, ext);
|
||||
|
||||
if attr::contains_name(def.attrs.as_slice(), "macro_export") {
|
||||
fld.cx.exported_macros.push(def);
|
||||
}
|
||||
fld.cx.insert_macro(def);
|
||||
|
||||
// macro_rules! has a side effect but expands to nothing.
|
||||
fld.cx.bt_pop();
|
||||
|
|
@ -1178,7 +1173,6 @@ pub struct ExpansionConfig {
|
|||
pub deriving_hash_type_parameter: bool,
|
||||
pub enable_quotes: bool,
|
||||
pub recursion_limit: uint,
|
||||
pub reexported_macros: Vec<String>,
|
||||
}
|
||||
|
||||
impl ExpansionConfig {
|
||||
|
|
@ -1188,7 +1182,6 @@ impl ExpansionConfig {
|
|||
deriving_hash_type_parameter: false,
|
||||
enable_quotes: false,
|
||||
recursion_limit: 64,
|
||||
reexported_macros: vec![],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1202,15 +1195,8 @@ pub fn expand_crate(parse_sess: &parse::ParseSess,
|
|||
let mut cx = ExtCtxt::new(parse_sess, c.config.clone(), cfg);
|
||||
let mut expander = MacroExpander::new(&mut cx);
|
||||
|
||||
for def in imported_macros.iter() {
|
||||
let ext = macro_rules::compile(expander.cx, def);
|
||||
expander.cx.syntax_env.insert(def.ident.name, ext);
|
||||
|
||||
if expander.cx.ecfg.reexported_macros.iter()
|
||||
.any(|e| e[] == token::get_ident(def.ident).get()) {
|
||||
|
||||
expander.cx.exported_macros.push(def.clone());
|
||||
}
|
||||
for def in imported_macros.into_iter() {
|
||||
expander.cx.insert_macro(def);
|
||||
}
|
||||
|
||||
for (name, extension) in user_exts.into_iter() {
|
||||
|
|
|
|||
|
|
@ -1,41 +0,0 @@
|
|||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
//! Defines the crate attribute syntax for macro re-export.
|
||||
|
||||
use ast;
|
||||
use attr::AttrMetaMethods;
|
||||
use diagnostic::SpanHandler;
|
||||
|
||||
/// Return a vector of the names of all macros re-exported from the crate.
|
||||
pub fn gather(diag: &SpanHandler, krate: &ast::Crate) -> Vec<String> {
|
||||
let usage = "malformed macro_reexport attribute, expected \
|
||||
#![macro_reexport(ident, ident, ...)]";
|
||||
|
||||
let mut reexported: Vec<String> = vec!();
|
||||
for attr in krate.attrs.iter() {
|
||||
if !attr.check_name("macro_reexport") {
|
||||
continue;
|
||||
}
|
||||
|
||||
match attr.meta_item_list() {
|
||||
None => diag.span_err(attr.span, usage),
|
||||
Some(list) => for mi in list.iter() {
|
||||
match mi.node {
|
||||
ast::MetaWord(ref word)
|
||||
=> reexported.push(word.to_string()),
|
||||
_ => diag.span_err(mi.span, usage),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
reexported
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue