// option. This file may not be copied, modified, or distributed
// except according to those terms.
-use ast::{Block, Crate, DeclLocal, ExprMac, PatMac};
+use ast::{Block, Crate, DeclLocal, PatMac};
use ast::{Local, Ident, Mac_, Name};
use ast::{ItemMac, MacStmtWithSemicolon, Mrk, Stmt, StmtDecl, StmtMac};
use ast::{StmtExpr, StmtSemi};
let extname = pth.segments[0].identifier.name;
match fld.cx.syntax_env.find(extname) {
None => {
- fld.cx.span_err(
+ let mut err = fld.cx.struct_span_err(
pth.span,
&format!("macro undefined: '{}!'",
&extname));
- fld.cx.suggest_macro_name(&extname.as_str(), pth.span);
+ fld.cx.suggest_macro_name(&extname.as_str(), pth.span, &mut err);
+ err.emit();
// let compilation continue
None
for attr in attrs {
let mut is_use = attr.check_name("macro_use");
if attr.check_name("macro_escape") {
- fld.cx.span_warn(attr.span, "macro_escape is a deprecated synonym for macro_use");
+ let mut err =
+ fld.cx.struct_span_warn(attr.span,
+ "macro_escape is a deprecated synonym for macro_use");
is_use = true;
if let ast::AttrStyle::Inner = attr.node.style {
- fld.cx.fileline_help(attr.span, "consider an outer attribute, \
- #[macro_use] mod ...");
+ err.fileline_help(attr.span, "consider an outer attribute, \
+ #[macro_use] mod ...").emit();
+ } else {
+ err.emit();
}
};
let mut ret = expander.fold_crate(c);
ret.exported_macros = expander.cx.exported_macros.clone();
- cx.parse_sess.span_diagnostic.handler().abort_if_errors();
+ cx.parse_sess.span_diagnostic.abort_if_errors();
ret
};
return (ret, cx.syntax_env.names);
use ast;
use ast::Name;
use codemap;
+ use ext::base::ExtCtxt;
use ext::mtwt;
use fold::Folder;
use parse;
src,
Vec::new(), &sess);
// should fail:
- expand_crate(&sess,test_ecfg(),vec!(),vec!(), &mut vec![], crate_ast);
+ let mut gated_cfgs = vec![];
+ let ecx = ExtCtxt::new(&sess, vec![], test_ecfg(), &mut gated_cfgs);
+ expand_crate(ecx, vec![], vec![], crate_ast);
}
// make sure that macros can't escape modules
"<test>".to_string(),
src,
Vec::new(), &sess);
- expand_crate(&sess,test_ecfg(),vec!(),vec!(), &mut vec![], crate_ast);
+ let mut gated_cfgs = vec![];
+ let ecx = ExtCtxt::new(&sess, vec![], test_ecfg(), &mut gated_cfgs);
+ expand_crate(ecx, vec![], vec![], crate_ast);
}
// macro_use modules should allow macros to escape
"<test>".to_string(),
src,
Vec::new(), &sess);
- expand_crate(&sess, test_ecfg(), vec!(), vec!(), &mut vec![], crate_ast);
+ let mut gated_cfgs = vec![];
+ let ecx = ExtCtxt::new(&sess, vec![], test_ecfg(), &mut gated_cfgs);
+ expand_crate(ecx, vec![], vec![], crate_ast);
}
fn expand_crate_str(crate_str: String) -> ast::Crate {
let ps = parse::ParseSess::new();
let crate_ast = panictry!(string_to_parser(&ps, crate_str).parse_crate_mod());
// the cfg argument actually does matter, here...
- expand_crate(&ps,test_ecfg(),vec!(),vec!(), &mut vec![], crate_ast).0
+ let mut gated_cfgs = vec![];
+ let ecx = ExtCtxt::new(&ps, vec![], test_ecfg(), &mut gated_cfgs);
+ expand_crate(ecx, vec![], vec![], crate_ast).0
}
// find the pat_ident paths in a crate