Skip to content

Commit 650566e

Browse files
committed
Auto merge of #26575 - eddyb:tycx, r=nikomatsakis
Next step towards split local/global type contexts, after #26351. cc @rust-lang/compiler @jroesch
2 parents d3c03d0 + ad66c21 commit 650566e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+4656
-5165
lines changed

src/librustc/metadata/encoder.rs

+24-27
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ use metadata::cstore;
2323
use metadata::decoder;
2424
use metadata::tyencode;
2525
use middle::def;
26-
use middle::ty::lookup_item_type;
2726
use middle::ty::{self, Ty};
2827
use middle::stability;
2928
use util::nodemap::{FnvHashMap, NodeMap, NodeSet};
@@ -133,7 +132,7 @@ pub fn def_to_string(did: DefId) -> String {
133132
fn encode_item_variances(rbml_w: &mut Encoder,
134133
ecx: &EncodeContext,
135134
id: NodeId) {
136-
let v = ty::item_variances(ecx.tcx, ast_util::local_def(id));
135+
let v = ecx.tcx.item_variances(ast_util::local_def(id));
137136
rbml_w.start_tag(tag_item_variances);
138137
v.encode(rbml_w);
139138
rbml_w.end_tag();
@@ -144,8 +143,8 @@ fn encode_bounds_and_type_for_item<'a, 'tcx>(rbml_w: &mut Encoder,
144143
id: ast::NodeId) {
145144
encode_bounds_and_type(rbml_w,
146145
ecx,
147-
&ty::lookup_item_type(ecx.tcx, local_def(id)),
148-
&ty::lookup_predicates(ecx.tcx, local_def(id)));
146+
&ecx.tcx.lookup_item_type(local_def(id)),
147+
&ecx.tcx.lookup_predicates(local_def(id)));
149148
}
150149

151150
fn encode_bounds_and_type<'a, 'tcx>(rbml_w: &mut Encoder,
@@ -293,8 +292,7 @@ fn encode_enum_variant_info(ecx: &EncodeContext,
293292

294293
let mut disr_val = 0;
295294
let mut i = 0;
296-
let vi = ty::enum_variants(ecx.tcx,
297-
DefId { krate: ast::LOCAL_CRATE, node: id });
295+
let vi = ecx.tcx.enum_variants(local_def(id));
298296
for variant in variants {
299297
let def_id = local_def(variant.node.id);
300298
index.push(entry {
@@ -319,7 +317,7 @@ fn encode_enum_variant_info(ecx: &EncodeContext,
319317
match variant.node.kind {
320318
ast::TupleVariantKind(_) => {},
321319
ast::StructVariantKind(_) => {
322-
let fields = ty::lookup_struct_fields(ecx.tcx, def_id);
320+
let fields = ecx.tcx.lookup_struct_fields(def_id);
323321
let idx = encode_info_for_struct(ecx,
324322
rbml_w,
325323
&fields[..],
@@ -328,9 +326,10 @@ fn encode_enum_variant_info(ecx: &EncodeContext,
328326
encode_index(rbml_w, idx, write_i64);
329327
}
330328
}
331-
if (*vi)[i].disr_val != disr_val {
332-
encode_disr_val(ecx, rbml_w, (*vi)[i].disr_val);
333-
disr_val = (*vi)[i].disr_val;
329+
let specified_disr_val = vi[i].disr_val;
330+
if specified_disr_val != disr_val {
331+
encode_disr_val(ecx, rbml_w, specified_disr_val);
332+
disr_val = specified_disr_val;
334333
}
335334
encode_bounds_and_type_for_item(rbml_w, ecx, def_id.local_id());
336335

@@ -379,9 +378,7 @@ fn encode_reexported_static_base_methods(ecx: &EncodeContext,
379378
Some(implementations) => {
380379
for base_impl_did in implementations.iter() {
381380
for &method_did in impl_items.get(base_impl_did).unwrap() {
382-
let impl_item = ty::impl_or_trait_item(
383-
ecx.tcx,
384-
method_did.def_id());
381+
let impl_item = ecx.tcx.impl_or_trait_item(method_did.def_id());
385382
if let ty::MethodTraitItem(ref m) = impl_item {
386383
encode_reexported_static_method(rbml_w,
387384
exp,
@@ -875,7 +872,7 @@ fn encode_info_for_method<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
875872
if let Some(impl_item) = impl_item_opt {
876873
if let ast::MethodImplItem(ref sig, _) = impl_item.node {
877874
encode_attributes(rbml_w, &impl_item.attrs);
878-
let scheme = ty::lookup_item_type(ecx.tcx, m.def_id);
875+
let scheme = ecx.tcx.lookup_item_type(m.def_id);
879876
let any_types = !scheme.generics.types.is_empty();
880877
let needs_inline = any_types || is_default_impl ||
881878
attr::requests_inline(&impl_item.attrs);
@@ -923,7 +920,7 @@ fn encode_info_for_associated_type<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
923920
encode_attributes(rbml_w, &ii.attrs);
924921
} else {
925922
encode_predicates(rbml_w, ecx,
926-
&ty::lookup_predicates(ecx.tcx, associated_type.def_id),
923+
&ecx.tcx.lookup_predicates(associated_type.def_id),
927924
tag_item_generics);
928925
}
929926

@@ -995,7 +992,7 @@ fn encode_extension_implementations(ecx: &EncodeContext,
995992
rbml_w: &mut Encoder,
996993
trait_def_id: DefId) {
997994
assert!(ast_util::is_local(trait_def_id));
998-
let def = ty::lookup_trait_def(ecx.tcx, trait_def_id);
995+
let def = ecx.tcx.lookup_trait_def(trait_def_id);
999996

1000997
def.for_each_impl(ecx.tcx, |impl_def_id| {
1001998
rbml_w.start_tag(tag_items_data_item_extension_impl);
@@ -1161,7 +1158,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
11611158
index);
11621159
}
11631160
ast::ItemStruct(ref struct_def, _) => {
1164-
let fields = ty::lookup_struct_fields(tcx, def_id);
1161+
let fields = tcx.lookup_struct_fields(def_id);
11651162

11661163
/* First, encode the fields
11671164
These come first because we need to write them to make
@@ -1220,7 +1217,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
12201217
encode_name(rbml_w, item.ident.name);
12211218
encode_unsafety(rbml_w, unsafety);
12221219

1223-
let trait_ref = ty::impl_trait_ref(tcx, local_def(item.id)).unwrap();
1220+
let trait_ref = tcx.impl_trait_ref(local_def(item.id)).unwrap();
12241221
encode_trait_ref(rbml_w, ecx, trait_ref, tag_item_trait_ref);
12251222
rbml_w.end_tag();
12261223
}
@@ -1274,7 +1271,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
12741271
}
12751272
rbml_w.end_tag();
12761273
}
1277-
if let Some(trait_ref) = ty::impl_trait_ref(tcx, local_def(item.id)) {
1274+
if let Some(trait_ref) = tcx.impl_trait_ref(local_def(item.id)) {
12781275
encode_trait_ref(rbml_w, ecx, trait_ref, tag_item_trait_ref);
12791276
}
12801277
encode_path(rbml_w, path.clone());
@@ -1298,7 +1295,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
12981295
pos: rbml_w.mark_stable_position(),
12991296
});
13001297

1301-
match ty::impl_or_trait_item(tcx, trait_item_def_id.def_id()) {
1298+
match tcx.impl_or_trait_item(trait_item_def_id.def_id()) {
13021299
ty::ConstTraitItem(ref associated_const) => {
13031300
encode_info_for_associated_const(ecx,
13041301
rbml_w,
@@ -1333,22 +1330,22 @@ fn encode_info_for_item(ecx: &EncodeContext,
13331330
encode_def_id(rbml_w, def_id);
13341331
encode_family(rbml_w, 'I');
13351332
encode_item_variances(rbml_w, ecx, item.id);
1336-
let trait_def = ty::lookup_trait_def(tcx, def_id);
1337-
let trait_predicates = ty::lookup_predicates(tcx, def_id);
1333+
let trait_def = tcx.lookup_trait_def(def_id);
1334+
let trait_predicates = tcx.lookup_predicates(def_id);
13381335
encode_unsafety(rbml_w, trait_def.unsafety);
13391336
encode_paren_sugar(rbml_w, trait_def.paren_sugar);
1340-
encode_defaulted(rbml_w, ty::trait_has_default_impl(tcx, def_id));
1337+
encode_defaulted(rbml_w, tcx.trait_has_default_impl(def_id));
13411338
encode_associated_type_names(rbml_w, &trait_def.associated_type_names);
13421339
encode_generics(rbml_w, ecx, &trait_def.generics, &trait_predicates,
13431340
tag_item_generics);
1344-
encode_predicates(rbml_w, ecx, &ty::lookup_super_predicates(tcx, def_id),
1341+
encode_predicates(rbml_w, ecx, &tcx.lookup_super_predicates(def_id),
13451342
tag_item_super_predicates);
13461343
encode_trait_ref(rbml_w, ecx, trait_def.trait_ref, tag_item_trait_ref);
13471344
encode_name(rbml_w, item.ident.name);
13481345
encode_attributes(rbml_w, &item.attrs);
13491346
encode_visibility(rbml_w, vis);
13501347
encode_stability(rbml_w, stab);
1351-
for &method_def_id in ty::trait_item_def_ids(tcx, def_id).iter() {
1348+
for &method_def_id in tcx.trait_item_def_ids(def_id).iter() {
13521349
rbml_w.start_tag(tag_item_trait_item);
13531350
match method_def_id {
13541351
ty::ConstTraitItemId(const_def_id) => {
@@ -1380,7 +1377,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
13801377
rbml_w.end_tag();
13811378

13821379
// Now output the trait item info for each trait item.
1383-
let r = ty::trait_item_def_ids(tcx, def_id);
1380+
let r = tcx.trait_item_def_ids(def_id);
13841381
for (i, &item_def_id) in r.iter().enumerate() {
13851382
assert_eq!(item_def_id.def_id().krate, ast::LOCAL_CRATE);
13861383

@@ -1397,7 +1394,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
13971394
encode_stability(rbml_w, stab);
13981395

13991396
let trait_item_type =
1400-
ty::impl_or_trait_item(tcx, item_def_id.def_id());
1397+
tcx.impl_or_trait_item(item_def_id.def_id());
14011398
let is_nonstatic_method;
14021399
match trait_item_type {
14031400
ty::ConstTraitItem(associated_const) => {

src/librustc/metadata/tydecode.rs

+19-19
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub use self::DefIdSource::*;
2121
use middle::region;
2222
use middle::subst;
2323
use middle::subst::VecPerParamSpace;
24-
use middle::ty::{self, ToPredicate, Ty};
24+
use middle::ty::{self, ToPredicate, Ty, HasTypeFlags};
2525

2626
use std::str;
2727
use syntax::abi;
@@ -471,14 +471,14 @@ fn parse_ty_<'a, 'tcx, F>(st: &mut PState<'a, 'tcx>, conv: &mut F) -> Ty<'tcx> w
471471
let def = parse_def_(st, NominalType, conv);
472472
let substs = parse_substs_(st, conv);
473473
assert_eq!(next(st), ']');
474-
return ty::mk_enum(tcx, def, st.tcx.mk_substs(substs));
474+
return tcx.mk_enum(def, st.tcx.mk_substs(substs));
475475
}
476476
'x' => {
477477
assert_eq!(next(st), '[');
478478
let trait_ref = ty::Binder(parse_trait_ref_(st, conv));
479479
let bounds = parse_existential_bounds_(st, conv);
480480
assert_eq!(next(st), ']');
481-
return ty::mk_trait(tcx, trait_ref, bounds);
481+
return tcx.mk_trait(trait_ref, bounds);
482482
}
483483
'p' => {
484484
assert_eq!(next(st), '[');
@@ -487,38 +487,38 @@ fn parse_ty_<'a, 'tcx, F>(st: &mut PState<'a, 'tcx>, conv: &mut F) -> Ty<'tcx> w
487487
let space = parse_param_space(st);
488488
assert_eq!(next(st), '|');
489489
let name = token::intern(&parse_str(st, ']'));
490-
return ty::mk_param(tcx, space, index, name);
490+
return tcx.mk_param(space, index, name);
491491
}
492-
'~' => return ty::mk_uniq(tcx, parse_ty_(st, conv)),
493-
'*' => return ty::mk_ptr(tcx, parse_mt_(st, conv)),
492+
'~' => return tcx.mk_box(parse_ty_(st, conv)),
493+
'*' => return tcx.mk_ptr(parse_mt_(st, conv)),
494494
'&' => {
495495
let r = parse_region_(st, conv);
496496
let mt = parse_mt_(st, conv);
497-
return ty::mk_rptr(tcx, tcx.mk_region(r), mt);
497+
return tcx.mk_ref(tcx.mk_region(r), mt);
498498
}
499499
'V' => {
500500
let t = parse_ty_(st, conv);
501-
let sz = parse_size(st);
502-
return ty::mk_vec(tcx, t, sz);
501+
return match parse_size(st) {
502+
Some(n) => tcx.mk_array(t, n),
503+
None => tcx.mk_slice(t)
504+
};
503505
}
504506
'v' => {
505-
return ty::mk_str(tcx);
507+
return tcx.mk_str();
506508
}
507509
'T' => {
508510
assert_eq!(next(st), '[');
509511
let mut params = Vec::new();
510512
while peek(st) != ']' { params.push(parse_ty_(st, conv)); }
511513
st.pos = st.pos + 1;
512-
return ty::mk_tup(tcx, params);
514+
return tcx.mk_tup(params);
513515
}
514516
'F' => {
515517
let def_id = parse_def_(st, NominalType, conv);
516-
return ty::mk_bare_fn(tcx, Some(def_id),
517-
tcx.mk_bare_fn(parse_bare_fn_ty_(st, conv)));
518+
return tcx.mk_fn(Some(def_id), tcx.mk_bare_fn(parse_bare_fn_ty_(st, conv)));
518519
}
519520
'G' => {
520-
return ty::mk_bare_fn(tcx, None,
521-
tcx.mk_bare_fn(parse_bare_fn_ty_(st, conv)));
521+
return tcx.mk_fn(None, tcx.mk_bare_fn(parse_bare_fn_ty_(st, conv)));
522522
}
523523
'#' => {
524524
let pos = parse_hex(st);
@@ -534,7 +534,7 @@ fn parse_ty_<'a, 'tcx, F>(st: &mut PState<'a, 'tcx>, conv: &mut F) -> Ty<'tcx> w
534534
// If there is a closure buried in the type some where, then we
535535
// need to re-convert any def ids (see case 'k', below). That means
536536
// we can't reuse the cached version.
537-
if !ty::type_has_ty_closure(tt) {
537+
if !tt.has_closure_types() {
538538
return tt;
539539
}
540540
}
@@ -558,20 +558,20 @@ fn parse_ty_<'a, 'tcx, F>(st: &mut PState<'a, 'tcx>, conv: &mut F) -> Ty<'tcx> w
558558
let did = parse_def_(st, NominalType, conv);
559559
let substs = parse_substs_(st, conv);
560560
assert_eq!(next(st), ']');
561-
return ty::mk_struct(st.tcx, did, st.tcx.mk_substs(substs));
561+
return st.tcx.mk_struct(did, st.tcx.mk_substs(substs));
562562
}
563563
'k' => {
564564
assert_eq!(next(st), '[');
565565
let did = parse_def_(st, ClosureSource, conv);
566566
let substs = parse_substs_(st, conv);
567567
assert_eq!(next(st), ']');
568-
return ty::mk_closure(st.tcx, did, st.tcx.mk_substs(substs));
568+
return st.tcx.mk_closure(did, st.tcx.mk_substs(substs));
569569
}
570570
'P' => {
571571
assert_eq!(next(st), '[');
572572
let trait_ref = parse_trait_ref_(st, conv);
573573
let name = token::intern(&parse_str(st, ']'));
574-
return ty::mk_projection(tcx, trait_ref, name);
574+
return tcx.mk_projection(trait_ref, name);
575575
}
576576
'e' => {
577577
return tcx.types.err;

src/librustc/middle/astconv_util.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ pub fn prim_ty_to_ty<'tcx>(tcx: &ty::ctxt<'tcx>,
4949
match nty {
5050
ast::TyBool => tcx.types.bool,
5151
ast::TyChar => tcx.types.char,
52-
ast::TyInt(it) => ty::mk_mach_int(tcx, it),
53-
ast::TyUint(uit) => ty::mk_mach_uint(tcx, uit),
54-
ast::TyFloat(ft) => ty::mk_mach_float(tcx, ft),
55-
ast::TyStr => ty::mk_str(tcx)
52+
ast::TyInt(it) => tcx.mk_mach_int(it),
53+
ast::TyUint(uit) => tcx.mk_mach_uint(uit),
54+
ast::TyFloat(ft) => tcx.mk_mach_float(ft),
55+
ast::TyStr => tcx.mk_str()
5656
}
5757
}
5858

src/librustc/middle/cast.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ impl<'tcx> CastTy<'tcx> {
6666
ty::TyInt(_) => Some(CastTy::Int(IntTy::I)),
6767
ty::TyUint(u) => Some(CastTy::Int(IntTy::U(u))),
6868
ty::TyFloat(_) => Some(CastTy::Float),
69-
ty::TyEnum(..) if ty::type_is_c_like_enum(
70-
tcx, t) => Some(CastTy::Int(IntTy::CEnum)),
69+
ty::TyEnum(..) if t.is_c_like_enum(tcx) =>
70+
Some(CastTy::Int(IntTy::CEnum)),
7171
ty::TyRawPtr(ref mt) => Some(CastTy::Ptr(mt)),
7272
ty::TyRef(_, ref mt) => Some(CastTy::RPtr(mt)),
7373
ty::TyBareFn(..) => Some(CastTy::FnPtr),

src/librustc/middle/cfg/construct.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -411,14 +411,14 @@ impl<'a, 'tcx> CFGBuilder<'a, 'tcx> {
411411
func_or_rcvr: &ast::Expr,
412412
args: I) -> CFGIndex {
413413
let method_call = ty::MethodCall::expr(call_expr.id);
414-
let return_ty = ty::ty_fn_ret(match self.tcx.method_map.borrow().get(&method_call) {
414+
let fn_ty = match self.tcx.method_map.borrow().get(&method_call) {
415415
Some(method) => method.ty,
416-
None => ty::expr_ty_adjusted(self.tcx, func_or_rcvr)
417-
});
416+
None => self.tcx.expr_ty_adjusted(func_or_rcvr)
417+
};
418418

419419
let func_or_rcvr_exit = self.expr(func_or_rcvr, pred);
420420
let ret = self.straightline(call_expr, func_or_rcvr_exit, args);
421-
if return_ty.diverges() {
421+
if fn_ty.fn_ret().diverges() {
422422
self.add_unreachable_node()
423423
} else {
424424
ret

0 commit comments

Comments
 (0)