about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMichael Sullivan <sully@msully.net>2011-07-21 15:32:31 -0700
committerMichael Sullivan <sully@msully.net>2011-07-21 17:39:06 -0700
commitf8bb5a3b580da660e2f55f0701a06798581c56ae (patch)
tree4decb936647c1209366878bb25870f8a79ad8131 /src
parenta9a1392b2c1fece9447a2b834896b4316c5dbfff (diff)
downloadrust-f8bb5a3b580da660e2f55f0701a06798581c56ae.tar.gz
rust-f8bb5a3b580da660e2f55f0701a06798581c56ae.zip
Make ty::ctxt be boxed.
Arguably we should leave ty_ctxt as a bare rec and just always work with
boxes of it. This winds up being simpler and prettier, though.
Diffstat (limited to 'src')
-rw-r--r--src/comp/driver/rustc.rs2
-rw-r--r--src/comp/middle/alias.rs36
-rw-r--r--src/comp/middle/ty.rs57
3 files changed, 45 insertions, 50 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs
index 7e360e7f0e1..01ae803c9e2 100644
--- a/src/comp/driver/rustc.rs
+++ b/src/comp/driver/rustc.rs
@@ -143,7 +143,7 @@ fn compile_input(session::session sess, ast::crate_cfg cfg, str input,
              bind middle::tstate::ck::check_crate(ty_cx, crate));
     }
     time(time_passes, "alias checking",
-         bind middle::alias::check_crate(@ty_cx, crate));
+         bind middle::alias::check_crate(ty_cx, crate));
     auto llmod =
         time[llvm::llvm::ModuleRef](time_passes, "translation",
                                     bind trans::trans_crate
diff --git a/src/comp/middle/alias.rs b/src/comp/middle/alias.rs
index 5581640251d..fd03e264d49 100644
--- a/src/comp/middle/alias.rs
+++ b/src/comp/middle/alias.rs
@@ -36,10 +36,10 @@ type scope = @restrict[];
 
 tag local_info { arg(ast::mode); objfield(ast::mutability); }
 
-type ctx = rec(@ty::ctxt tcx,
+type ctx = rec(ty::ctxt tcx,
                std::map::hashmap[node_id, local_info] local_map);
 
-fn check_crate(@ty::ctxt tcx, &@ast::crate crate) {
+fn check_crate(ty::ctxt tcx, &@ast::crate crate) {
     auto cx = @rec(tcx=tcx,
                    // Stores information about object fields and function
                    // arguments that's otherwise not easily available.
@@ -149,7 +149,7 @@ fn visit_decl(&@ctx cx, &@ast::decl d, &scope sc, &vt[scope] v) {
 
 fn check_call(&ctx cx, &@ast::expr f, &(@ast::expr)[] args, &scope sc) ->
    rec(node_id[] root_vars, ty::t[] unsafe_ts) {
-    auto fty = ty::expr_ty(*cx.tcx, f);
+    auto fty = ty::expr_ty(cx.tcx, f);
     auto arg_ts = fty_args(cx, fty);
     let node_id[] roots = ~[];
     let tup(uint, node_id)[] mut_roots = ~[];
@@ -248,7 +248,7 @@ fn check_tail_call(&ctx cx, &@ast::expr call) {
             case (ast::expr_call(?f, ?args_)) { args = args_; f }
         };
     auto i = 0u;
-    for (ty::arg arg_t in fty_args(cx, ty::expr_ty(*cx.tcx, f))) {
+    for (ty::arg arg_t in fty_args(cx, ty::expr_ty(cx.tcx, f))) {
         if (arg_t.mode != ty::mo_val) {
             auto mut_a = arg_t.mode == ty::mo_alias(true);
             auto ok = true;
@@ -354,15 +354,15 @@ fn check_for(&ctx cx, &@ast::local local, &@ast::expr seq, &ast::block block,
     auto unsafe = alt (inner_mut(root.ds)) { some(?t) { ~[t] } _ { ~[] } };
 
     // If this is a mutable vector, don't allow it to be touched.
-    auto seq_t = ty::expr_ty(*cx.tcx, seq);
-    alt (ty::struct(*cx.tcx, seq_t)) {
+    auto seq_t = ty::expr_ty(cx.tcx, seq);
+    alt (ty::struct(cx.tcx, seq_t)) {
         ty::ty_vec(?mt) | ty::ty_ivec(?mt) {
             if (mt.mut != ast::imm) { unsafe = ~[seq_t]; }
         }
         ty::ty_str | ty::ty_istr { /* no-op */ }
         _ {
             cx.tcx.sess.span_unimpl(seq.span, "unknown seq type " +
-                                    util::ppaux::ty_to_str(*cx.tcx, seq_t));
+                                    util::ppaux::ty_to_str(cx.tcx, seq_t));
         }
     }
     auto new_sc =
@@ -380,7 +380,7 @@ fn check_var(&ctx cx, &@ast::expr ex, &ast::path p, ast::node_id id,
     auto def = cx.tcx.def_map.get(id);
     if (!def_is_local(def, true)) { ret; }
     auto my_defnum = ast::def_id_of_def(def)._1;
-    auto var_t = ty::expr_ty(*cx.tcx, ex);
+    auto var_t = ty::expr_ty(cx.tcx, ex);
     for (restrict r in *sc) {
         // excludes variables introduced since the alias was made
         if (my_defnum < r.block_defnum) {
@@ -523,7 +523,7 @@ fn expr_root(&ctx cx, @ast::expr ex, bool autoderef) ->
    rec(@ast::expr ex, @deref[] ds) {
     fn maybe_auto_unbox(&ctx cx, &ty::t t) ->
        rec(ty::t t, option::t[deref] d) {
-        alt (ty::struct(*cx.tcx, t)) {
+        alt (ty::struct(cx.tcx, t)) {
             case (ty::ty_box(?mt)) {
                 ret rec(t=mt.ty,
                         d=some(@rec(mut=mt.mut != ast::imm,
@@ -541,9 +541,9 @@ fn expr_root(&ctx cx, @ast::expr ex, bool autoderef) ->
         alt ({ ex.node }) {
             case (ast::expr_field(?base, ?ident)) {
                 auto auto_unbox =
-                    maybe_auto_unbox(cx, ty::expr_ty(*cx.tcx, base));
+                    maybe_auto_unbox(cx, ty::expr_ty(cx.tcx, base));
                 auto mut = false;
-                alt (ty::struct(*cx.tcx, auto_unbox.t)) {
+                alt (ty::struct(cx.tcx, auto_unbox.t)) {
                     case (ty::ty_tup(?fields)) {
                         auto fnm = ty::field_num(cx.tcx.sess, ex.span, ident);
                         mut = fields.(fnm).mut != ast::imm;
@@ -564,8 +564,8 @@ fn expr_root(&ctx cx, @ast::expr ex, bool autoderef) ->
             }
             case (ast::expr_index(?base, _)) {
                 auto auto_unbox =
-                    maybe_auto_unbox(cx, ty::expr_ty(*cx.tcx, base));
-                alt (ty::struct(*cx.tcx, auto_unbox.t)) {
+                    maybe_auto_unbox(cx, ty::expr_ty(cx.tcx, base));
+                alt (ty::struct(cx.tcx, auto_unbox.t)) {
                     case (ty::ty_vec(?mt)) {
                         ds += ~[@rec(mut=mt.mut != ast::imm,
                                     kind=index,
@@ -582,9 +582,9 @@ fn expr_root(&ctx cx, @ast::expr ex, bool autoderef) ->
             }
             case (ast::expr_unary(?op, ?base)) {
                 if (op == ast::deref) {
-                    auto base_t = ty::expr_ty(*cx.tcx, base);
+                    auto base_t = ty::expr_ty(cx.tcx, base);
                     auto mut = false;
-                    alt (ty::struct(*cx.tcx, base_t)) {
+                    alt (ty::struct(cx.tcx, base_t)) {
                         case (ty::ty_box(?mt)) { mut = mt.mut != ast::imm; }
                         case (ty::ty_res(_, _, _)) {}
                         case (ty::ty_tag(_, _)) {}
@@ -598,7 +598,7 @@ fn expr_root(&ctx cx, @ast::expr ex, bool autoderef) ->
         }
     }
     if (autoderef) {
-        auto auto_unbox = maybe_auto_unbox(cx, ty::expr_ty(*cx.tcx, ex));
+        auto auto_unbox = maybe_auto_unbox(cx, ty::expr_ty(cx.tcx, ex));
         maybe_push_auto_unbox(auto_unbox.d, ds);
     }
     ret rec(ex=ex, ds=@ds);
@@ -669,7 +669,7 @@ fn ty_can_unsafely_include(&ctx cx, ty::t needle, ty::t haystack, bool mut) ->
             _ { ret false; }
         }
     }
-    ret helper(*cx.tcx, needle, haystack, mut);
+    ret helper(cx.tcx, needle, haystack, mut);
 }
 
 fn def_is_local(&ast::def d, bool objfields_count) -> bool {
@@ -681,7 +681,7 @@ fn def_is_local(&ast::def d, bool objfields_count) -> bool {
 }
 
 fn fty_args(&ctx cx, ty::t fty) -> ty::arg[] {
-    ret alt (ty::struct(*cx.tcx, ty::type_autoderef(*cx.tcx, fty))) {
+    ret alt (ty::struct(cx.tcx, ty::type_autoderef(cx.tcx, fty))) {
         ty::ty_fn(_, ?args, _, _, _) | ty::ty_native_fn(_, ?args, _) { args }
     };
 }
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index 1228892077f..61e61579e67 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -207,20 +207,20 @@ type mt = rec(t ty, ast::mutability mut);
 type creader_cache = hashmap[tup(int, uint, uint), ty::t];
 
 type ctxt =
-    rec(@type_store ts,
-        session::session sess,
-        resolve::def_map def_map,
-        node_type_table node_types,
-        ast_map::map items,
-        freevars::freevar_map freevars,
-
-        //        constr_table fn_constrs,
-        type_cache tcache,
-        creader_cache rcache,
-        hashmap[t, str] short_names_cache,
-        hashmap[t, bool] has_pointer_cache,
-        hashmap[t, bool] owns_heap_mem_cache,
-        hashmap[@ast::ty, option::t[t]] ast_ty_to_ty_cache);
+    @rec(@type_store ts,
+         session::session sess,
+         resolve::def_map def_map,
+         node_type_table node_types,
+         ast_map::map items,
+         freevars::freevar_map freevars,
+
+         //        constr_table fn_constrs,
+         type_cache tcache,
+         creader_cache rcache,
+         hashmap[t, str] short_names_cache,
+         hashmap[t, bool] has_pointer_cache,
+         hashmap[t, bool] owns_heap_mem_cache,
+         hashmap[@ast::ty, option::t[t]] ast_ty_to_ty_cache);
 
 type ty_ctxt = ctxt;
 
@@ -405,23 +405,18 @@ fn mk_ctxt(session::session s, resolve::def_map dm,
     auto tcache = new_def_hash[ty::ty_param_count_and_ty]();
     auto ts = @interner::mk[@raw_t](hash_raw_ty, eq_raw_ty);
     auto cx =
-        rec(ts=ts,
-            sess=s,
-            def_map=dm,
-            node_types=ntt,
-            items=amap,
-            freevars=freevars,
-            tcache=tcache,
-            rcache=mk_rcache(),
-            short_names_cache=map::mk_hashmap[ty::t,
-                                              str](ty::hash_ty, ty::eq_ty),
-            has_pointer_cache=map::mk_hashmap[ty::t,
-                                              bool](ty::hash_ty, ty::eq_ty),
-            owns_heap_mem_cache=map::mk_hashmap[ty::t,
-                                                bool](ty::hash_ty, ty::eq_ty),
-            ast_ty_to_ty_cache=map::mk_hashmap[@ast::ty,
-                                               option::t[t]](ast::hash_ty,
-                                                             ast::eq_ty));
+        @rec(ts=ts,
+             sess=s,
+             def_map=dm,
+             node_types=ntt,
+             items=amap,
+             freevars=freevars,
+             tcache=tcache,
+             rcache=mk_rcache(),
+             short_names_cache=map::mk_hashmap(ty::hash_ty, ty::eq_ty),
+             has_pointer_cache=map::mk_hashmap(ty::hash_ty, ty::eq_ty),
+             owns_heap_mem_cache=map::mk_hashmap(ty::hash_ty, ty::eq_ty),
+             ast_ty_to_ty_cache=map::mk_hashmap(ast::hash_ty, ast::eq_ty));
     populate_type_store(cx);
     ret cx;
 }