rustc: Begin eliminating ext's dependency on the session

This commit is contained in:
Brian Anderson 2012-03-22 18:53:30 -07:00
parent a477aaba08
commit 45a709766c
7 changed files with 67 additions and 54 deletions

View File

@ -953,25 +953,22 @@ fn new_parse_sess() -> parser::parse_sess {
#[cfg(test)]
iface fake_ext_ctxt {
fn session() -> fake_session;
fn cfg() -> ast::crate_cfg;
fn parse_sess() -> parser::parse_sess;
}
#[cfg(test)]
type fake_options = {cfg: ast::crate_cfg};
#[cfg(test)]
type fake_session = {opts: @fake_options,
parse_sess: parser::parse_sess};
type fake_session = ();
#[cfg(test)]
impl of fake_ext_ctxt for fake_session {
fn session() -> fake_session {self}
fn cfg() -> ast::crate_cfg { [] }
fn parse_sess() -> parser::parse_sess { new_parse_sess() }
}
#[cfg(test)]
fn mk_ctxt() -> fake_ext_ctxt {
let opts : fake_options = {cfg: []};
{opts: @opts, parse_sess: new_parse_sess()} as fake_ext_ctxt
() as fake_ext_ctxt
}
#[cfg(test)]

View File

@ -70,7 +70,6 @@ node twice.
*/
import base::*;
import driver::session::session;
import codemap::span;
import std::map;
import std::map::hashmap;
@ -106,9 +105,9 @@ fn expand(cx: ext_ctxt,
}
_ {
cx.session().span_err(span, "#[auto_serialize] can only be \
applied to type and enum \
definitions");
cx.span_err(span, "#[auto_serialize] can only be \
applied to type and enum \
definitions");
[in_item]
}
}
@ -116,8 +115,6 @@ fn expand(cx: ext_ctxt,
}
impl helpers for ext_ctxt {
fn next_id() -> ast::node_id { self.session().next_node_id() }
fn helper_path(base_path: @ast::path,
helper_name: str) -> @ast::path {
let head = vec::init(base_path.node.idents);
@ -347,7 +344,7 @@ fn ser_ty(cx: ext_ctxt, tps: ser_tps_map,
}
ast::ty_bot {
cx.session().span_err(
cx.span_err(
ty.span, #fmt["Cannot serialize bottom type"]);
[]
}
@ -363,7 +360,7 @@ fn ser_ty(cx: ext_ctxt, tps: ser_tps_map,
}
ast::ty_ptr(_) | ast::ty_rptr(_, _) {
cx.session().span_err(
cx.span_err(
ty.span, #fmt["Cannot serialize pointer types"]);
[]
}
@ -386,7 +383,7 @@ fn ser_ty(cx: ext_ctxt, tps: ser_tps_map,
}
ast::ty_fn(_, _) {
cx.session().span_err(
cx.span_err(
ty.span, #fmt["Cannot serialize function types"]);
[]
}
@ -444,13 +441,13 @@ fn ser_ty(cx: ext_ctxt, tps: ser_tps_map,
}
ast::ty_mac(_) {
cx.session().span_err(
cx.span_err(
ty.span, #fmt["Cannot serialize macro types"]);
[]
}
ast::ty_infer {
cx.session().span_err(
cx.span_err(
ty.span, #fmt["Cannot serialize inferred types"]);
[]
}

View File

@ -1,6 +1,7 @@
import std::map::hashmap;
import driver::session::session;
import codemap::{span, expn_info, expanded_from};
import syntax::parse::parser;
import driver::diagnostic::span_handler;
import codemap::{codemap, span, expn_info, expanded_from};
import std::map::str_hash;
type syntax_expander_ =
@ -44,7 +45,10 @@ fn syntax_expander_table() -> hashmap<str, syntax_extension> {
}
iface ext_ctxt {
fn session() -> session;
fn session() -> driver::session::session;
fn codemap() -> codemap;
fn parse_sess() -> parser::parse_sess;
fn cfg() -> ast::crate_cfg;
fn print_backtrace();
fn backtrace() -> expn_info;
fn bt_push(ei: codemap::expn_info_);
@ -57,11 +61,18 @@ iface ext_ctxt {
fn next_id() -> ast::node_id;
}
fn mk_ctxt(sess: session) -> ext_ctxt {
type ctxt_repr = {sess: session,
fn mk_ctxt(session: driver::session::session,
parse_sess: parser::parse_sess,
cfg: ast::crate_cfg) -> ext_ctxt {
type ctxt_repr = {session: driver::session::session,
parse_sess: parser::parse_sess,
cfg: ast::crate_cfg,
mutable backtrace: expn_info};
impl of ext_ctxt for ctxt_repr {
fn session() -> session { self.sess }
fn session() -> driver::session::session { self.session }
fn codemap() -> codemap { self.parse_sess.cm }
fn parse_sess() -> parser::parse_sess { self.parse_sess }
fn cfg() -> ast::crate_cfg { self.cfg }
fn print_backtrace() { }
fn backtrace() -> expn_info { self.backtrace }
fn bt_push(ei: codemap::expn_info_) {
@ -85,24 +96,34 @@ fn mk_ctxt(sess: session) -> ext_ctxt {
}
fn span_fatal(sp: span, msg: str) -> ! {
self.print_backtrace();
self.sess.span_fatal(sp, msg);
self.parse_sess.span_diagnostic.span_fatal(sp, msg);
}
fn span_err(sp: span, msg: str) {
self.print_backtrace();
self.sess.span_err(sp, msg);
self.parse_sess.span_diagnostic.span_err(sp, msg);
}
fn span_unimpl(sp: span, msg: str) -> ! {
self.print_backtrace();
self.sess.span_unimpl(sp, msg);
self.parse_sess.span_diagnostic.span_unimpl(sp, msg);
}
fn span_bug(sp: span, msg: str) -> ! {
self.print_backtrace();
self.sess.span_bug(sp, msg);
self.parse_sess.span_diagnostic.span_bug(sp, msg);
}
fn bug(msg: str) -> ! {
self.print_backtrace();
self.parse_sess.span_diagnostic.handler().bug(msg);
}
fn next_id() -> ast::node_id {
ret parser::next_node_id(self.parse_sess);
}
fn bug(msg: str) -> ! { self.print_backtrace(); self.sess.bug(msg); }
fn next_id() -> ast::node_id { ret self.sess.next_node_id(); }
}
let imp : ctxt_repr = {sess: sess, mutable backtrace: none};
let imp : ctxt_repr = {
session: session,
parse_sess: parse_sess,
cfg: cfg,
mutable backtrace: none
};
ret imp as ext_ctxt
}

View File

@ -122,7 +122,7 @@ fn core_macros() -> str {
fn expand_crate(sess: session::session, c: @crate) -> @crate {
let exts = syntax_expander_table();
let afp = default_ast_fold();
let cx: ext_ctxt = mk_ctxt(sess);
let cx: ext_ctxt = mk_ctxt(sess, sess.parse_sess, sess.opts.cfg);
let f_pre =
{fold_expr: bind expand_expr(exts, cx, _, _, _, afp.fold_expr),
fold_mod: bind expand_mod_items(exts, cx, _, _, afp.fold_mod),

View File

@ -1,5 +1,3 @@
import driver::session;
import syntax::ast::{crate, expr_, mac_invoc,
mac_aq, mac_var};
import syntax::fold::*;
@ -191,13 +189,13 @@ fn finish<T: qq_helper>
(ecx: ext_ctxt, body: ast::mac_body_, f: fn (p: parser) -> T)
-> @ast::expr
{
let cm = ecx.session().parse_sess.cm;
let cm = ecx.codemap();
let str = @codemap::span_to_snippet(body.span, cm);
#debug["qquote--str==%?", str];
let fname = codemap::mk_substr_filename(cm, body.span);
let node = parse_from_source_str
(f, fname, codemap::fss_internal(body.span), str,
ecx.session().opts.cfg, ecx.session().parse_sess);
ecx.cfg(), ecx.parse_sess());
let loc = codemap::lookup_char_pos(cm, body.span.lo);
let sp = node.span();
@ -239,8 +237,13 @@ fn finish<T: qq_helper>
}
let cx = ecx;
let session_call = {||
mk_call_(cx, sp, mk_access(cx, sp, ["ext_cx"], "session"), [])
let cfg_call = {||
mk_call_(cx, sp, mk_access(cx, sp, ["ext_cx"], "cfg"), [])
};
let parse_sess_call = {||
mk_call_(cx, sp, mk_access(cx, sp, ["ext_cx"], "parse_sess"), [])
};
let pcall = mk_call(cx,sp,
@ -255,10 +258,8 @@ fn finish<T: qq_helper>
mk_uint(cx,sp, loc.col)]),
mk_unary(cx,sp, ast::box(ast::m_imm),
mk_str(cx,sp, str2)),
mk_access_(cx,sp,
mk_access_(cx,sp, session_call(), "opts"),
"cfg"),
mk_access_(cx,sp, session_call(), "parse_sess")]
cfg_call(),
parse_sess_call()]
);
let mut rcall = pcall;
if (g_len > 0u) {

View File

@ -2,7 +2,6 @@ use std;
import codemap::span;
import std::map::{hashmap, str_hash};
import driver::session::session;
import base::*;
@ -478,7 +477,7 @@ fn p_t_s_rec(cx: ext_ctxt, m: matchable, s: selector, b: binders) {
}
}
_ {
cx.session().bug("undocumented invariant in p_t_s_rec");
cx.bug("undocumented invariant in p_t_s_rec");
}
}
}

View File

@ -26,21 +26,19 @@ fn new_parse_sess() -> parser::parse_sess {
}
iface fake_ext_ctxt {
fn session() -> fake_session;
fn cfg() -> ast::crate_cfg;
fn parse_sess() -> parser::parse_sess;
}
type fake_options = {cfg: ast::crate_cfg};
type fake_session = {opts: @fake_options,
parse_sess: parser::parse_sess};
type fake_session = ();
impl of fake_ext_ctxt for fake_session {
fn session() -> fake_session {self}
fn cfg() -> ast::crate_cfg { [] }
fn parse_sess() -> parser::parse_sess { new_parse_sess() }
}
fn mk_ctxt() -> fake_ext_ctxt {
let opts : fake_options = {cfg: []};
{opts: @opts, parse_sess: new_parse_sess()} as fake_ext_ctxt
() as fake_ext_ctxt
}