rustc: Begin eliminating ext's dependency on the session
This commit is contained in:
parent
a477aaba08
commit
45a709766c
@ -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)]
|
||||
|
@ -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"]);
|
||||
[]
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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),
|
||||
|
@ -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) {
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user