Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 81bce52

Browse files
committedFeb 16, 2015
Auto merge of #22230 - nikomatsakis:object-lifetime-defaults-2, r=pnkfelix
Implement rules described in rust-lang/rfcs#599. Fixes #22211. ~~Based atop PR #22182, so the first few commits (up to and including "Pacify the mercilous nrc") have already been reviewed.~~
2 parents e4e7aa2 + 503e15b commit 81bce52

File tree

53 files changed

+1264
-272
lines changed

Some content is hidden

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

53 files changed

+1264
-272
lines changed
 

‎src/librustc/metadata/tydecode.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -824,14 +824,32 @@ fn parse_type_param_def_<'a, 'tcx, F>(st: &mut PState<'a, 'tcx>, conv: &mut F)
824824
assert_eq!(next(st), '|');
825825
let bounds = parse_bounds_(st, conv);
826826
let default = parse_opt(st, |st| parse_ty_(st, conv));
827+
let object_lifetime_default = parse_object_lifetime_default(st, conv);
827828

828829
ty::TypeParameterDef {
829830
name: name,
830831
def_id: def_id,
831832
space: space,
832833
index: index,
833834
bounds: bounds,
834-
default: default
835+
default: default,
836+
object_lifetime_default: object_lifetime_default,
837+
}
838+
}
839+
840+
fn parse_object_lifetime_default<'a,'tcx, F>(st: &mut PState<'a,'tcx>,
841+
conv: &mut F)
842+
-> Option<ty::ObjectLifetimeDefault>
843+
where F: FnMut(DefIdSource, ast::DefId) -> ast::DefId,
844+
{
845+
match next(st) {
846+
'n' => None,
847+
'a' => Some(ty::ObjectLifetimeDefault::Ambiguous),
848+
's' => {
849+
let region = parse_region_(st, conv);
850+
Some(ty::ObjectLifetimeDefault::Specific(region))
851+
}
852+
_ => panic!("parse_object_lifetime_default: bad input")
835853
}
836854
}
837855

‎src/librustc/metadata/tyencode.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,21 @@ pub fn enc_type_param_def<'a, 'tcx>(w: &mut SeekableMemWriter, cx: &ctxt<'a, 'tc
414414
v.space.to_uint(), v.index);
415415
enc_bounds(w, cx, &v.bounds);
416416
enc_opt(w, v.default, |w, t| enc_ty(w, cx, t));
417+
enc_object_lifetime_default(w, cx, v.object_lifetime_default);
418+
}
419+
420+
fn enc_object_lifetime_default<'a, 'tcx>(w: &mut SeekableMemWriter,
421+
cx: &ctxt<'a, 'tcx>,
422+
default: Option<ty::ObjectLifetimeDefault>)
423+
{
424+
match default {
425+
None => mywrite!(w, "n"),
426+
Some(ty::ObjectLifetimeDefault::Ambiguous) => mywrite!(w, "a"),
427+
Some(ty::ObjectLifetimeDefault::Specific(r)) => {
428+
mywrite!(w, "s");
429+
enc_region(w, cx, r);
430+
}
431+
}
417432
}
418433

419434
pub fn enc_predicate<'a, 'tcx>(w: &mut SeekableMemWriter,

0 commit comments

Comments
 (0)
Please sign in to comment.