Skip to content

Commit bd6683c

Browse files
committed
auto merge of #14702 : nikomatsakis/rust/issue-5527-namespace-substs-b, r=pnkfelix
Separate out initial refactorings for PR #14604
2 parents 8a41485 + 4a51e9c commit bd6683c

Some content is hidden

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

71 files changed

+1019
-934
lines changed

src/librustc/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ extern crate time;
4646
extern crate log;
4747

4848
pub mod middle {
49+
pub mod def;
4950
pub mod trans;
5051
pub mod ty;
5152
pub mod ty_fold;

src/librustc/metadata/decoder.rs

+17-16
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use metadata::tydecode::{parse_ty_data, parse_def_id,
2222
parse_type_param_def_data,
2323
parse_bare_fn_ty_data, parse_trait_ref_data};
2424
use middle::lang_items;
25+
use middle::def;
2526
use middle::ty::{ImplContainer, TraitContainer};
2627
use middle::ty;
2728
use middle::typeck;
@@ -333,11 +334,11 @@ fn item_to_def_like(item: ebml::Doc, did: ast::DefId, cnum: ast::CrateNum)
333334
-> DefLike {
334335
let fam = item_family(item);
335336
match fam {
336-
ImmStatic => DlDef(ast::DefStatic(did, false)),
337-
MutStatic => DlDef(ast::DefStatic(did, true)),
338-
Struct => DlDef(ast::DefStruct(did)),
339-
UnsafeFn => DlDef(ast::DefFn(did, ast::UnsafeFn)),
340-
Fn => DlDef(ast::DefFn(did, ast::NormalFn)),
337+
ImmStatic => DlDef(def::DefStatic(did, false)),
338+
MutStatic => DlDef(def::DefStatic(did, true)),
339+
Struct => DlDef(def::DefStruct(did)),
340+
UnsafeFn => DlDef(def::DefFn(did, ast::UnsafeFn)),
341+
Fn => DlDef(def::DefFn(did, ast::NormalFn)),
341342
StaticMethod | UnsafeStaticMethod => {
342343
let fn_style = if fam == UnsafeStaticMethod { ast::UnsafeFn } else
343344
{ ast::NormalFn };
@@ -348,27 +349,27 @@ fn item_to_def_like(item: ebml::Doc, did: ast::DefId, cnum: ast::CrateNum)
348349
// a trait_method_sort.
349350
let provenance = if reader::maybe_get_doc(
350351
item, tag_item_trait_method_sort).is_some() {
351-
ast::FromTrait(item_reqd_and_translated_parent_item(cnum,
352+
def::FromTrait(item_reqd_and_translated_parent_item(cnum,
352353
item))
353354
} else {
354-
ast::FromImpl(item_reqd_and_translated_parent_item(cnum,
355+
def::FromImpl(item_reqd_and_translated_parent_item(cnum,
355356
item))
356357
};
357-
DlDef(ast::DefStaticMethod(did, provenance, fn_style))
358+
DlDef(def::DefStaticMethod(did, provenance, fn_style))
358359
}
359-
Type | ForeignType => DlDef(ast::DefTy(did)),
360-
Mod => DlDef(ast::DefMod(did)),
361-
ForeignMod => DlDef(ast::DefForeignMod(did)),
360+
Type | ForeignType => DlDef(def::DefTy(did)),
361+
Mod => DlDef(def::DefMod(did)),
362+
ForeignMod => DlDef(def::DefForeignMod(did)),
362363
StructVariant => {
363364
let enum_did = item_reqd_and_translated_parent_item(cnum, item);
364-
DlDef(ast::DefVariant(enum_did, did, true))
365+
DlDef(def::DefVariant(enum_did, did, true))
365366
}
366367
TupleVariant => {
367368
let enum_did = item_reqd_and_translated_parent_item(cnum, item);
368-
DlDef(ast::DefVariant(enum_did, did, false))
369+
DlDef(def::DefVariant(enum_did, did, false))
369370
}
370-
Trait => DlDef(ast::DefTrait(did)),
371-
Enum => DlDef(ast::DefTy(did)),
371+
Trait => DlDef(def::DefTrait(did)),
372+
Enum => DlDef(def::DefTy(did)),
372373
Impl => DlImpl(did),
373374
PublicField | InheritedField => DlField,
374375
}
@@ -459,7 +460,7 @@ pub fn get_symbol(data: &[u8], id: ast::NodeId) -> String {
459460
// Something that a name can resolve to.
460461
#[deriving(Clone)]
461462
pub enum DefLike {
462-
DlDef(ast::Def),
463+
DlDef(def::Def),
463464
DlImpl(ast::DefId),
464465
DlField
465466
}

src/librustc/metadata/encoder.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1631,7 +1631,7 @@ impl<'a,'b,'c> Visitor<()> for ImplVisitor<'a,'b,'c> {
16311631
ItemImpl(_, Some(ref trait_ref), _, _) => {
16321632
let def_map = &self.ecx.tcx.def_map;
16331633
let trait_def = def_map.borrow().get_copy(&trait_ref.ref_id);
1634-
let def_id = ast_util::def_id_of_def(trait_def);
1634+
let def_id = trait_def.def_id();
16351635

16361636
// Load eagerly if this is an implementation of the Drop trait
16371637
// or if the trait is not defined in this crate.

src/librustc/metadata/tydecode.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#![allow(non_camel_case_types)]
1818

19+
use middle::subst;
1920
use middle::ty;
2021

2122
use std::rc::Rc;
@@ -25,7 +26,6 @@ use std::uint;
2526
use syntax::abi;
2627
use syntax::ast;
2728
use syntax::ast::*;
28-
use syntax::owned_slice::OwnedSlice;
2929
use syntax::parse::token;
3030

3131
// Compact string representation for ty::t values. API ty_str &
@@ -133,7 +133,7 @@ pub fn parse_trait_ref_data(data: &[u8], crate_num: ast::CrateNum, pos: uint, tc
133133
}
134134

135135
pub fn parse_substs_data(data: &[u8], crate_num: ast::CrateNum, pos: uint, tcx: &ty::ctxt,
136-
conv: conv_did) -> ty::substs {
136+
conv: conv_did) -> subst::Substs {
137137
let mut st = parse_state_from_data(data, crate_num, pos, tcx);
138138
parse_substs(&mut st, conv)
139139
}
@@ -162,7 +162,7 @@ fn parse_trait_store(st: &mut PState, conv: conv_did) -> ty::TraitStore {
162162
}
163163
}
164164

165-
fn parse_substs(st: &mut PState, conv: conv_did) -> ty::substs {
165+
fn parse_substs(st: &mut PState, conv: conv_did) -> subst::Substs {
166166
let regions = parse_region_substs(st, |x,y| conv(x,y));
167167

168168
let self_ty = parse_opt(st, |st| parse_ty(st, |x,y| conv(x,y)) );
@@ -172,24 +172,24 @@ fn parse_substs(st: &mut PState, conv: conv_did) -> ty::substs {
172172
while peek(st) != ']' { params.push(parse_ty(st, |x,y| conv(x,y))); }
173173
st.pos = st.pos + 1u;
174174

175-
return ty::substs {
175+
return subst::Substs {
176176
regions: regions,
177177
self_ty: self_ty,
178178
tps: params
179179
};
180180
}
181181

182-
fn parse_region_substs(st: &mut PState, conv: conv_did) -> ty::RegionSubsts {
182+
fn parse_region_substs(st: &mut PState, conv: conv_did) -> subst::RegionSubsts {
183183
match next(st) {
184-
'e' => ty::ErasedRegions,
184+
'e' => subst::ErasedRegions,
185185
'n' => {
186186
let mut regions = vec!();
187187
while peek(st) != '.' {
188188
let r = parse_region(st, |x,y| conv(x,y));
189189
regions.push(r);
190190
}
191191
assert_eq!(next(st), '.');
192-
ty::NonerasedRegions(OwnedSlice::from_vec(regions))
192+
subst::NonerasedRegions(regions)
193193
}
194194
_ => fail!("parse_bound_region: bad input")
195195
}

src/librustc/metadata/tyencode.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use std::cell::RefCell;
1717
use std::collections::HashMap;
1818
use std::io::MemWriter;
1919

20+
use middle::subst;
2021
use middle::ty::param_ty;
2122
use middle::ty;
2223

@@ -96,20 +97,20 @@ fn enc_opt<T>(w: &mut MemWriter, t: Option<T>, enc_f: |&mut MemWriter, T|) {
9697
}
9798
}
9899

99-
pub fn enc_substs(w: &mut MemWriter, cx: &ctxt, substs: &ty::substs) {
100+
pub fn enc_substs(w: &mut MemWriter, cx: &ctxt, substs: &subst::Substs) {
100101
enc_region_substs(w, cx, &substs.regions);
101102
enc_opt(w, substs.self_ty, |w, t| enc_ty(w, cx, t));
102103
mywrite!(w, "[");
103104
for t in substs.tps.iter() { enc_ty(w, cx, *t); }
104105
mywrite!(w, "]");
105106
}
106107

107-
fn enc_region_substs(w: &mut MemWriter, cx: &ctxt, substs: &ty::RegionSubsts) {
108+
fn enc_region_substs(w: &mut MemWriter, cx: &ctxt, substs: &subst::RegionSubsts) {
108109
match *substs {
109-
ty::ErasedRegions => {
110+
subst::ErasedRegions => {
110111
mywrite!(w, "e");
111112
}
112-
ty::NonerasedRegions(ref regions) => {
113+
subst::NonerasedRegions(ref regions) => {
113114
mywrite!(w, "n");
114115
for &r in regions.iter() {
115116
enc_region(w, cx, r);

src/librustc/middle/astencode.rs

+42-40
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ use c = metadata::common;
1616
use cstore = metadata::cstore;
1717
use driver::session::Session;
1818
use metadata::decoder;
19+
use middle::def;
1920
use e = metadata::encoder;
2021
use middle::freevars::freevar_entry;
2122
use middle::region;
2223
use metadata::tydecode;
2324
use metadata::tydecode::{DefIdSource, NominalType, TypeWithId, TypeParameter,
2425
RegionParameter};
2526
use metadata::tyencode;
27+
use middle::subst;
2628
use middle::typeck::{MethodCall, MethodCallee, MethodOrigin};
2729
use middle::{ty, typeck};
2830
use util::ppaux::ty_to_str;
@@ -394,58 +396,58 @@ fn renumber_and_map_ast(xcx: &ExtendedDecodeContext,
394396
// ______________________________________________________________________
395397
// Encoding and decoding of ast::def
396398

397-
fn decode_def(xcx: &ExtendedDecodeContext, doc: ebml::Doc) -> ast::Def {
399+
fn decode_def(xcx: &ExtendedDecodeContext, doc: ebml::Doc) -> def::Def {
398400
let mut dsr = reader::Decoder::new(doc);
399-
let def: ast::Def = Decodable::decode(&mut dsr).unwrap();
401+
let def: def::Def = Decodable::decode(&mut dsr).unwrap();
400402
def.tr(xcx)
401403
}
402404

403-
impl tr for ast::Def {
404-
fn tr(&self, xcx: &ExtendedDecodeContext) -> ast::Def {
405+
impl tr for def::Def {
406+
fn tr(&self, xcx: &ExtendedDecodeContext) -> def::Def {
405407
match *self {
406-
ast::DefFn(did, p) => ast::DefFn(did.tr(xcx), p),
407-
ast::DefStaticMethod(did, wrapped_did2, p) => {
408-
ast::DefStaticMethod(did.tr(xcx),
408+
def::DefFn(did, p) => def::DefFn(did.tr(xcx), p),
409+
def::DefStaticMethod(did, wrapped_did2, p) => {
410+
def::DefStaticMethod(did.tr(xcx),
409411
match wrapped_did2 {
410-
ast::FromTrait(did2) => {
411-
ast::FromTrait(did2.tr(xcx))
412+
def::FromTrait(did2) => {
413+
def::FromTrait(did2.tr(xcx))
412414
}
413-
ast::FromImpl(did2) => {
414-
ast::FromImpl(did2.tr(xcx))
415+
def::FromImpl(did2) => {
416+
def::FromImpl(did2.tr(xcx))
415417
}
416418
},
417419
p)
418420
}
419-
ast::DefMethod(did0, did1) => {
420-
ast::DefMethod(did0.tr(xcx), did1.map(|did1| did1.tr(xcx)))
421+
def::DefMethod(did0, did1) => {
422+
def::DefMethod(did0.tr(xcx), did1.map(|did1| did1.tr(xcx)))
421423
}
422-
ast::DefSelfTy(nid) => { ast::DefSelfTy(xcx.tr_id(nid)) }
423-
ast::DefMod(did) => { ast::DefMod(did.tr(xcx)) }
424-
ast::DefForeignMod(did) => { ast::DefForeignMod(did.tr(xcx)) }
425-
ast::DefStatic(did, m) => { ast::DefStatic(did.tr(xcx), m) }
426-
ast::DefArg(nid, b) => { ast::DefArg(xcx.tr_id(nid), b) }
427-
ast::DefLocal(nid, b) => { ast::DefLocal(xcx.tr_id(nid), b) }
428-
ast::DefVariant(e_did, v_did, is_s) => {
429-
ast::DefVariant(e_did.tr(xcx), v_did.tr(xcx), is_s)
424+
def::DefSelfTy(nid) => { def::DefSelfTy(xcx.tr_id(nid)) }
425+
def::DefMod(did) => { def::DefMod(did.tr(xcx)) }
426+
def::DefForeignMod(did) => { def::DefForeignMod(did.tr(xcx)) }
427+
def::DefStatic(did, m) => { def::DefStatic(did.tr(xcx), m) }
428+
def::DefArg(nid, b) => { def::DefArg(xcx.tr_id(nid), b) }
429+
def::DefLocal(nid, b) => { def::DefLocal(xcx.tr_id(nid), b) }
430+
def::DefVariant(e_did, v_did, is_s) => {
431+
def::DefVariant(e_did.tr(xcx), v_did.tr(xcx), is_s)
430432
},
431-
ast::DefTrait(did) => ast::DefTrait(did.tr(xcx)),
432-
ast::DefTy(did) => ast::DefTy(did.tr(xcx)),
433-
ast::DefPrimTy(p) => ast::DefPrimTy(p),
434-
ast::DefTyParam(did, v) => ast::DefTyParam(did.tr(xcx), v),
435-
ast::DefBinding(nid, bm) => ast::DefBinding(xcx.tr_id(nid), bm),
436-
ast::DefUse(did) => ast::DefUse(did.tr(xcx)),
437-
ast::DefUpvar(nid1, def, nid2, nid3) => {
438-
ast::DefUpvar(xcx.tr_id(nid1),
433+
def::DefTrait(did) => def::DefTrait(did.tr(xcx)),
434+
def::DefTy(did) => def::DefTy(did.tr(xcx)),
435+
def::DefPrimTy(p) => def::DefPrimTy(p),
436+
def::DefTyParam(did, v) => def::DefTyParam(did.tr(xcx), v),
437+
def::DefBinding(nid, bm) => def::DefBinding(xcx.tr_id(nid), bm),
438+
def::DefUse(did) => def::DefUse(did.tr(xcx)),
439+
def::DefUpvar(nid1, def, nid2, nid3) => {
440+
def::DefUpvar(xcx.tr_id(nid1),
439441
@(*def).tr(xcx),
440442
xcx.tr_id(nid2),
441443
xcx.tr_id(nid3))
442444
}
443-
ast::DefStruct(did) => ast::DefStruct(did.tr(xcx)),
444-
ast::DefRegion(nid) => ast::DefRegion(xcx.tr_id(nid)),
445-
ast::DefTyParamBinder(nid) => {
446-
ast::DefTyParamBinder(xcx.tr_id(nid))
445+
def::DefStruct(did) => def::DefStruct(did.tr(xcx)),
446+
def::DefRegion(nid) => def::DefRegion(xcx.tr_id(nid)),
447+
def::DefTyParamBinder(nid) => {
448+
def::DefTyParamBinder(xcx.tr_id(nid))
447449
}
448-
ast::DefLabel(nid) => ast::DefLabel(xcx.tr_id(nid))
450+
def::DefLabel(nid) => def::DefLabel(xcx.tr_id(nid))
449451
}
450452
}
451453
}
@@ -796,7 +798,7 @@ trait ebml_writer_helpers {
796798
fn emit_tpbt(&mut self,
797799
ecx: &e::EncodeContext,
798800
tpbt: ty::ty_param_bounds_and_ty);
799-
fn emit_substs(&mut self, ecx: &e::EncodeContext, substs: &ty::substs);
801+
fn emit_substs(&mut self, ecx: &e::EncodeContext, substs: &subst::Substs);
800802
fn emit_auto_adjustment(&mut self, ecx: &e::EncodeContext, adj: &ty::AutoAdjustment);
801803
}
802804

@@ -842,7 +844,7 @@ impl<'a> ebml_writer_helpers for Encoder<'a> {
842844
});
843845
}
844846

845-
fn emit_substs(&mut self, ecx: &e::EncodeContext, substs: &ty::substs) {
847+
fn emit_substs(&mut self, ecx: &e::EncodeContext, substs: &subst::Substs) {
846848
self.emit_opaque(|this| Ok(tyencode::enc_substs(this.writer,
847849
&ecx.ty_str_ctxt(),
848850
substs)));
@@ -1076,7 +1078,7 @@ trait ebml_decoder_decoder_helpers {
10761078
-> ty::TypeParameterDef;
10771079
fn read_ty_param_bounds_and_ty(&mut self, xcx: &ExtendedDecodeContext)
10781080
-> ty::ty_param_bounds_and_ty;
1079-
fn read_substs(&mut self, xcx: &ExtendedDecodeContext) -> ty::substs;
1081+
fn read_substs(&mut self, xcx: &ExtendedDecodeContext) -> subst::Substs;
10801082
fn read_auto_adjustment(&mut self, xcx: &ExtendedDecodeContext) -> ty::AutoAdjustment;
10811083
fn convert_def_id(&mut self,
10821084
xcx: &ExtendedDecodeContext,
@@ -1093,7 +1095,7 @@ trait ebml_decoder_decoder_helpers {
10931095
cdata: &cstore::crate_metadata) -> Vec<ty::t>;
10941096
fn read_substs_noxcx(&mut self, tcx: &ty::ctxt,
10951097
cdata: &cstore::crate_metadata)
1096-
-> ty::substs;
1098+
-> subst::Substs;
10971099
}
10981100

10991101
impl<'a> ebml_decoder_decoder_helpers for reader::Decoder<'a> {
@@ -1121,7 +1123,7 @@ impl<'a> ebml_decoder_decoder_helpers for reader::Decoder<'a> {
11211123
fn read_substs_noxcx(&mut self,
11221124
tcx: &ty::ctxt,
11231125
cdata: &cstore::crate_metadata)
1124-
-> ty::substs
1126+
-> subst::Substs
11251127
{
11261128
self.read_opaque(|_, doc| {
11271129
Ok(tydecode::parse_substs_data(
@@ -1210,7 +1212,7 @@ impl<'a> ebml_decoder_decoder_helpers for reader::Decoder<'a> {
12101212
}).unwrap()
12111213
}
12121214

1213-
fn read_substs(&mut self, xcx: &ExtendedDecodeContext) -> ty::substs {
1215+
fn read_substs(&mut self, xcx: &ExtendedDecodeContext) -> subst::Substs {
12141216
self.read_opaque(|this, doc| {
12151217
Ok(tydecode::parse_substs_data(doc.data,
12161218
xcx.dcx.cdata.cnum,

src/librustc/middle/borrowck/mod.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
use middle::dataflow::DataFlowContext;
1616
use middle::dataflow::DataFlowOperator;
17+
use middle::def;
1718
use euv = middle::expr_use_visitor;
1819
use mc = middle::mem_categorization;
1920
use middle::ty;
@@ -399,7 +400,7 @@ impl<'a> BorrowckCtxt<'a> {
399400
id: ast::NodeId,
400401
span: Span,
401402
ty: ty::t,
402-
def: ast::Def)
403+
def: def::Def)
403404
-> mc::cmt {
404405
match self.mc().cat_def(id, span, ty, def) {
405406
Ok(c) => c,
@@ -412,11 +413,11 @@ impl<'a> BorrowckCtxt<'a> {
412413
pub fn cat_captured_var(&self,
413414
closure_id: ast::NodeId,
414415
closure_span: Span,
415-
upvar_def: ast::Def)
416+
upvar_def: def::Def)
416417
-> mc::cmt {
417418
// Create the cmt for the variable being borrowed, from the
418419
// caller's perspective
419-
let var_id = ast_util::def_id_of_def(upvar_def).node;
420+
let var_id = upvar_def.def_id().node;
420421
let var_ty = ty::node_id_to_type(self.tcx, var_id);
421422
self.cat_def(closure_id, closure_span, var_ty, upvar_def)
422423
}

src/librustc/middle/cfg/construct.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// except according to those terms.
1010

1111
use middle::cfg::*;
12+
use middle::def;
1213
use middle::graph;
1314
use middle::typeck;
1415
use middle::ty;
@@ -531,7 +532,7 @@ impl<'a> CFGBuilder<'a> {
531532

532533
Some(_) => {
533534
match self.tcx.def_map.borrow().find(&expr.id) {
534-
Some(&ast::DefLabel(loop_id)) => {
535+
Some(&def::DefLabel(loop_id)) => {
535536
for l in self.loop_scopes.iter() {
536537
if l.loop_id == loop_id {
537538
return *l;

0 commit comments

Comments
 (0)