rustc: Add a next_ann method to ext_ctxt

After this we can remove the parser from the syntax extensions, at least for
now.
This commit is contained in:
Brian Anderson 2011-06-04 17:31:44 -04:00
parent 3ca5fff195
commit 1d6f1dc58d
2 changed files with 13 additions and 4 deletions

View file

@ -2,6 +2,7 @@ import std::option;
import std::map::hashmap;
import driver::session::session;
import front::parser::parser;
import util::common::span;
import util::common::new_str_hash;
@ -24,13 +25,17 @@ fn syntax_expander_table() -> hashmap[str, syntax_extension] {
}
type span_msg_fn = fn (span sp, str msg) -> !;
type next_ann_fn = fn () -> ast::ann;
// Provides a limited set of services necessary for syntax extensions
// to do their thing
type ext_ctxt = rec(span_msg_fn span_err,
span_msg_fn span_unimpl);
span_msg_fn span_unimpl,
next_ann_fn next_ann);
fn mk_ctxt(parser parser) -> ext_ctxt {
auto sess = parser.get_session();
fn mk_ctxt(session sess) -> ext_ctxt {
fn ext_span_err_(session sess, span sp, str msg) -> ! {
sess.span_err(sp, msg);
}
@ -41,8 +46,12 @@ fn mk_ctxt(session sess) -> ext_ctxt {
}
auto ext_span_unimpl = bind ext_span_unimpl_(sess, _, _);
fn ext_next_ann_(parser parser) -> ast::ann { parser.get_ann() }
auto ext_next_ann = bind ext_next_ann_(parser);
ret rec(span_err = ext_span_err,
span_unimpl = ext_span_unimpl);
span_unimpl = ext_span_unimpl,
next_ann = ext_next_ann);
}
//

View file

@ -1048,7 +1048,7 @@ fn expand_syntax_ext(&parser p, common::span sp,
p.err("unknown syntax expander: '" + extname + "'");
}
case (some(ext::x(?ext))) {
auto ext_cx = ext::mk_ctxt(p.get_session());
auto ext_cx = ext::mk_ctxt(p);
ret ast::expr_ext(path, args, body,
ext(ext_cx, p, sp, args, body),
p.get_ann());