about summary refs log tree commit diff
path: root/src/comp/middle
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-01-12 17:59:49 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2012-01-12 18:04:02 +0100
commitefb9df1ebd7ebe0232e202d0e065b08d6a593785 (patch)
treec0e798a4f2529fb5cdb6512555676ba2bae0c5b6 /src/comp/middle
parent56fe4c2681f7ef467d8b3405279acbcfc6b0ebcf (diff)
Make driver::session::session no longer an object
Rather, it is now a struct where properties like opts are accessed
directly, and the error-reporting methods are part of a static impl
(with the same name as the type).
Diffstat (limited to 'src/comp/middle')
-rw-r--r--src/comp/middle/alias.rs1
-rw-r--r--src/comp/middle/block_use.rs1
-rw-r--r--src/comp/middle/capture.rs1
-rw-r--r--src/comp/middle/check_alt.rs1
-rw-r--r--src/comp/middle/check_const.rs4
-rw-r--r--src/comp/middle/debuginfo.rs31
-rw-r--r--src/comp/middle/fn_usage.rs1
-rw-r--r--src/comp/middle/gc.rs1
-rw-r--r--src/comp/middle/kind.rs1
-rw-r--r--src/comp/middle/mut.rs1
-rw-r--r--src/comp/middle/resolve.rs12
-rw-r--r--src/comp/middle/shape.rs6
-rw-r--r--src/comp/middle/trans.rs66
-rw-r--r--src/comp/middle/trans_build.rs10
-rw-r--r--src/comp/middle/trans_closure.rs2
-rw-r--r--src/comp/middle/trans_common.rs5
-rw-r--r--src/comp/middle/trans_impl.rs2
-rw-r--r--src/comp/middle/trans_objects.rs2
-rw-r--r--src/comp/middle/tstate/auxiliary.rs9
-rw-r--r--src/comp/middle/tstate/bitvectors.rs1
-rw-r--r--src/comp/middle/tstate/ck.rs1
-rw-r--r--src/comp/middle/tstate/collect_locals.rs1
-rw-r--r--src/comp/middle/tstate/pre_post_conditions.rs1
-rw-r--r--src/comp/middle/tstate/states.rs1
-rw-r--r--src/comp/middle/ty.rs3
-rw-r--r--src/comp/middle/typeck.rs10
26 files changed, 99 insertions, 76 deletions
diff --git a/src/comp/middle/alias.rs b/src/comp/middle/alias.rs
index a6a67bb0158..82058a6a781 100644
--- a/src/comp/middle/alias.rs
+++ b/src/comp/middle/alias.rs
@@ -8,6 +8,7 @@ import core::{vec, option};
 import std::list;
 import option::{some, none, is_none};
 import list::list;
+import driver::session::session;
 
 // This is not an alias-analyser (though it would merit from becoming one, or
 // getting input from one, to be more precise). It is a pass that checks
diff --git a/src/comp/middle/block_use.rs b/src/comp/middle/block_use.rs
index afc9a901444..3796ae96b5d 100644
--- a/src/comp/middle/block_use.rs
+++ b/src/comp/middle/block_use.rs
@@ -1,5 +1,6 @@
 import syntax::visit;
 import syntax::ast::*;
+import driver::session::session;
 
 type ctx = {tcx: ty::ctxt, mutable allow_block: bool};
 
diff --git a/src/comp/middle/capture.rs b/src/comp/middle/capture.rs
index e1c1c63d02f..aa258673a6e 100644
--- a/src/comp/middle/capture.rs
+++ b/src/comp/middle/capture.rs
@@ -1,4 +1,5 @@
 import syntax::{ast, ast_util};
+import driver::session::session;
 import std::map;
 
 export capture_mode;
diff --git a/src/comp/middle/check_alt.rs b/src/comp/middle/check_alt.rs
index 4d02d4df922..d2e3c15009d 100644
--- a/src/comp/middle/check_alt.rs
+++ b/src/comp/middle/check_alt.rs
@@ -3,6 +3,7 @@ import syntax::ast_util::{variant_def_ids, dummy_sp, compare_lit_exprs,
                           lit_expr_eq};
 import syntax::visit;
 import option::{some, none};
+import driver::session::session;
 
 fn check_crate(tcx: ty::ctxt, crate: @crate) {
     let v =
diff --git a/src/comp/middle/check_const.rs b/src/comp/middle/check_const.rs
index 1a34fe631e9..c0460e90cb0 100644
--- a/src/comp/middle/check_const.rs
+++ b/src/comp/middle/check_const.rs
@@ -59,14 +59,14 @@ fn check_expr(sess: session, e: @expr, &&is_const: bool, v: visit::vt<bool>) {
       expr_lit(@{node: lit_int(v, t), _}) {
         if t != ty_char {
             if (v as u64) > ast_util::int_ty_max(
-                t == ty_i ? sess.get_targ_cfg().int_type : t) {
+                t == ty_i ? sess.targ_cfg.int_type : t) {
                 sess.span_err(e.span, "literal out of range for its type");
             }
         }
       }
       expr_lit(@{node: lit_uint(v, t), _}) {
         if v > ast_util::uint_ty_max(
-            t == ty_u ? sess.get_targ_cfg().uint_type : t) {
+            t == ty_u ? sess.targ_cfg.uint_type : t) {
             sess.span_err(e.span, "literal out of range for its type");
         }
       }
diff --git a/src/comp/middle/debuginfo.rs b/src/comp/middle/debuginfo.rs
index 1c74cb7b171..babe01963ef 100644
--- a/src/comp/middle/debuginfo.rs
+++ b/src/comp/middle/debuginfo.rs
@@ -162,7 +162,7 @@ fn create_compile_unit(cx: @crate_ctxt, full_path: str)
       option::none. {}
     }
 
-    let work_dir = cx.sess.get_working_dir();
+    let work_dir = cx.sess.working_dir;
     let file_path = if str::starts_with(full_path, work_dir) {
         str::slice(full_path, str::byte_len(work_dir),
                    str::byte_len(full_path))
@@ -176,7 +176,7 @@ fn create_compile_unit(cx: @crate_ctxt, full_path: str)
                          llstr(work_dir),
                          llstr(#env["CFG_VERSION"]),
                          lli1(false), // main compile unit
-                         lli1(cx.sess.get_opts().optimize != 0u),
+                         lli1(cx.sess.opts.optimize != 0u),
                          llstr(""), // flags (???)
                          lli32(0) // runtime version (???)
                          // list of enum types
@@ -223,10 +223,10 @@ fn line_from_span(cm: codemap::codemap, sp: codemap::span) -> uint {
 
 fn create_block(cx: @block_ctxt) -> @metadata<block_md> {
     let cache = get_cache(bcx_ccx(cx));
-    let start = codemap::lookup_char_pos(bcx_ccx(cx).sess.get_codemap(),
+    let start = codemap::lookup_char_pos(bcx_ccx(cx).sess.codemap,
                                          cx.sp.lo);
     let fname = start.filename;
-    let end = codemap::lookup_char_pos(bcx_ccx(cx).sess.get_codemap(),
+    let end = codemap::lookup_char_pos(bcx_ccx(cx).sess.codemap,
                                        cx.sp.hi);
     let tg = LexicalBlockTag;
     alt cached_metadata::<@metadata<block_md>>(
@@ -395,14 +395,14 @@ fn create_record(cx: @crate_ctxt, t: ty::t, fields: [ast::ty_field],
     let file_node = create_file(cx, fname);
     let scx = create_structure(file_node,
                                option::get(cx.dbg_cx).names.next("rec"),
-                               line_from_span(cx.sess.get_codemap(),
+                               line_from_span(cx.sess.codemap,
                                               span) as int);
     for field in fields {
         let field_t = ty::get_field(ccx_tcx(cx), t, field.node.ident).mt.ty;
         let ty_md = create_ty(cx, field_t, field.node.mt.ty);
         let (size, align) = member_size_and_align(field.node.mt.ty);
         add_member(scx, field.node.ident,
-                   line_from_span(cx.sess.get_codemap(), field.span) as int,
+                   line_from_span(cx.sess.codemap, field.span) as int,
                    size as int, align as int, ty_md.node);
     }
     let mdval = @{node: finish_structure(scx), data:{hash: t}};
@@ -602,7 +602,7 @@ fn create_ty(cx: @crate_ctxt, t: ty::t, ty: @ast::ty)
 }
 
 fn filename_from_span(cx: @crate_ctxt, sp: codemap::span) -> str {
-    codemap::lookup_char_pos(cx.sess.get_codemap(), sp.lo).filename
+    codemap::lookup_char_pos(cx.sess.codemap, sp.lo).filename
 }
 
 fn create_var(type_tag: int, context: ValueRef, name: str, file: ValueRef,
@@ -632,7 +632,7 @@ fn create_local_var(bcx: @block_ctxt, local: @ast::local)
     let name = alt local.node.pat.node {
       ast::pat_bind(ident, _) { ident /*XXX deal w/ optional node binding*/ }
     };
-    let loc = codemap::lookup_char_pos(cx.sess.get_codemap(),
+    let loc = codemap::lookup_char_pos(cx.sess.codemap,
                                        local.span.lo);
     let ty = trans::node_id_type(cx, local.node.id);
     let tymd = create_ty(cx, ty, local.node.ty);
@@ -675,7 +675,7 @@ fn create_arg(bcx: @block_ctxt, arg: ast::arg)
     /*let arg_n = alt cx.ast_map.get(arg.id) {
       ast_map::node_arg(_, n) { n - 2u }
     };*/
-    let loc = codemap::lookup_char_pos(cx.sess.get_codemap(),
+    let loc = codemap::lookup_char_pos(cx.sess.codemap,
                                        fcx.sp.lo);
     let ty = trans::node_id_type(cx, arg.id);
     let tymd = create_ty(cx, ty, arg.ty);
@@ -696,10 +696,10 @@ fn create_arg(bcx: @block_ctxt, arg: ast::arg)
 }
 
 fn update_source_pos(cx: @block_ctxt, s: codemap::span) {
-    if !bcx_ccx(cx).sess.get_opts().debuginfo {
+    if !bcx_ccx(cx).sess.opts.debuginfo {
         ret;
     }
-    let cm = bcx_ccx(cx).sess.get_codemap();
+    let cm = bcx_ccx(cx).sess.codemap;
     let blockmd = create_block(cx);
     let loc = codemap::lookup_char_pos(cm, s.lo);
     let scopedata = [lli32(loc.line as int),
@@ -716,7 +716,8 @@ fn create_function(fcx: @fn_ctxt) -> @metadata<subprogram_md> {
 
     #debug("~~");
     log(debug, fcx.id);
-    log(debug, cx.sess.span_str(fcx.sp));
+
+    log(debug, codemap::span_to_str(fcx.sp, cx.sess.codemap));
 
     let (ident, ret_ty, id) = alt cx.ast_map.get(fcx.id) {
       ast_map::node_item(item) {
@@ -759,12 +760,12 @@ fn create_function(fcx: @fn_ctxt) -> @metadata<subprogram_md> {
       option::none. {}
     }
 
-    let loc = codemap::lookup_char_pos(cx.sess.get_codemap(),
+    let loc = codemap::lookup_char_pos(cx.sess.codemap,
                                        fcx.sp.lo);
     let file_node = create_file(cx, loc.filename).node;
     let key = cx.item_symbols.contains_key(fcx.id) ? fcx.id : id;
     let mangled = cx.item_symbols.get(key);
-    let ty_node = if cx.sess.get_opts().extra_debuginfo {
+    let ty_node = if cx.sess.opts.extra_debuginfo {
         alt ret_ty.node {
           ast::ty_nil. { llnull() }
           _ { create_ty(cx, ty::node_id_to_type(ccx_tcx(cx), id),
@@ -792,7 +793,7 @@ fn create_function(fcx: @fn_ctxt) -> @metadata<subprogram_md> {
                        lli32(0i), //index into virt func
                        llnull(), // base type with vtbl
                        lli1(false), // artificial
-                       lli1(cx.sess.get_opts().optimize != 0u),
+                       lli1(cx.sess.opts.optimize != 0u),
                        fcx.llfn
                        //list of template params
                        //func decl descriptor
diff --git a/src/comp/middle/fn_usage.rs b/src/comp/middle/fn_usage.rs
index 10b4b096c87..6901ae9d9f9 100644
--- a/src/comp/middle/fn_usage.rs
+++ b/src/comp/middle/fn_usage.rs
@@ -2,6 +2,7 @@ import syntax::ast;
 import syntax::visit;
 import option::some;
 import syntax::print::pprust::expr_to_str;
+import driver::session::session;
 
 export check_crate_fn_usage;
 
diff --git a/src/comp/middle/gc.rs b/src/comp/middle/gc.rs
index 8ae46cec408..6860039aa9f 100644
--- a/src/comp/middle/gc.rs
+++ b/src/comp/middle/gc.rs
@@ -8,6 +8,7 @@ import middle::trans_common::*;
 import middle::ty;
 import option::none;
 import str;
+import driver::session::session;
 
 import lll = lib::llvm::llvm;
 import bld = trans_build;
diff --git a/src/comp/middle/kind.rs b/src/comp/middle/kind.rs
index 5b1cc73ede0..c9659e7b60a 100644
--- a/src/comp/middle/kind.rs
+++ b/src/comp/middle/kind.rs
@@ -3,6 +3,7 @@ import syntax::{visit, ast_util};
 import syntax::ast::*;
 import syntax::codemap::span;
 import ty::{kind, kind_copyable, kind_sendable, kind_noncopyable};
+import driver::session::session;
 
 // Kind analysis pass. There are three kinds:
 //
diff --git a/src/comp/middle/mut.rs b/src/comp/middle/mut.rs
index 41bc218e176..57dea65ce1a 100644
--- a/src/comp/middle/mut.rs
+++ b/src/comp/middle/mut.rs
@@ -3,6 +3,7 @@ import option::{some, none};
 import syntax::ast::*;
 import syntax::visit;
 import syntax::ast_util;
+import driver::session::session;
 
 tag deref_t { unbox; field; index; }
 
diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs
index 8925ca6b312..31fbfea9234 100644
--- a/src/comp/middle/resolve.rs
+++ b/src/comp/middle/resolve.rs
@@ -162,7 +162,7 @@ tag ns_value_type { ns_a_tag; ns_any_value; }
 fn resolve_crate(sess: session, amap: ast_map::map, crate: @ast::crate) ->
    {def_map: def_map, exp_map: exp_map, impl_map: impl_map} {
     let e =
-        @{cstore: sess.get_cstore(),
+        @{cstore: sess.cstore,
           def_map: new_int_hash(),
           ast_map: amap,
           imports: new_int_hash(),
@@ -185,7 +185,7 @@ fn resolve_crate(sess: session, amap: ast_map::map, crate: @ast::crate) ->
     check_exports(e);
     resolve_names(e, crate);
     resolve_impls(e, crate);
-    if sess.get_opts().warn_unused_imports {
+    if sess.opts.warn_unused_imports {
         check_unused_imports(e);
     }
     ret {def_map: e.def_map, exp_map: e.exp_map, impl_map: e.impl_map};
@@ -472,10 +472,10 @@ fn visit_fn_with_scope(e: @env, fk: visit::fn_kind, decl: ast::fn_decl,
     // is this a main fn declaration?
     alt fk {
       visit::fk_item_fn(nm, _) {
-        if is_main_name([nm]) && !e.sess.building_library() {
+        if is_main_name([nm]) && !e.sess.building_library {
             // This is a main function -- set it in the session
             // as the main ID
-            e.sess.set_main_id(id);
+            e.sess.main_fn = some(id);
         }
       }
       _ { /* fallthrough */ }
@@ -1496,7 +1496,7 @@ fn ns_ok(wanted:namespace, actual:namespace) -> bool {
 
 fn lookup_external(e: env, cnum: int, ids: [ident], ns: namespace) ->
    option::t<def> {
-    for d: def in csearch::lookup_defs(e.sess.get_cstore(), cnum, ids) {
+    for d: def in csearch::lookup_defs(e.sess.cstore, cnum, ids) {
         let did = def_id_of_def(d);
         alt d {
           def_mod(_) | def_native_mod(_) {
@@ -1919,7 +1919,7 @@ fn find_impls_in_mod(e: env, m: def, &impls: [@_impl],
                 }
                 @tmp
             } else {
-                csearch::get_impls_for_mod(e.sess.get_cstore(), defid, none)
+                csearch::get_impls_for_mod(e.sess.cstore, defid, none)
             };
             e.impl_cache.insert(defid, cached);
           }
diff --git a/src/comp/middle/shape.rs b/src/comp/middle/shape.rs
index ff760230d93..51bba4514b4 100644
--- a/src/comp/middle/shape.rs
+++ b/src/comp/middle/shape.rs
@@ -240,7 +240,7 @@ fn tag_kind(ccx: @crate_ctxt, did: ast::def_id) -> tag_kind {
 
 // Returns the code corresponding to the pointer size on this architecture.
 fn s_int(tcx: ty_ctxt) -> u8 {
-    ret alt tcx.sess.get_targ_cfg().arch {
+    ret alt tcx.sess.targ_cfg.arch {
         session::arch_x86. { shape_i32 }
         session::arch_x86_64. { shape_i64 }
         session::arch_arm. { shape_i32 }
@@ -248,7 +248,7 @@ fn s_int(tcx: ty_ctxt) -> u8 {
 }
 
 fn s_uint(tcx: ty_ctxt) -> u8 {
-    ret alt tcx.sess.get_targ_cfg().arch {
+    ret alt tcx.sess.targ_cfg.arch {
         session::arch_x86. { shape_u32 }
         session::arch_x86_64. { shape_u64 }
         session::arch_arm. { shape_u32 }
@@ -256,7 +256,7 @@ fn s_uint(tcx: ty_ctxt) -> u8 {
 }
 
 fn s_float(tcx: ty_ctxt) -> u8 {
-    ret alt tcx.sess.get_targ_cfg().arch {
+    ret alt tcx.sess.targ_cfg.arch {
         session::arch_x86. { shape_f64 }
         session::arch_x86_64. { shape_f64 }
         session::arch_arm. { shape_f64 }
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 1ad1b4f50ef..12d0e416b00 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -18,6 +18,7 @@ import std::map::hashmap;
 import std::map::{new_int_hash, new_str_hash};
 import option::{some, none};
 import driver::session;
+import session::session;
 import front::attr;
 import middle::{ty, gc, resolve, debuginfo};
 import middle::freevars::*;
@@ -364,7 +365,7 @@ fn trans_native_call(cx: @block_ctxt, externs: hashmap<str, ValueRef>,
 
 fn trans_free_if_not_gc(cx: @block_ctxt, v: ValueRef) -> @block_ctxt {
     let ccx = bcx_ccx(cx);
-    if !ccx.sess.get_opts().do_gc {
+    if !ccx.sess.opts.do_gc {
         Call(cx, ccx.upcalls.free,
              [PointerCast(cx, v, T_ptr(T_i8())),
               C_int(bcx_ccx(cx), 0)]);
@@ -1153,7 +1154,7 @@ fn declare_tydesc(cx: @local_ctxt, sp: span, t: ty::t, ty_params: [uint],
         llalign = C_int(ccx, 0);
     }
     let name;
-    if cx.ccx.sess.get_opts().debuginfo {
+    if cx.ccx.sess.opts.debuginfo {
         name = mangle_internal_name_by_type_only(cx.ccx, t, "tydesc");
         name = sanitize(name);
     } else { name = mangle_internal_name_by_seq(cx.ccx, "tydesc"); }
@@ -1183,7 +1184,7 @@ fn declare_generic_glue(cx: @local_ctxt, t: ty::t, llfnty: TypeRef, name: str)
    -> ValueRef {
     let name = name;
     let fn_nm;
-    if cx.ccx.sess.get_opts().debuginfo {
+    if cx.ccx.sess.opts.debuginfo {
         fn_nm = mangle_internal_name_by_type_only(cx.ccx, t, "glue_" + name);
         fn_nm = sanitize(fn_nm);
     } else { fn_nm = mangle_internal_name_by_seq(cx.ccx, "glue_" + name); }
@@ -1237,7 +1238,7 @@ fn make_generic_glue_inner(cx: @local_ctxt, sp: span, t: ty::t,
 fn make_generic_glue(cx: @local_ctxt, sp: span, t: ty::t, llfn: ValueRef,
                      helper: glue_helper, ty_params: [uint], name: str) ->
    ValueRef {
-    if !cx.ccx.sess.get_opts().stats {
+    if !cx.ccx.sess.opts.stats {
         ret make_generic_glue_inner(cx, sp, t, llfn, helper, ty_params);
     }
 
@@ -1527,7 +1528,7 @@ fn decr_refcnt_maybe_free(cx: @block_ctxt, box_ptr: ValueRef, t: ty::t)
 
 // Structural comparison: a rather involved form of glue.
 fn maybe_name_value(cx: @crate_ctxt, v: ValueRef, s: str) {
-    if cx.sess.get_opts().save_temps {
+    if cx.sess.opts.save_temps {
         let _: () = str::as_buf(s, {|buf| llvm::LLVMSetValueName(v, buf) });
     }
 }
@@ -1971,7 +1972,7 @@ fn call_memmove(cx: @block_ctxt, dst: ValueRef, src: ValueRef,
     // LLVM complains -- not even a constant element of a tydesc works).
 
     let ccx = bcx_ccx(cx);
-    let key = alt ccx.sess.get_targ_cfg().arch {
+    let key = alt ccx.sess.targ_cfg.arch {
       session::arch_x86. | session::arch_arm. { "llvm.memmove.p0i8.p0i8.i32" }
       session::arch_x86_64. { "llvm.memmove.p0i8.p0i8.i64" }
     };
@@ -2623,7 +2624,7 @@ fn lval_no_env(bcx: @block_ctxt, val: ValueRef, kind: lval_kind)
 fn trans_external_path(cx: @block_ctxt, did: ast::def_id,
                        tpt: ty::ty_param_bounds_and_ty) -> ValueRef {
     let lcx = cx.fcx.lcx;
-    let name = csearch::get_symbol(lcx.ccx.sess.get_cstore(), did);
+    let name = csearch::get_symbol(lcx.ccx.sess.cstore, did);
     ret get_extern_const(lcx.ccx.externs, lcx.ccx.llmod, name,
                          type_of_ty_param_bounds_and_ty(lcx, cx.sp, tpt));
 }
@@ -2667,7 +2668,7 @@ fn lookup_discriminant(lcx: @local_ctxt, vid: ast::def_id) -> ValueRef {
       none. {
         // It's an external discriminant that we haven't seen yet.
         assert (vid.crate != ast::local_crate);
-        let sym = csearch::get_symbol(lcx.ccx.sess.get_cstore(), vid);
+        let sym = csearch::get_symbol(lcx.ccx.sess.cstore, vid);
         let gvar =
             str::as_buf(sym,
                         {|buf|
@@ -3923,7 +3924,8 @@ fn trans_fail_value(bcx: @block_ctxt, sp_opt: option::t<span>,
     let V_line;
     alt sp_opt {
       some(sp) {
-        let loc = bcx_ccx(bcx).sess.lookup_pos(sp.lo);
+        let sess = bcx_ccx(bcx).sess;
+        let loc = codemap::lookup_char_pos(sess.parse_sess.cm, sp.lo);
         V_filename = C_cstr(bcx_ccx(bcx), loc.filename);
         V_line = loc.line as int;
       }
@@ -4077,7 +4079,7 @@ fn zero_alloca(cx: @block_ctxt, llptr: ValueRef, t: ty::t)
 fn trans_stmt(cx: @block_ctxt, s: ast::stmt) -> @block_ctxt {
     // FIXME Fill in cx.sp
 
-    if (!bcx_ccx(cx).sess.get_opts().no_asm_comments) {
+    if (!bcx_ccx(cx).sess.opts.no_asm_comments) {
         add_span_comment(cx, s.span, stmt_to_str(s));
     }
 
@@ -4097,7 +4099,7 @@ fn trans_stmt(cx: @block_ctxt, s: ast::stmt) -> @block_ctxt {
                 } else {
                     bcx = init_ref_local(bcx, local);
                 }
-                if bcx_ccx(cx).sess.get_opts().extra_debuginfo {
+                if bcx_ccx(cx).sess.opts.extra_debuginfo {
                     debuginfo::create_local_var(bcx, local);
                 }
             }
@@ -4116,8 +4118,8 @@ fn trans_stmt(cx: @block_ctxt, s: ast::stmt) -> @block_ctxt {
 fn new_block_ctxt(cx: @fn_ctxt, parent: block_parent, kind: block_kind,
                   name: str) -> @block_ctxt {
     let s = "";
-    if cx.lcx.ccx.sess.get_opts().save_temps ||
-           cx.lcx.ccx.sess.get_opts().debuginfo {
+    if cx.lcx.ccx.sess.opts.save_temps ||
+           cx.lcx.ccx.sess.opts.debuginfo {
         s = cx.lcx.ccx.names.next(name);
     }
     let llbb: BasicBlockRef =
@@ -4284,7 +4286,7 @@ fn alloc_ty(cx: @block_ctxt, t: ty::t) -> result {
     // past caller conventions and may well make sense again,
     // so we leave it as-is.
 
-    if bcx_tcx(cx).sess.get_opts().do_gc {
+    if bcx_tcx(cx).sess.opts.do_gc {
         bcx = gc::add_gc_root(bcx, val, t);
     }
 
@@ -4309,7 +4311,7 @@ fn alloc_local(cx: @block_ctxt, local: @ast::local) -> @block_ctxt {
     let r = alloc_ty(cx, t);
     alt local.node.pat.node {
       ast::pat_bind(ident, none.) {
-        if bcx_ccx(cx).sess.get_opts().debuginfo {
+        if bcx_ccx(cx).sess.opts.debuginfo {
             let _: () = str::as_buf(ident, {|buf|
                 llvm::LLVMSetValueName(r.val, buf)
             });
@@ -4502,7 +4504,7 @@ fn copy_args_to_allocas(fcx: @fn_ctxt, bcx: @block_ctxt, args: [ast::arg],
           }
           ast::by_ref. {}
         }
-        if fcx_ccx(fcx).sess.get_opts().extra_debuginfo {
+        if fcx_ccx(fcx).sess.opts.extra_debuginfo {
             debuginfo::create_arg(bcx, args[arg_n]);
         }
         arg_n += 1u;
@@ -4637,12 +4639,12 @@ fn trans_closure(cx: @local_ctxt, sp: span, decl: ast::fn_decl,
 fn trans_fn(cx: @local_ctxt, sp: span, decl: ast::fn_decl, body: ast::blk,
             llfndecl: ValueRef, ty_self: self_arg, ty_params: [ast::ty_param],
             id: ast::node_id) {
-    let do_time = cx.ccx.sess.get_opts().stats;
+    let do_time = cx.ccx.sess.opts.stats;
     let start = do_time ? time::get_time() : {sec: 0u32, usec: 0u32};
     let fcx = option::none;
     trans_closure(cx, sp, decl, body, llfndecl, ty_self, ty_params, id,
                   {|new_fcx| fcx = option::some(new_fcx);});
-    if cx.ccx.sess.get_opts().extra_debuginfo {
+    if cx.ccx.sess.opts.extra_debuginfo {
         debuginfo::create_function(option::get(fcx));
     }
     if do_time {
@@ -5149,7 +5151,7 @@ fn register_fn_full(ccx: @crate_ctxt, sp: span, path: [str], _flav: str,
     ccx.item_ids.insert(node_id, llfn);
     ccx.item_symbols.insert(node_id, ps);
 
-    let is_main: bool = is_main_name(path) && !ccx.sess.building_library();
+    let is_main: bool = is_main_name(path) && !ccx.sess.building_library;
     if is_main { create_main_wrapper(ccx, sp, llfn, node_type); }
 }
 
@@ -5551,12 +5553,12 @@ fn create_module_map(ccx: @crate_ctxt) -> ValueRef {
 
 fn decl_crate_map(sess: session::session, mapname: str,
                   llmod: ModuleRef) -> ValueRef {
-    let targ_cfg = sess.get_targ_cfg();
+    let targ_cfg = sess.targ_cfg;
     let int_type = T_int(targ_cfg);
     let n_subcrates = 1;
-    let cstore = sess.get_cstore();
+    let cstore = sess.cstore;
     while cstore::have_crate_data(cstore, n_subcrates) { n_subcrates += 1; }
-    let mapname = sess.building_library() ? mapname : "toplevel";
+    let mapname = sess.building_library ? mapname : "toplevel";
     let sym_name = "_rust_crate_map_" + mapname;
     let arrtype = T_array(int_type, n_subcrates as uint);
     let maptype = T_struct([int_type, arrtype]);
@@ -5572,7 +5574,7 @@ fn decl_crate_map(sess: session::session, mapname: str,
 fn fill_crate_map(ccx: @crate_ctxt, map: ValueRef) {
     let subcrates: [ValueRef] = [];
     let i = 1;
-    let cstore = ccx.sess.get_cstore();
+    let cstore = ccx.sess.cstore;
     while cstore::have_crate_data(cstore, i) {
         let nm = "_rust_crate_map_" + cstore::get_crate_data(cstore, i).name;
         let cr = str::as_buf(nm, {|buf|
@@ -5588,7 +5590,7 @@ fn fill_crate_map(ccx: @crate_ctxt, map: ValueRef) {
 }
 
 fn write_metadata(cx: @crate_ctxt, crate: @ast::crate) {
-    if !cx.sess.building_library() { ret; }
+    if !cx.sess.building_library { ret; }
     let llmeta = C_postr(metadata::encoder::encode_metadata(cx, crate));
     let llconst = trans_common::C_struct([llmeta]);
     let llglobal =
@@ -5598,7 +5600,7 @@ fn write_metadata(cx: @crate_ctxt, crate: @ast::crate) {
                     });
     llvm::LLVMSetInitializer(llglobal, llconst);
     let _: () =
-        str::as_buf(cx.sess.get_targ_cfg().target_strs.meta_sect_name,
+        str::as_buf(cx.sess.targ_cfg.target_strs.meta_sect_name,
                     {|buf| llvm::LLVMSetSection(llglobal, buf) });
     llvm::LLVMSetLinkage(llglobal,
                          lib::llvm::LLVMInternalLinkage as llvm::Linkage);
@@ -5645,19 +5647,19 @@ fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt,
         llvm::LLVMModuleCreateWithNameInContext
             (buf, llvm::LLVMGetGlobalContext())
     });
-    let data_layout = sess.get_targ_cfg().target_strs.data_layout;
-    let targ_triple = sess.get_targ_cfg().target_strs.target_triple;
+    let data_layout = sess.targ_cfg.target_strs.data_layout;
+    let targ_triple = sess.targ_cfg.target_strs.target_triple;
     let _: () =
         str::as_buf(data_layout,
                     {|buf| llvm::LLVMSetDataLayout(llmod, buf) });
     let _: () =
         str::as_buf(targ_triple,
                     {|buf| llvm::LLVMSetTarget(llmod, buf) });
-    let targ_cfg = sess.get_targ_cfg();
-    let td = mk_target_data(sess.get_targ_cfg().target_strs.data_layout);
+    let targ_cfg = sess.targ_cfg;
+    let td = mk_target_data(sess.targ_cfg.target_strs.data_layout);
     let tn = mk_type_names();
     let intrinsics = declare_intrinsics(llmod);
-    if sess.get_opts().extra_debuginfo {
+    if sess.opts.extra_debuginfo {
         declare_dbg_intrinsics(llmod, intrinsics);
     }
     let int_type = T_int(targ_cfg);
@@ -5668,7 +5670,7 @@ fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt,
     let tydesc_type = T_tydesc(targ_cfg);
     tn.associate("tydesc", tydesc_type);
     let crate_map = decl_crate_map(sess, link_meta.name, llmod);
-    let dbg_cx = if sess.get_opts().debuginfo {
+    let dbg_cx = if sess.opts.debuginfo {
         option::some(@{llmetadata: map::new_int_hash(),
                        names: namegen(0)})
     } else {
@@ -5737,7 +5739,7 @@ fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt,
 
     // Translate the metadata.
     write_metadata(cx.ccx, crate);
-    if ccx.sess.get_opts().stats {
+    if ccx.sess.opts.stats {
         #error("--- trans stats ---");
         #error("n_static_tydescs: %u", ccx.stats.n_static_tydescs);
         #error("n_derived_tydescs: %u", ccx.stats.n_derived_tydescs);
diff --git a/src/comp/middle/trans_build.rs b/src/comp/middle/trans_build.rs
index 1295e24b110..a9d18fbd55a 100644
--- a/src/comp/middle/trans_build.rs
+++ b/src/comp/middle/trans_build.rs
@@ -1,7 +1,8 @@
 import core::{vec, str};
 import str::sbuf;
 import lib::llvm::llvm;
-import syntax::codemap::span;
+import syntax::codemap;
+import codemap::span;
 import llvm::{ValueRef, TypeRef, BasicBlockRef, BuilderRef, Opcode,
               ModuleRef};
 import trans_common::{block_ctxt, T_ptr, T_nil, T_i8, T_i1, T_void,
@@ -509,8 +510,9 @@ fn _UndefReturn(cx: @block_ctxt, Fn: ValueRef) -> ValueRef {
 
 fn add_span_comment(bcx: @block_ctxt, sp: span, text: str) {
     let ccx = bcx_ccx(bcx);
-    if (!ccx.sess.get_opts().no_asm_comments) {
-        let s = text + " (" + ccx.sess.span_str(sp) + ")";
+    if (!ccx.sess.opts.no_asm_comments) {
+        let s = text + " (" + codemap::span_to_str(sp, ccx.sess.codemap)
+            + ")";
         log(debug, s);
         add_comment(bcx, s);
     }
@@ -518,7 +520,7 @@ fn add_span_comment(bcx: @block_ctxt, sp: span, text: str) {
 
 fn add_comment(bcx: @block_ctxt, text: str) {
     let ccx = bcx_ccx(bcx);
-    if (!ccx.sess.get_opts().no_asm_comments) {
+    if (!ccx.sess.opts.no_asm_comments) {
         check str::is_not_empty("$");
         let sanitized = str::replace(text, "$", "");
         let comment_text = "; " + sanitized;
diff --git a/src/comp/middle/trans_closure.rs b/src/comp/middle/trans_closure.rs
index 398d47469f4..3319969f8bd 100644
--- a/src/comp/middle/trans_closure.rs
+++ b/src/comp/middle/trans_closure.rs
@@ -364,7 +364,7 @@ fn store_environment(
     let {bcx: bcx, val:bindings_slot} =
         GEP_tup_like_1(bcx, cboxptr_ty, llbox, [0, abi::cbox_elt_bindings]);
     vec::iteri(bound_values) { |i, bv|
-        if (!ccx.sess.get_opts().no_asm_comments) {
+        if (!ccx.sess.opts.no_asm_comments) {
             add_comment(bcx, #fmt("Copy %s into closure",
                                   ev_to_str(ccx, bv)));
         }
diff --git a/src/comp/middle/trans_common.rs b/src/comp/middle/trans_common.rs
index 6b28f1483e7..c0f110e65c3 100644
--- a/src/comp/middle/trans_common.rs
+++ b/src/comp/middle/trans_common.rs
@@ -9,6 +9,7 @@ import std::map::hashmap;
 import option::some;
 import syntax::ast;
 import driver::session;
+import session::session;
 import middle::{resolve, ty};
 import back::{link, abi, upcall};
 import util::common::*;
@@ -331,7 +332,7 @@ fn get_res_dtor(ccx: @crate_ctxt, sp: span, did: ast::def_id, inner_t: ty::t)
                          [{mode: ast::by_ref, ty: inner_t}],
                          nil_res, *param_bounds);
     ret trans::get_extern_const(ccx.externs, ccx.llmod,
-                                csearch::get_symbol(ccx.sess.get_cstore(),
+                                csearch::get_symbol(ccx.sess.cstore,
                                                     did), f_t);
 }
 
@@ -662,7 +663,7 @@ fn T_vec2(targ_cfg: @session::config, t: TypeRef) -> TypeRef {
 }
 
 fn T_vec(ccx: @crate_ctxt, t: TypeRef) -> TypeRef {
-    ret T_vec2(ccx.sess.get_targ_cfg(), t);
+    ret T_vec2(ccx.sess.targ_cfg, t);
 }
 
 // Note that the size of this one is in bytes.
diff --git a/src/comp/middle/trans_impl.rs b/src/comp/middle/trans_impl.rs
index 0139148d728..0a883c193f8 100644
--- a/src/comp/middle/trans_impl.rs
+++ b/src/comp/middle/trans_impl.rs
@@ -360,7 +360,7 @@ fn get_dict_ptrs(bcx: @block_ctxt, origin: typeck::dict_origin)
         if did.crate == ast::local_crate {
             ccx.item_ids.get(did.node)
         } else {
-            let name = csearch::get_symbol(ccx.sess.get_cstore(), did);
+            let name = csearch::get_symbol(ccx.sess.cstore, did);
             get_extern_const(ccx.externs, ccx.llmod, name, T_ptr(T_i8()))
         }
     }
diff --git a/src/comp/middle/trans_objects.rs b/src/comp/middle/trans_objects.rs
index 913cca74192..b4edb2b1cf2 100644
--- a/src/comp/middle/trans_objects.rs
+++ b/src/comp/middle/trans_objects.rs
@@ -16,6 +16,8 @@ import trans_common::*;
 import trans::*;
 import trans_build::*;
 
+import driver::session::session;
+
 export trans_anon_obj;
 export trans_obj;
 
diff --git a/src/comp/middle/tstate/auxiliary.rs b/src/comp/middle/tstate/auxiliary.rs
index de723dc16cc..8d1e0bbb311 100644
--- a/src/comp/middle/tstate/auxiliary.rs
+++ b/src/comp/middle/tstate/auxiliary.rs
@@ -2,8 +2,8 @@ import core::{vec, int, uint, option};
 import option::*;
 import syntax::ast::*;
 import syntax::ast_util::*;
-import syntax::codemap::span;
-import syntax::visit;
+import syntax::{visit, codemap};
+import codemap::span;
 import std::map::{new_int_hash};
 import syntax::print::pprust::path_to_str;
 import tstate::ann::{pre_and_post, pre_and_post_state, empty_ann, prestate,
@@ -15,6 +15,7 @@ import tstate::ann::{pre_and_post, pre_and_post_state, empty_ann, prestate,
                      clear_in_poststate_};
 import tritv::*;
 import bitvectors::promises_;
+import driver::session::session;
 
 import syntax::print::pprust::{constr_args_to_str, lit_to_str};
 
@@ -51,13 +52,13 @@ fn constraint_to_str(tcx: ty::ctxt, c: sp_constr) -> str {
     alt c.node {
       ninit(id, i) {
         ret #fmt("init(%s id=%d - arising from %s)",
-                 i, id, tcx.sess.span_str(c.span));
+                 i, id, codemap::span_to_str(c.span, tcx.sess.codemap));
       }
       npred(p, _, args) {
           ret #fmt("%s(%s) - arising from %s",
                    path_to_str(p),
                    comma_str(args),
-                   tcx.sess.span_str(c.span));
+                   codemap::span_to_str(c.span, tcx.sess.codemap));
       }
     }
 }
diff --git a/src/comp/middle/tstate/bitvectors.rs b/src/comp/middle/tstate/bitvectors.rs
index 9f4d5949e01..e522103d62b 100644
--- a/src/comp/middle/tstate/bitvectors.rs
+++ b/src/comp/middle/tstate/bitvectors.rs
@@ -12,6 +12,7 @@ import tstate::ann::{pre_and_post, precond, postcond, prestate, poststate,
                      clear_in_poststate_};
 import tritv::*;
 import util::common::*;
+import driver::session::session;
 
 fn bit_num(fcx: fn_ctxt, c: tsconstr) -> uint {
     let d = tsconstr_to_def_id(c);
diff --git a/src/comp/middle/tstate/ck.rs b/src/comp/middle/tstate/ck.rs
index 0ebf4bd0ccc..fbe32a4adff 100644
--- a/src/comp/middle/tstate/ck.rs
+++ b/src/comp/middle/tstate/ck.rs
@@ -15,6 +15,7 @@ import annotate::annotate_crate;
 import collect_locals::mk_f_to_fn_info;
 import pre_post_conditions::fn_pre_post;
 import states::find_pre_post_state_fn;
+import driver::session::session;
 
 fn check_unused_vars(fcx: fn_ctxt) {
 
diff --git a/src/comp/middle/tstate/collect_locals.rs b/src/comp/middle/tstate/collect_locals.rs
index 939197716b4..f303e790189 100644
--- a/src/comp/middle/tstate/collect_locals.rs
+++ b/src/comp/middle/tstate/collect_locals.rs
@@ -6,6 +6,7 @@ import aux::*;
 import util::common::new_def_hash;
 import syntax::codemap::span;
 import syntax::ast_util::respan;
+import driver::session::session;
 
 type ctxt = {cs: @mutable [sp_constr], tcx: ty::ctxt};
 
diff --git a/src/comp/middle/tstate/pre_post_conditions.rs b/src/comp/middle/tstate/pre_post_conditions.rs
index 244f696549e..98860463d19 100644
--- a/src/comp/middle/tstate/pre_post_conditions.rs
+++ b/src/comp/middle/tstate/pre_post_conditions.rs
@@ -14,6 +14,7 @@ import syntax::visit;
 import util::common::{new_def_hash, log_expr, field_exprs,
                       has_nonlocal_exits, log_stmt};
 import syntax::codemap::span;
+import driver::session::session;
 
 fn find_pre_post_mod(_m: _mod) -> _mod {
     #debug("implement find_pre_post_mod!");
diff --git a/src/comp/middle/tstate/states.rs b/src/comp/middle/tstate/states.rs
index e2927174b56..40f71703843 100644
--- a/src/comp/middle/tstate/states.rs
+++ b/src/comp/middle/tstate/states.rs
@@ -10,6 +10,7 @@ import syntax::ast_util::*;
 import syntax::codemap::span;
 import middle::ty::{expr_ty, type_is_bot};
 import util::common::{field_exprs, has_nonlocal_exits};
+import driver::session::session;
 
 fn forbid_upvar(fcx: fn_ctxt, rhs_id: node_id, sp: span, t: oper_type) {
     alt t {
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index 2cf62fcb2d4..3607edb43c3 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -9,6 +9,7 @@ import option::none;
 import option::some;
 import std::smallintmap;
 import driver::session;
+import session::session;
 import syntax::ast;
 import syntax::ast::*;
 import syntax::ast_util;
@@ -1864,7 +1865,7 @@ mod unify {
     // Simple structural type comparison.
     fn struct_cmp(cx: @ctxt, expected: t, actual: t) -> result {
         let tcx = cx.tcx;
-        let cfg = tcx.sess.get_targ_cfg();
+        let cfg = tcx.sess.targ_cfg;
         if mach_struct(tcx, cfg, expected) == mach_struct(tcx, cfg, actual) {
             ret ures_ok(expected);
         }
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index 18b602e33aa..0ecff4260fb 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -3,7 +3,7 @@ import ast::spanned;
 import syntax::ast_util::{local_def, respan};
 import syntax::visit;
 import metadata::csearch;
-import driver::session;
+import driver::session::session;
 import util::common::*;
 import syntax::codemap::span;
 import middle::ty;
@@ -1468,7 +1468,7 @@ fn check_pat(fcx: @fn_ctxt, map: ast_util::pat_id_map, pat: @ast::pat,
     }
 }
 
-fn require_unsafe(sess: session::session, f_purity: ast::purity, sp: span) {
+fn require_unsafe(sess: session, f_purity: ast::purity, sp: span) {
     alt f_purity {
       ast::unsafe_fn. { ret; }
       _ {
@@ -1479,7 +1479,7 @@ fn require_unsafe(sess: session::session, f_purity: ast::purity, sp: span) {
     }
 }
 
-fn require_impure(sess: session::session, f_purity: ast::purity, sp: span) {
+fn require_impure(sess: session, f_purity: ast::purity, sp: span) {
     alt f_purity {
       ast::unsafe_fn. { ret; }
       ast::impure_fn. { ret; }
@@ -2879,8 +2879,8 @@ fn check_main_fn_ty(tcx: ty::ctxt, main_id: ast::node_id) {
 }
 
 fn check_for_main_fn(tcx: ty::ctxt, crate: @ast::crate) {
-    if !tcx.sess.building_library() {
-        alt tcx.sess.get_main_id() {
+    if !tcx.sess.building_library {
+        alt tcx.sess.main_fn {
           some(id) { check_main_fn_ty(tcx, id); }
           none. { tcx.sess.span_err(crate.span, "main function not found"); }
         }