Skip to content

Commit 5f43899

Browse files
committed
Implement the astencode rules for predicates. These don't actually get
used by trans, but it's easy to do.
1 parent 97cf91a commit 5f43899

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

src/librustc/middle/astencode.rs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,8 @@ trait rbml_writer_helpers<'tcx> {
830830
fn emit_tys<'a>(&mut self, ecx: &e::EncodeContext<'a, 'tcx>, tys: &[Ty<'tcx>]);
831831
fn emit_type_param_def<'a>(&mut self, ecx: &e::EncodeContext<'a, 'tcx>,
832832
type_param_def: &ty::TypeParameterDef<'tcx>);
833+
fn emit_predicate<'a>(&mut self, ecx: &e::EncodeContext<'a, 'tcx>,
834+
predicate: &ty::Predicate<'tcx>);
833835
fn emit_trait_ref<'a>(&mut self, ecx: &e::EncodeContext<'a, 'tcx>,
834836
ty: &ty::TraitRef<'tcx>);
835837
fn emit_polytype<'a>(&mut self, ecx: &e::EncodeContext<'a, 'tcx>,
@@ -936,6 +938,15 @@ impl<'a, 'tcx> rbml_writer_helpers<'tcx> for Encoder<'a> {
936938
});
937939
}
938940

941+
fn emit_predicate<'a>(&mut self, ecx: &e::EncodeContext<'a, 'tcx>,
942+
predicate: &ty::Predicate<'tcx>) {
943+
self.emit_opaque(|this| {
944+
Ok(tyencode::enc_predicate(this.writer,
945+
&ecx.ty_str_ctxt(),
946+
predicate))
947+
});
948+
}
949+
939950
fn emit_polytype<'a>(&mut self,
940951
ecx: &e::EncodeContext<'a, 'tcx>,
941952
pty: ty::Polytype<'tcx>) {
@@ -953,6 +964,11 @@ impl<'a, 'tcx> rbml_writer_helpers<'tcx> for Encoder<'a> {
953964
Ok(encode_vec_per_param_space(
954965
this, &pty.generics.regions,
955966
|this, def| def.encode(this).unwrap()))
967+
});
968+
this.emit_struct_field("predicates", 2, |this| {
969+
Ok(encode_vec_per_param_space(
970+
this, &pty.generics.predicates,
971+
|this, def| this.emit_predicate(ecx, def)))
956972
})
957973
})
958974
});
@@ -1336,6 +1352,8 @@ trait rbml_decoder_decoder_helpers<'tcx> {
13361352
-> Rc<ty::TraitRef<'tcx>>;
13371353
fn read_type_param_def<'a, 'b>(&mut self, dcx: &DecodeContext<'a, 'b, 'tcx>)
13381354
-> ty::TypeParameterDef<'tcx>;
1355+
fn read_predicate<'a, 'b>(&mut self, dcx: &DecodeContext<'a, 'b, 'tcx>)
1356+
-> ty::Predicate<'tcx>;
13391357
fn read_polytype<'a, 'b>(&mut self, dcx: &DecodeContext<'a, 'b, 'tcx>)
13401358
-> ty::Polytype<'tcx>;
13411359
fn read_existential_bounds<'a, 'b>(&mut self, dcx: &DecodeContext<'a, 'b, 'tcx>)
@@ -1536,6 +1554,15 @@ impl<'a, 'tcx> rbml_decoder_decoder_helpers<'tcx> for reader::Decoder<'a> {
15361554
}).unwrap()
15371555
}
15381556

1557+
fn read_predicate<'a, 'b>(&mut self, dcx: &DecodeContext<'a, 'b, 'tcx>)
1558+
-> ty::Predicate<'tcx>
1559+
{
1560+
self.read_opaque(|this, doc| {
1561+
Ok(tydecode::parse_predicate_data(doc.data, doc.start, dcx.cdata.cnum, dcx.tcx,
1562+
|s, a| this.convert_def_id(dcx, s, a)))
1563+
}).unwrap()
1564+
}
1565+
15391566
fn read_polytype<'a, 'b>(&mut self, dcx: &DecodeContext<'a, 'b, 'tcx>)
15401567
-> ty::Polytype<'tcx> {
15411568
self.read_struct("Polytype", 2, |this| {
@@ -1556,7 +1583,10 @@ impl<'a, 'tcx> rbml_decoder_decoder_helpers<'tcx> for reader::Decoder<'a> {
15561583
}).unwrap(),
15571584

15581585
predicates:
1559-
subst::VecPerParamSpace::empty(), // TODO fix in later commit
1586+
this.read_struct_field("predicates", 2, |this| {
1587+
Ok(this.read_vec_per_param_space(
1588+
|this| this.read_predicate(dcx)))
1589+
}).unwrap(),
15601590
})
15611591
})
15621592
}).unwrap(),

0 commit comments

Comments
 (0)