Skip to content

Commit f480686

Browse files
committed
Merge remote-tracking branch 'sstewartgallus/cleanup_middle' into incoming
2 parents 30f8621 + 0f55c9c commit f480686

File tree

4 files changed

+128
-163
lines changed

4 files changed

+128
-163
lines changed

src/librustc/metadata/common.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
1+
// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
22
// file at the top-level directory of this distribution and at
33
// http://rust-lang.org/COPYRIGHT.
44
//
@@ -7,7 +7,8 @@
77
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
10-
10+
use core::prelude::*;
11+
use core::cast;
1112

1213
// EBML enum definitions and utils shared by the encoder and decoder
1314

@@ -111,6 +112,7 @@ pub static tag_items_data_item_reexport_def_id: uint = 0x4e;
111112
pub static tag_items_data_item_reexport_name: uint = 0x4f;
112113

113114
// used to encode crate_ctxt side tables
115+
#[deriving(Eq)]
114116
pub enum astencode_tag { // Reserves 0x50 -- 0x6f
115117
tag_ast = 0x50,
116118

@@ -136,6 +138,16 @@ pub enum astencode_tag { // Reserves 0x50 -- 0x6f
136138
tag_table_moves_map = 0x63,
137139
tag_table_capture_map = 0x64
138140
}
141+
static first_astencode_tag : uint = tag_ast as uint;
142+
static last_astencode_tag : uint = tag_table_capture_map as uint;
143+
impl astencode_tag {
144+
pub fn from_uint(value : uint) -> Option<astencode_tag> {
145+
let is_a_tag = first_astencode_tag <= value && value <= last_astencode_tag;
146+
if !is_a_tag { None } else {
147+
Some(unsafe { cast::transmute(value as int) })
148+
}
149+
}
150+
}
139151

140152
pub static tag_item_trait_method_sort: uint = 0x70;
141153

src/librustc/middle/astencode.rs

Lines changed: 89 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
1+
// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
22
// file at the top-level directory of this distribution and at
33
// http://rust-lang.org/COPYRIGHT.
44
//
@@ -319,15 +319,10 @@ fn simplify_ast(ii: &ast::inlined_item) -> ast::inlined_item {
319319
});
320320

321321
match *ii {
322-
ast::ii_item(i) => {
323-
ast::ii_item(fld.fold_item(i).get()) //hack: we're not dropping items
324-
}
325-
ast::ii_method(d, m) => {
326-
ast::ii_method(d, fld.fold_method(m))
327-
}
328-
ast::ii_foreign(i) => {
329-
ast::ii_foreign(fld.fold_foreign_item(i))
330-
}
322+
//hack: we're not dropping items
323+
ast::ii_item(i) => ast::ii_item(fld.fold_item(i).get()),
324+
ast::ii_method(d, m) => ast::ii_method(d, fld.fold_method(m)),
325+
ast::ii_foreign(i) => ast::ii_foreign(fld.fold_foreign_item(i))
331326
}
332327
}
333328

@@ -346,16 +341,10 @@ fn renumber_ast(xcx: @ExtendedDecodeContext, ii: ast::inlined_item)
346341
});
347342

348343
match ii {
349-
ast::ii_item(i) => {
350-
ast::ii_item(fld.fold_item(i).get())
351-
}
352-
ast::ii_method(d, m) => {
353-
ast::ii_method(xcx.tr_def_id(d), fld.fold_method(m))
354-
}
355-
ast::ii_foreign(i) => {
356-
ast::ii_foreign(fld.fold_foreign_item(i))
357-
}
358-
}
344+
ast::ii_item(i) => ast::ii_item(fld.fold_item(i).get()),
345+
ast::ii_method(d, m) => ast::ii_method(xcx.tr_def_id(d), fld.fold_method(m)),
346+
ast::ii_foreign(i) => ast::ii_foreign(fld.fold_foreign_item(i)),
347+
}
359348
}
360349

361350
// ______________________________________________________________________
@@ -374,22 +363,22 @@ fn decode_def(xcx: @ExtendedDecodeContext, doc: ebml::Doc) -> ast::def {
374363
impl tr for ast::def {
375364
fn tr(&self, xcx: @ExtendedDecodeContext) -> ast::def {
376365
match *self {
377-
ast::def_fn(did, p) => { ast::def_fn(did.tr(xcx), p) }
366+
ast::def_fn(did, p) => ast::def_fn(did.tr(xcx), p),
378367
ast::def_static_method(did, did2_opt, p) => {
379368
ast::def_static_method(did.tr(xcx),
380369
did2_opt.map(|did2| did2.tr(xcx)),
381370
p)
382-
}
383-
ast::def_self_ty(nid) => { ast::def_self_ty(xcx.tr_id(nid)) }
384-
ast::def_self(nid, i) => { ast::def_self(xcx.tr_id(nid), i) }
385-
ast::def_mod(did) => { ast::def_mod(did.tr(xcx)) }
386-
ast::def_foreign_mod(did) => { ast::def_foreign_mod(did.tr(xcx)) }
387-
ast::def_const(did) => { ast::def_const(did.tr(xcx)) }
388-
ast::def_arg(nid, b) => { ast::def_arg(xcx.tr_id(nid), b) }
389-
ast::def_local(nid, b) => { ast::def_local(xcx.tr_id(nid), b) }
371+
},
372+
ast::def_self_ty(nid) => ast::def_self_ty(xcx.tr_id(nid)),
373+
ast::def_self(nid, i) => ast::def_self(xcx.tr_id(nid), i),
374+
ast::def_mod(did) => ast::def_mod(did.tr(xcx)),
375+
ast::def_foreign_mod(did) => ast::def_foreign_mod(did.tr(xcx)),
376+
ast::def_const(did) => ast::def_const(did.tr(xcx)),
377+
ast::def_arg(nid, b) => ast::def_arg(xcx.tr_id(nid), b),
378+
ast::def_local(nid, b) => ast::def_local(xcx.tr_id(nid), b),
390379
ast::def_variant(e_did, v_did) => {
391380
ast::def_variant(e_did.tr(xcx), v_did.tr(xcx))
392-
}
381+
},
393382
ast::def_trait(did) => ast::def_trait(did.tr(xcx)),
394383
ast::def_ty(did) => ast::def_ty(did.tr(xcx)),
395384
ast::def_prim_ty(p) => ast::def_prim_ty(p),
@@ -402,9 +391,7 @@ impl tr for ast::def {
402391
xcx.tr_id(nid2),
403392
xcx.tr_id(nid3))
404393
}
405-
ast::def_struct(did) => {
406-
ast::def_struct(did.tr(xcx))
407-
}
394+
ast::def_struct(did) => ast::def_struct(did.tr(xcx)),
408395
ast::def_region(nid) => ast::def_region(xcx.tr_id(nid)),
409396
ast::def_typaram_binder(nid) => {
410397
ast::def_typaram_binder(xcx.tr_id(nid))
@@ -419,12 +406,9 @@ impl tr for ast::def {
419406

420407
impl tr for ty::AutoAdjustment {
421408
fn tr(&self, xcx: @ExtendedDecodeContext) -> ty::AutoAdjustment {
422-
match self {
423-
&ty::AutoAddEnv(r, s) => {
424-
ty::AutoAddEnv(r.tr(xcx), s)
425-
}
426-
427-
&ty::AutoDerefRef(ref adr) => {
409+
match *self {
410+
ty::AutoAddEnv(r, s) => ty::AutoAddEnv(r.tr(xcx), s),
411+
ty::AutoDerefRef(ref adr) => {
428412
ty::AutoDerefRef(ty::AutoDerefRef {
429413
autoderefs: adr.autoderefs,
430414
autoref: adr.autoref.map(|ar| ar.tr(xcx)),
@@ -1110,56 +1094,75 @@ fn decode_side_tables(xcx: @ExtendedDecodeContext,
11101094
found for id %d (orig %d)",
11111095
tag, id, id0);
11121096

1113-
if tag == (c::tag_table_moves_map as uint) {
1114-
dcx.maps.moves_map.insert(id);
1115-
} else {
1116-
let val_doc = entry_doc.get(c::tag_table_val as uint);
1117-
let mut val_dsr = reader::Decoder(val_doc);
1118-
let val_dsr = &mut val_dsr;
1119-
if tag == (c::tag_table_def as uint) {
1120-
let def = decode_def(xcx, val_doc);
1121-
dcx.tcx.def_map.insert(id, def);
1122-
} else if tag == (c::tag_table_node_type as uint) {
1123-
let ty = val_dsr.read_ty(xcx);
1124-
debug!("inserting ty for node %?: %s",
1125-
id, ty_to_str(dcx.tcx, ty));
1126-
dcx.tcx.node_types.insert(id as uint, ty);
1127-
} else if tag == (c::tag_table_node_type_subst as uint) {
1128-
let tys = val_dsr.read_tys(xcx);
1129-
dcx.tcx.node_type_substs.insert(id, tys);
1130-
} else if tag == (c::tag_table_freevars as uint) {
1131-
let fv_info = @val_dsr.read_to_vec(|val_dsr| {
1132-
@val_dsr.read_freevar_entry(xcx)
1133-
});
1134-
dcx.tcx.freevars.insert(id, fv_info);
1135-
} else if tag == (c::tag_table_tcache as uint) {
1136-
let tpbt = val_dsr.read_ty_param_bounds_and_ty(xcx);
1137-
let lid = ast::def_id { crate: ast::local_crate, node: id };
1138-
dcx.tcx.tcache.insert(lid, tpbt);
1139-
} else if tag == (c::tag_table_param_defs as uint) {
1140-
let bounds = val_dsr.read_type_param_def(xcx);
1141-
dcx.tcx.ty_param_defs.insert(id, bounds);
1142-
} else if tag == (c::tag_table_method_map as uint) {
1143-
dcx.maps.method_map.insert(
1144-
id,
1145-
val_dsr.read_method_map_entry(xcx));
1146-
} else if tag == (c::tag_table_vtable_map as uint) {
1147-
dcx.maps.vtable_map.insert(id,
1148-
val_dsr.read_vtable_res(xcx));
1149-
} else if tag == (c::tag_table_adjustments as uint) {
1150-
let adj: @ty::AutoAdjustment = @Decodable::decode(val_dsr);
1151-
adj.tr(xcx);
1152-
dcx.tcx.adjustments.insert(id, adj);
1153-
} else if tag == (c::tag_table_capture_map as uint) {
1154-
let cvars =
1155-
at_vec::to_managed_consume(
1156-
val_dsr.read_to_vec(
1157-
|val_dsr| val_dsr.read_capture_var(xcx)));
1158-
dcx.maps.capture_map.insert(id, cvars);
1159-
} else {
1097+
match c::astencode_tag::from_uint(tag) {
1098+
None => {
11601099
xcx.dcx.tcx.sess.bug(
11611100
fmt!("unknown tag found in side tables: %x", tag));
11621101
}
1102+
Some(value) => if value == c::tag_table_moves_map {
1103+
dcx.maps.moves_map.insert(id);
1104+
} else {
1105+
let val_doc = entry_doc.get(c::tag_table_val as uint);
1106+
let mut val_dsr = reader::Decoder(val_doc);
1107+
let val_dsr = &mut val_dsr;
1108+
1109+
match value {
1110+
c::tag_table_def => {
1111+
let def = decode_def(xcx, val_doc);
1112+
dcx.tcx.def_map.insert(id, def);
1113+
}
1114+
c::tag_table_node_type => {
1115+
let ty = val_dsr.read_ty(xcx);
1116+
debug!("inserting ty for node %?: %s",
1117+
id, ty_to_str(dcx.tcx, ty));
1118+
dcx.tcx.node_types.insert(id as uint, ty);
1119+
}
1120+
c::tag_table_node_type_subst => {
1121+
let tys = val_dsr.read_tys(xcx);
1122+
dcx.tcx.node_type_substs.insert(id, tys);
1123+
}
1124+
c::tag_table_freevars => {
1125+
let fv_info = @val_dsr.read_to_vec(|val_dsr| {
1126+
@val_dsr.read_freevar_entry(xcx)
1127+
});
1128+
dcx.tcx.freevars.insert(id, fv_info);
1129+
}
1130+
c::tag_table_tcache => {
1131+
let tpbt = val_dsr.read_ty_param_bounds_and_ty(xcx);
1132+
let lid = ast::def_id { crate: ast::local_crate, node: id };
1133+
dcx.tcx.tcache.insert(lid, tpbt);
1134+
}
1135+
c::tag_table_param_defs => {
1136+
let bounds = val_dsr.read_type_param_def(xcx);
1137+
dcx.tcx.ty_param_defs.insert(id, bounds);
1138+
}
1139+
c::tag_table_method_map => {
1140+
dcx.maps.method_map.insert(
1141+
id,
1142+
val_dsr.read_method_map_entry(xcx));
1143+
}
1144+
c::tag_table_vtable_map => {
1145+
dcx.maps.vtable_map.insert(id,
1146+
val_dsr.read_vtable_res(xcx));
1147+
}
1148+
c::tag_table_adjustments => {
1149+
let adj: @ty::AutoAdjustment = @Decodable::decode(val_dsr);
1150+
adj.tr(xcx);
1151+
dcx.tcx.adjustments.insert(id, adj);
1152+
}
1153+
c::tag_table_capture_map => {
1154+
let cvars =
1155+
at_vec::to_managed_consume(
1156+
val_dsr.read_to_vec(
1157+
|val_dsr| val_dsr.read_capture_var(xcx)));
1158+
dcx.maps.capture_map.insert(id, cvars);
1159+
}
1160+
_ => {
1161+
xcx.dcx.tcx.sess.bug(
1162+
fmt!("unknown tag found in side tables: %x", tag));
1163+
}
1164+
}
1165+
}
11631166
}
11641167

11651168
debug!(">< Side table doc loaded");

src/librustc/middle/check_const.rs

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
1+
// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
22
// file at the top-level directory of this distribution and at
33
// http://rust-lang.org/COPYRIGHT.
44
//
@@ -235,22 +235,17 @@ pub fn check_item_recursion(sess: Session,
235235

236236
fn visit_expr(e: @expr, (env, v): (env, visit::vt<env>)) {
237237
match e.node {
238-
expr_path(*) => {
239-
match env.def_map.find(&e.id) {
240-
Some(&def_const(def_id)) => {
241-
if ast_util::is_local(def_id) {
242-
match env.ast_map.get_copy(&def_id.node) {
243-
ast_map::node_item(it, _) => {
244-
(v.visit_item)(it, (env, v));
245-
}
246-
_ => fail!("const not bound to an item")
247-
}
248-
}
249-
}
250-
_ => ()
251-
}
252-
}
253-
_ => ()
238+
expr_path(*) => match env.def_map.find(&e.id) {
239+
Some(&def_const(def_id)) if ast_util::is_local(def_id) =>
240+
match env.ast_map.get_copy(&def_id.node) {
241+
ast_map::node_item(it, _) => {
242+
(v.visit_item)(it, (env, v));
243+
}
244+
_ => fail!("const not bound to an item")
245+
},
246+
_ => ()
247+
},
248+
_ => ()
254249
}
255250
visit::visit_expr(e, (env, v));
256251
}

0 commit comments

Comments
 (0)