diff --git a/src/librustc/metadata/common.rs b/src/librustc/metadata/common.rs index f0a465b73f60..a58ef53de9a7 100644 --- a/src/librustc/metadata/common.rs +++ b/src/librustc/metadata/common.rs @@ -127,8 +127,7 @@ pub enum astencode_tag { // Reserves 0x50 -- 0x6f tag_id_range = 0x52, tag_table = 0x53, - tag_table_id = 0x54, - tag_table_val = 0x55, + // GAP 0x54, 0x55 tag_table_def = 0x56, tag_table_node_type = 0x57, tag_table_item_subst = 0x58, diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index da3e6b4765b9..7a75d844838a 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -413,9 +413,8 @@ fn decode_ast(par_doc: rbml::Doc) -> ast::InlinedItem { // ______________________________________________________________________ // Encoding and decoding of ast::def -fn decode_def(dcx: &DecodeContext, doc: rbml::Doc) -> def::Def { - let mut dsr = reader::Decoder::new(doc); - let def: def::Def = Decodable::decode(&mut dsr).unwrap(); +fn decode_def(dcx: &DecodeContext, dsr: &mut reader::Decoder) -> def::Def { + let def: def::Def = Decodable::decode(dsr).unwrap(); def.tr(dcx) } @@ -1114,7 +1113,7 @@ impl<'a> write_tag_and_id for Encoder<'a> { } fn id(&mut self, id: ast::NodeId) { - self.wr_tagged_u64(c::tag_table_id as uint, id as u64); + id.encode(self).unwrap(); } } @@ -1151,51 +1150,44 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext, if let Some(def) = tcx.def_map.borrow().get(&id).map(|d| d.full_def()) { rbml_w.tag(c::tag_table_def, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| def.encode(rbml_w).unwrap()); + def.encode(rbml_w).unwrap(); }) } if let Some(ty) = tcx.node_types.borrow().get(&id) { rbml_w.tag(c::tag_table_node_type, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - rbml_w.emit_ty(ecx, *ty); - }) + rbml_w.emit_ty(ecx, *ty); }) } if let Some(item_substs) = tcx.item_substs.borrow().get(&id) { rbml_w.tag(c::tag_table_item_subst, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - rbml_w.emit_substs(ecx, &item_substs.substs); - }) + rbml_w.emit_substs(ecx, &item_substs.substs); }) } if let Some(fv) = tcx.freevars.borrow().get(&id) { rbml_w.tag(c::tag_table_freevars, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - rbml_w.emit_from_vec(fv, |rbml_w, fv_entry| { - Ok(encode_freevar_entry(rbml_w, fv_entry)) - }); - }) + rbml_w.emit_from_vec(fv, |rbml_w, fv_entry| { + Ok(encode_freevar_entry(rbml_w, fv_entry)) + }); }); for freevar in fv { rbml_w.tag(c::tag_table_upvar_capture_map, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - let var_id = freevar.def.def_id().node; - let upvar_id = ty::UpvarId { - var_id: var_id, - closure_expr_id: id - }; - let upvar_capture = tcx.upvar_capture_map.borrow()[upvar_id].clone(); - var_id.encode(rbml_w); - upvar_capture.encode(rbml_w); - }) + + let var_id = freevar.def.def_id().node; + let upvar_id = ty::UpvarId { + var_id: var_id, + closure_expr_id: id + }; + let upvar_capture = tcx.upvar_capture_map.borrow()[upvar_id].clone(); + var_id.encode(rbml_w); + upvar_capture.encode(rbml_w); }) } } @@ -1204,18 +1196,14 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext, if let Some(type_scheme) = tcx.tcache.borrow().get(&lid) { rbml_w.tag(c::tag_table_tcache, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - rbml_w.emit_type_scheme(ecx, type_scheme.clone()); - }) + rbml_w.emit_type_scheme(ecx, type_scheme.clone()); }) } if let Some(type_param_def) = tcx.ty_param_defs.borrow().get(&id) { rbml_w.tag(c::tag_table_param_defs, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - rbml_w.emit_type_param_def(ecx, type_param_def) - }) + rbml_w.emit_type_param_def(ecx, type_param_def) }) } @@ -1223,18 +1211,14 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext, if let Some(method) = tcx.method_map.borrow().get(&method_call) { rbml_w.tag(c::tag_table_method_map, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - encode_method_callee(ecx, rbml_w, method_call.adjustment, method) - }) + encode_method_callee(ecx, rbml_w, method_call.adjustment, method) }) } if let Some(trait_ref) = tcx.object_cast_map.borrow().get(&id) { rbml_w.tag(c::tag_table_object_cast_map, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - rbml_w.emit_trait_ref(ecx, &*trait_ref.0); - }) + rbml_w.emit_trait_ref(ecx, &*trait_ref.0); }) } @@ -1245,9 +1229,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext, if let Some(method) = tcx.method_map.borrow().get(&method_call) { rbml_w.tag(c::tag_table_method_map, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - encode_method_callee(ecx, rbml_w, method_call.adjustment, method) - }) + encode_method_callee(ecx, rbml_w, method_call.adjustment, method) }) } } @@ -1258,10 +1240,8 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext, if let Some(method) = tcx.method_map.borrow().get(&method_call) { rbml_w.tag(c::tag_table_method_map, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - encode_method_callee(ecx, rbml_w, - method_call.adjustment, method) - }) + encode_method_callee(ecx, rbml_w, + method_call.adjustment, method) }) } } @@ -1273,36 +1253,28 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext, rbml_w.tag(c::tag_table_adjustments, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - rbml_w.emit_auto_adjustment(ecx, adjustment); - }) + rbml_w.emit_auto_adjustment(ecx, adjustment); }) } if let Some(closure_type) = tcx.closure_tys.borrow().get(&ast_util::local_def(id)) { rbml_w.tag(c::tag_table_closure_tys, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - rbml_w.emit_closure_type(ecx, closure_type); - }) + rbml_w.emit_closure_type(ecx, closure_type); }) } if let Some(closure_kind) = tcx.closure_kinds.borrow().get(&ast_util::local_def(id)) { rbml_w.tag(c::tag_table_closure_kinds, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - encode_closure_kind(rbml_w, *closure_kind) - }) + encode_closure_kind(rbml_w, *closure_kind) }) } for &qualif in tcx.const_qualif_map.borrow().get(&id).iter() { rbml_w.tag(c::tag_table_const_qualif, |rbml_w| { rbml_w.id(id); - rbml_w.tag(c::tag_table_val, |rbml_w| { - qualif.encode(rbml_w).unwrap() - }) + qualif.encode(rbml_w).unwrap() }) } } @@ -1830,8 +1802,9 @@ fn decode_side_tables(dcx: &DecodeContext, ast_doc: rbml::Doc) { let tbl_doc = ast_doc.get(c::tag_table as uint); reader::docs(tbl_doc, |tag, entry_doc| { - let id0 = entry_doc.get(c::tag_table_id as uint).as_int(); - let id = dcx.tr_id(id0 as ast::NodeId); + let mut entry_dsr = reader::Decoder::new(entry_doc); + let id0: ast::NodeId = Decodable::decode(&mut entry_dsr).unwrap(); + let id = dcx.tr_id(id0); debug!(">> Side table document with tag 0x{:x} \ found for id {} (orig {})", @@ -1844,13 +1817,11 @@ fn decode_side_tables(dcx: &DecodeContext, tag)); } Some(value) => { - let val_doc = entry_doc.get(c::tag_table_val as uint); - let mut val_dsr = reader::Decoder::new(val_doc); - let val_dsr = &mut val_dsr; + let val_dsr = &mut entry_dsr; match value { c::tag_table_def => { - let def = decode_def(dcx, val_doc); + let def = decode_def(dcx, val_dsr); dcx.tcx.def_map.borrow_mut().insert(id, def::PathResolution { base_def: def, // This doesn't matter cross-crate.