1
Fork 0

Refactored ast_map and friends, mainly to have Paths without storing them.

This commit is contained in:
Eduard Burtescu 2014-02-14 07:07:09 +02:00
parent 22c34f3c4c
commit a02b10a062
92 changed files with 1987 additions and 2573 deletions

View file

@ -54,8 +54,8 @@ pub fn expand_expr(e: @ast::Expr, fld: &mut MacroExpander) -> @ast::Expr {
// let compilation continue
return e;
}
let extname = &pth.segments[0].identifier;
let extnamestr = token::get_ident(extname.name);
let extname = pth.segments[0].identifier;
let extnamestr = token::get_ident(extname);
// leaving explicit deref here to highlight unbox op:
let marked_after = match fld.extsbox.find(&extname.name) {
None => {
@ -297,26 +297,25 @@ pub fn expand_item_mac(it: @ast::Item, fld: &mut MacroExpander)
_ => fld.cx.span_bug(it.span, "invalid item macro invocation")
};
let extname = &pth.segments[0].identifier;
let extnamestr = token::get_ident(extname.name);
let extname = pth.segments[0].identifier;
let extnamestr = token::get_ident(extname);
let fm = fresh_mark();
let expanded = match fld.extsbox.find(&extname.name) {
None => {
fld.cx.span_err(pth.span,
format!("macro undefined: '{}!'",
extnamestr.get()));
extnamestr));
// let compilation continue
return SmallVector::zero();
}
Some(&NormalTT(ref expander, span)) => {
if it.ident.name != parse::token::special_idents::invalid.name {
let string = token::get_ident(it.ident.name);
fld.cx.span_err(pth.span,
format!("macro {}! expects no ident argument, \
given '{}'",
extnamestr.get(),
string.get()));
extnamestr,
token::get_ident(it.ident)));
return SmallVector::zero();
}
fld.cx.bt_push(ExpnInfo {
@ -418,13 +417,10 @@ fn load_extern_macros(krate: &ast::ViewItem, fld: &mut MacroExpander) {
let MacroCrate { lib, cnum } = fld.cx.loader.load_crate(krate);
let crate_name = match krate.node {
ast::ViewItemExternMod(ref name, _, _) => {
let string = token::get_ident(name.name);
string.get().to_str()
},
_ => unreachable!(),
ast::ViewItemExternMod(name, _, _) => name,
_ => unreachable!()
};
let name = format!("<{} macros>", crate_name);
let name = format!("<{} macros>", token::get_ident(crate_name));
let exported_macros = fld.cx.loader.get_exported_macros(cnum);
for source in exported_macros.iter() {
@ -496,12 +492,11 @@ pub fn expand_stmt(s: &Stmt, fld: &mut MacroExpander) -> SmallVector<@Stmt> {
fld.cx.span_err(pth.span, "expected macro name without module separators");
return SmallVector::zero();
}
let extname = &pth.segments[0].identifier;
let extnamestr = token::get_ident(extname.name);
let extname = pth.segments[0].identifier;
let extnamestr = token::get_ident(extname);
let marked_after = match fld.extsbox.find(&extname.name) {
None => {
fld.cx.span_err(pth.span, format!("macro undefined: '{}'",
extnamestr.get()));
fld.cx.span_err(pth.span, format!("macro undefined: '{}'", extnamestr));
return SmallVector::zero();
}
@ -535,7 +530,7 @@ pub fn expand_stmt(s: &Stmt, fld: &mut MacroExpander) -> SmallVector<@Stmt> {
_ => {
fld.cx.span_err(pth.span,
format!("non-stmt macro in stmt pos: {}",
extnamestr.get()));
extnamestr));
return SmallVector::zero();
}
};
@ -545,7 +540,7 @@ pub fn expand_stmt(s: &Stmt, fld: &mut MacroExpander) -> SmallVector<@Stmt> {
_ => {
fld.cx.span_err(pth.span, format!("'{}' is not a tt-style macro",
extnamestr.get()));
extnamestr));
return SmallVector::zero();
}
};
@ -1186,9 +1181,7 @@ mod test {
println!("uh oh, matches but shouldn't:");
println!("varref: {:?}",varref);
// good lord, you can't make a path with 0 segments, can you?
let string = token::get_ident(varref.segments[0]
.identifier
.name);
let string = token::get_ident(varref.segments[0].identifier);
println!("varref's first segment's uint: {}, and string: \"{}\"",
varref.segments[0].identifier.name,
string.get());
@ -1213,10 +1206,7 @@ foo_module!()
let bindings = name_finder.ident_accumulator;
let cxbinds: ~[&ast::Ident] =
bindings.iter().filter(|b| {
let string = token::get_ident(b.name);
"xx" == string.get()
}).collect();
bindings.iter().filter(|b| "xx" == token::get_ident(**b).get()).collect();
let cxbind = match cxbinds {
[b] => b,
_ => fail!("expected just one binding for ext_cx")
@ -1228,12 +1218,9 @@ foo_module!()
let varrefs = path_finder.path_accumulator;
// the xx binding should bind all of the xx varrefs:
for (idx,v) in varrefs.iter().filter(|p|{
for (idx,v) in varrefs.iter().filter(|p| {
p.segments.len() == 1
&& {
let string = token::get_ident(p.segments[0].identifier.name);
"xx" == string.get()
}
&& "xx" == token::get_ident(p.segments[0].identifier).get()
}).enumerate() {
if mtwt_resolve(v.segments[0].identifier) != resolved_binding {
println!("uh oh, xx binding didn't match xx varref:");