rust: Remove extensions' dependency on the session

This commit is contained in:
Brian Anderson 2012-03-27 14:03:57 -07:00
parent 2142c5ebbb
commit ba3292d3be
3 changed files with 10 additions and 12 deletions

View file

@ -121,7 +121,8 @@ fn compile_upto(sess: session, cfg: ast::crate_cfg,
bind front::test::modify_for_testing(sess, crate)); bind front::test::modify_for_testing(sess, crate));
crate = crate =
time(time_passes, "expansion", time(time_passes, "expansion",
bind syntax::ext::expand::expand_crate(sess, crate)); bind syntax::ext::expand::expand_crate(
sess.parse_sess, sess.opts.cfg, crate));
if upto == cu_expand { ret {crate: crate, tcx: none}; } if upto == cu_expand { ret {crate: crate, tcx: none}; }

View file

@ -45,7 +45,6 @@ fn syntax_expander_table() -> hashmap<str, syntax_extension> {
} }
iface ext_ctxt { iface ext_ctxt {
fn session() -> driver::session::session;
fn codemap() -> codemap; fn codemap() -> codemap;
fn parse_sess() -> parser::parse_sess; fn parse_sess() -> parser::parse_sess;
fn cfg() -> ast::crate_cfg; fn cfg() -> ast::crate_cfg;
@ -61,15 +60,12 @@ iface ext_ctxt {
fn next_id() -> ast::node_id; fn next_id() -> ast::node_id;
} }
fn mk_ctxt(session: driver::session::session, fn mk_ctxt(parse_sess: parser::parse_sess,
parse_sess: parser::parse_sess,
cfg: ast::crate_cfg) -> ext_ctxt { cfg: ast::crate_cfg) -> ext_ctxt {
type ctxt_repr = {session: driver::session::session, type ctxt_repr = {parse_sess: parser::parse_sess,
parse_sess: parser::parse_sess,
cfg: ast::crate_cfg, cfg: ast::crate_cfg,
mut backtrace: expn_info}; mut backtrace: expn_info};
impl of ext_ctxt for ctxt_repr { impl of ext_ctxt for ctxt_repr {
fn session() -> driver::session::session { self.session }
fn codemap() -> codemap { self.parse_sess.cm } fn codemap() -> codemap { self.parse_sess.cm }
fn parse_sess() -> parser::parse_sess { self.parse_sess } fn parse_sess() -> parser::parse_sess { self.parse_sess }
fn cfg() -> ast::crate_cfg { self.cfg } fn cfg() -> ast::crate_cfg { self.cfg }
@ -119,7 +115,6 @@ fn mk_ctxt(session: driver::session::session,
} }
} }
let imp : ctxt_repr = { let imp : ctxt_repr = {
session: session,
parse_sess: parse_sess, parse_sess: parse_sess,
cfg: cfg, cfg: cfg,
mut backtrace: none mut backtrace: none

View file

@ -9,6 +9,7 @@ import syntax::ast::{crate, expr_, expr_mac, mac_invoc};
import syntax::fold::*; import syntax::fold::*;
import syntax::ext::base::*; import syntax::ext::base::*;
import syntax::ext::qquote::{qq_helper}; import syntax::ext::qquote::{qq_helper};
import syntax::parse::parser;
import syntax::parse::parser::parse_expr_from_source_str; import syntax::parse::parser::parse_expr_from_source_str;
@ -119,10 +120,11 @@ fn core_macros() -> str {
}"; }";
} }
fn expand_crate(sess: session::session, c: @crate) -> @crate { fn expand_crate(parse_sess: parser::parse_sess,
cfg: ast::crate_cfg, c: @crate) -> @crate {
let exts = syntax_expander_table(); let exts = syntax_expander_table();
let afp = default_ast_fold(); let afp = default_ast_fold();
let cx: ext_ctxt = mk_ctxt(sess, sess.parse_sess, sess.opts.cfg); let cx: ext_ctxt = mk_ctxt(parse_sess, cfg);
let f_pre = let f_pre =
{fold_expr: bind expand_expr(exts, cx, _, _, _, afp.fold_expr), {fold_expr: bind expand_expr(exts, cx, _, _, _, afp.fold_expr),
fold_mod: bind expand_mod_items(exts, cx, _, _, afp.fold_mod), fold_mod: bind expand_mod_items(exts, cx, _, _, afp.fold_mod),
@ -131,8 +133,8 @@ fn expand_crate(sess: session::session, c: @crate) -> @crate {
let f = make_fold(f_pre); let f = make_fold(f_pre);
let cm = parse_expr_from_source_str("<core-macros>", let cm = parse_expr_from_source_str("<core-macros>",
@core_macros(), @core_macros(),
sess.opts.cfg, cfg,
sess.parse_sess); parse_sess);
// This is run for its side-effects on the expander env, // This is run for its side-effects on the expander env,
// as it registers all the core macros as expanders. // as it registers all the core macros as expanders.