Skip to content

Commit e71703d

Browse files
committed
Properly serialize is_last_use values
They were all normalized to the same thing by the serializer.
1 parent c71306b commit e71703d

File tree

3 files changed

+120
-4
lines changed

3 files changed

+120
-4
lines changed

src/etc/gen-astencode

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ function msg {
1717
M=src/rustc/metadata
1818
GEN_TYPES="syntax::ast::item syntax::ast::def middle::typeck::method_origin \
1919
middle::freevars::freevar_entry syntax::ast::def_id
20-
syntax::ast::inlined_item"
20+
syntax::ast::inlined_item middle::last_use::is_last_use"
2121

2222
BUILD_DIR=$1
2323
if test $BUILD_DIR == ""; then

src/rustc/metadata/astencode.rs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,10 @@ impl helper for serialization::ebml_deserializer {
471471
let fv = astencode_gen::deserialize_middle_typeck_method_origin(self);
472472
fv.tr(xcx)
473473
}
474+
fn read_is_last_use(xcx: extended_decode_ctxt) -> last_use::is_last_use {
475+
let lu = astencode_gen::deserialize_middle_last_use_is_last_use(self);
476+
lu.tr(xcx)
477+
}
474478
}
475479

476480
impl of tr for method_origin {
@@ -489,6 +493,17 @@ impl of tr for method_origin {
489493
}
490494
}
491495

496+
impl of tr for last_use::is_last_use {
497+
fn tr(xcx: extended_decode_ctxt) -> last_use::is_last_use {
498+
alt self {
499+
last_use::is_last_use | last_use::has_last_use { self }
500+
last_use::closes_over(ids) {
501+
last_use::closes_over(vec::map(ids, {|id| xcx.tr_id(id)}))
502+
}
503+
}
504+
}
505+
}
506+
492507
// ______________________________________________________________________
493508
// Encoding and decoding dict_res
494509

@@ -743,9 +758,12 @@ fn encode_side_tables_for_id(ecx: @e::encode_ctxt,
743758
}
744759
}
745760

746-
option::may(ccx.maps.last_uses.find(id)) {|_m|
761+
option::may(ccx.maps.last_uses.find(id)) {|m|
747762
ebml_w.tag(c::tag_table_last_use) {||
748763
ebml_w.id(id);
764+
ebml_w.tag(c::tag_table_val) {||
765+
astencode_gen::serialize_middle_last_use_is_last_use(ebml_w, m)
766+
}
749767
}
750768
}
751769

@@ -830,8 +848,6 @@ fn decode_side_tables(xcx: extended_decode_ctxt,
830848
dcx.maps.mutbl_map.insert(id, ());
831849
} else if tag == (c::tag_table_copy as uint) {
832850
dcx.maps.copy_map.insert(id, ());
833-
} else if tag == (c::tag_table_last_use as uint) {
834-
dcx.maps.last_uses.insert(id, last_use::is_last_use);
835851
} else {
836852
let val_doc = entry_doc[c::tag_table_val];
837853
let val_dsr = serialization::mk_ebml_deserializer(val_doc);
@@ -856,6 +872,8 @@ fn decode_side_tables(xcx: extended_decode_ctxt,
856872
} else if tag == (c::tag_table_param_bounds as uint) {
857873
let bounds = val_dsr.read_bounds(xcx);
858874
dcx.tcx.ty_param_bounds.insert(id, bounds);
875+
} else if tag == (c::tag_table_last_use as uint) {
876+
dcx.maps.last_uses.insert(id, val_dsr.read_is_last_use(xcx));
859877
} else if tag == (c::tag_table_method_map as uint) {
860878
dcx.maps.method_map.insert(id,
861879
val_dsr.read_method_origin(xcx));

src/rustc/metadata/astencode_gen.rs

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8984,3 +8984,101 @@ fn deserialize_syntax_ast_inlined_item<S: std::serialization::deserializer>(s:
89848984
-> syntax::ast::inlined_item {
89858985
deserialize_171(s)
89868986
}
8987+
/*[syntax::ast::node_id]*/
8988+
fn serialize_172<S: std::serialization::serializer>(s: S,
8989+
v:
8990+
[syntax::ast::node_id]) {
8991+
s.emit_vec(vec::len(v), /*syntax::ast::node_id*/
8992+
{||
8993+
vec::iteri(v,
8994+
{|i, e|
8995+
s.emit_vec_elt(i, {|| serialize_27(s, e) })
8996+
})
8997+
});
8998+
}
8999+
/*middle::last_use::is_last_use*/
9000+
fn serialize_173<S: std::serialization::serializer>(s: S,
9001+
v:
9002+
middle::last_use::is_last_use) {
9003+
s.emit_enum("middle::last_use::is_last_use",
9004+
9005+
9006+
/*[syntax::ast::node_id]*/
9007+
{||
9008+
alt v {
9009+
middle::last_use::is_last_use {
9010+
s.emit_enum_variant("middle::last_use::is_last_use",
9011+
0u, 0u, {|| })
9012+
}
9013+
middle::last_use::has_last_use {
9014+
s.emit_enum_variant("middle::last_use::has_last_use",
9015+
1u, 0u, {|| })
9016+
}
9017+
middle::last_use::closes_over(v0) {
9018+
s.emit_enum_variant("middle::last_use::closes_over",
9019+
2u, 1u,
9020+
{||
9021+
{
9022+
s.emit_enum_variant_arg(0u,
9023+
{||
9024+
serialize_172(s,
9025+
v0)
9026+
})
9027+
}
9028+
})
9029+
}
9030+
}
9031+
});
9032+
}
9033+
fn serialize_middle_last_use_is_last_use<S: std::serialization::serializer>(s:
9034+
S,
9035+
v:
9036+
middle::last_use::is_last_use) {
9037+
serialize_173(s, v);
9038+
}
9039+
/*[syntax::ast::node_id]*/
9040+
fn deserialize_172<S: std::serialization::deserializer>(s: S) ->
9041+
[syntax::ast::node_id] {
9042+
s.read_vec(
9043+
9044+
/*syntax::ast::node_id*/
9045+
{|len|
9046+
vec::init_fn(len,
9047+
{|i|
9048+
s.read_vec_elt(i, {|| deserialize_27(s) })
9049+
})
9050+
})
9051+
}
9052+
/*middle::last_use::is_last_use*/
9053+
fn deserialize_173<S: std::serialization::deserializer>(s: S) ->
9054+
middle::last_use::is_last_use {
9055+
s.read_enum("middle::last_use::is_last_use",
9056+
9057+
9058+
9059+
9060+
/*[syntax::ast::node_id]*/
9061+
{||
9062+
s.read_enum_variant({|v_id|
9063+
alt check v_id {
9064+
0u {
9065+
middle::last_use::is_last_use
9066+
}
9067+
1u {
9068+
middle::last_use::has_last_use
9069+
}
9070+
2u {
9071+
middle::last_use::closes_over(s.read_enum_variant_arg(0u,
9072+
{||
9073+
deserialize_172(s)
9074+
}))
9075+
}
9076+
}
9077+
})
9078+
})
9079+
}
9080+
fn deserialize_middle_last_use_is_last_use<S: std::serialization::deserializer>(s:
9081+
S)
9082+
-> middle::last_use::is_last_use {
9083+
deserialize_173(s)
9084+
}

0 commit comments

Comments
 (0)