diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2015-02-11 16:37:36 -0500 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2015-02-16 10:55:36 -0500 |
| commit | 931a3c4f9df2fbf043bc30c0524bc93e1ffa397e (patch) | |
| tree | c766d38008da97964668661d37f92adbee59087b /src/librustc/metadata | |
| parent | c5db290bf6df986a6acd5ce993f278c18e55ca37 (diff) | |
| download | rust-931a3c4f9df2fbf043bc30c0524bc93e1ffa397e.tar.gz rust-931a3c4f9df2fbf043bc30c0524bc93e1ffa397e.zip | |
Detect and store object-lifetime-defaults.
Diffstat (limited to 'src/librustc/metadata')
| -rw-r--r-- | src/librustc/metadata/tydecode.rs | 20 | ||||
| -rw-r--r-- | src/librustc/metadata/tyencode.rs | 15 |
2 files changed, 34 insertions, 1 deletions
diff --git a/src/librustc/metadata/tydecode.rs b/src/librustc/metadata/tydecode.rs index 9962f49dfcf..94654b84922 100644 --- a/src/librustc/metadata/tydecode.rs +++ b/src/librustc/metadata/tydecode.rs @@ -824,6 +824,7 @@ fn parse_type_param_def_<'a, 'tcx, F>(st: &mut PState<'a, 'tcx>, conv: &mut F) assert_eq!(next(st), '|'); let bounds = parse_bounds_(st, conv); let default = parse_opt(st, |st| parse_ty_(st, conv)); + let object_lifetime_default = parse_object_lifetime_default(st, conv); ty::TypeParameterDef { name: name, @@ -831,7 +832,24 @@ fn parse_type_param_def_<'a, 'tcx, F>(st: &mut PState<'a, 'tcx>, conv: &mut F) space: space, index: index, bounds: bounds, - default: default + default: default, + object_lifetime_default: object_lifetime_default, + } +} + +fn parse_object_lifetime_default<'a,'tcx, F>(st: &mut PState<'a,'tcx>, + conv: &mut F) + -> Option<ty::ObjectLifetimeDefault> + where F: FnMut(DefIdSource, ast::DefId) -> ast::DefId, +{ + match next(st) { + 'n' => None, + 'a' => Some(ty::ObjectLifetimeDefault::Ambiguous), + 's' => { + let region = parse_region_(st, conv); + Some(ty::ObjectLifetimeDefault::Specific(region)) + } + _ => panic!("parse_object_lifetime_default: bad input") } } diff --git a/src/librustc/metadata/tyencode.rs b/src/librustc/metadata/tyencode.rs index 640b9649286..e1e9d49dd05 100644 --- a/src/librustc/metadata/tyencode.rs +++ b/src/librustc/metadata/tyencode.rs @@ -414,6 +414,21 @@ pub fn enc_type_param_def<'a, 'tcx>(w: &mut SeekableMemWriter, cx: &ctxt<'a, 'tc v.space.to_uint(), v.index); enc_bounds(w, cx, &v.bounds); enc_opt(w, v.default, |w, t| enc_ty(w, cx, t)); + enc_object_lifetime_default(w, cx, v.object_lifetime_default); +} + +fn enc_object_lifetime_default<'a, 'tcx>(w: &mut SeekableMemWriter, + cx: &ctxt<'a, 'tcx>, + default: Option<ty::ObjectLifetimeDefault>) +{ + match default { + None => mywrite!(w, "n"), + Some(ty::ObjectLifetimeDefault::Ambiguous) => mywrite!(w, "a"), + Some(ty::ObjectLifetimeDefault::Specific(r)) => { + mywrite!(w, "s"); + enc_region(w, cx, r); + } + } } pub fn enc_predicate<'a, 'tcx>(w: &mut SeekableMemWriter, |
