diff options
| -rw-r--r-- | src/librustc_trans/save/mod.rs | 8 | ||||
| -rw-r--r-- | src/librustc_trans/save/span_utils.rs | 17 | ||||
| -rw-r--r-- | src/test/run-make/save-analysis/foo.rs | 12 |
3 files changed, 23 insertions, 14 deletions
diff --git a/src/librustc_trans/save/mod.rs b/src/librustc_trans/save/mod.rs index 7e503c6819b..1b9976be72f 100644 --- a/src/librustc_trans/save/mod.rs +++ b/src/librustc_trans/save/mod.rs @@ -111,12 +111,12 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { let qualname = format!("::{}", self.analysis.ty_cx.map.path_to_string(item.id)); // If the variable is immutable, save the initialising expression. - let value = match mt { - ast::MutMutable => String::from_str("<mutable>"), - ast::MutImmutable => self.span_utils.snippet(expr.span), + let (value, keyword) = match mt { + ast::MutMutable => (String::from_str("<mutable>"), keywords::Mut), + ast::MutImmutable => (self.span_utils.snippet(expr.span), keywords::Static), }; - let sub_span = self.span_utils.sub_span_after_keyword(item.span, keywords::Static); + let sub_span = self.span_utils.sub_span_after_keyword(item.span, keyword); Data::VariableData(VariableData { id: item.id, diff --git a/src/librustc_trans/save/span_utils.rs b/src/librustc_trans/save/span_utils.rs index 504663571f5..ba027e4c2d1 100644 --- a/src/librustc_trans/save/span_utils.rs +++ b/src/librustc_trans/save/span_utils.rs @@ -237,7 +237,7 @@ impl<'a> SpanUtils<'a> { let mut toks = self.retokenise_span(span); // We keep track of how many brackets we're nested in - let mut bracket_count = 0; + let mut bracket_count: isize = 0; let mut found_ufcs_sep = false; loop { let ts = toks.real_token(); @@ -255,19 +255,16 @@ impl<'a> SpanUtils<'a> { } bracket_count += match ts.tok { token::Lt => 1, - token::Gt => { - // Ignore the `>::` in `<Type as Trait>::AssocTy`. - if !found_ufcs_sep && bracket_count == 0 { - found_ufcs_sep = true; - 0 - } else { - -1 - } - } + token::Gt => -1, token::BinOp(token::Shl) => 2, token::BinOp(token::Shr) => -2, _ => 0 }; + // Ignore the `>::` in `<Type as Trait>::AssocTy`. + if !found_ufcs_sep && bracket_count == -1 { + found_ufcs_sep = true; + bracket_count += 1 + } if ts.tok.is_ident() && bracket_count == nesting { result.push(self.make_sub_span(span, Some(ts.sp)).unwrap()); } diff --git a/src/test/run-make/save-analysis/foo.rs b/src/test/run-make/save-analysis/foo.rs index baf6999b10a..07b99dff4e0 100644 --- a/src/test/run-make/save-analysis/foo.rs +++ b/src/test/run-make/save-analysis/foo.rs @@ -352,3 +352,15 @@ impl Iterator for nofields { panic!() } } + +trait Pattern<'a> { + type Searcher; +} + +struct CharEqPattern; + +impl<'a> Pattern<'a> for CharEqPattern { + type Searcher = CharEqPattern; +} + +struct CharSearcher<'a>(<CharEqPattern as Pattern<'a>>::Searcher); |
