From f0efa2d84347ed0081476f04f42efe4be85ae4d6 Mon Sep 17 00:00:00 2001 From: Eduard Burtescu Date: Fri, 20 Feb 2015 18:33:29 +0200 Subject: [PATCH] Update trans/save's span hacks for fully qualified UFCS paths. --- src/librustc_trans/save/span_utils.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/librustc_trans/save/span_utils.rs b/src/librustc_trans/save/span_utils.rs index a5bebaa257ca..8de046fa6ebb 100644 --- a/src/librustc_trans/save/span_utils.rs +++ b/src/librustc_trans/save/span_utils.rs @@ -238,6 +238,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 found_ufcs_sep = false; loop { let ts = toks.real_token(); if ts.tok == token::Eof { @@ -254,13 +255,20 @@ impl<'a> SpanUtils<'a> { } bracket_count += match ts.tok { token::Lt => 1, - token::Gt => -1, + token::Gt => { + // Ignore the `>::` in `::AssocTy`. + if !found_ufcs_sep && bracket_count == 0 { + found_ufcs_sep = true; + 0 + } else { + -1 + } + } token::BinOp(token::Shl) => 2, token::BinOp(token::Shr) => -2, _ => 0 }; - if ts.tok.is_ident() && - bracket_count == nesting { + if ts.tok.is_ident() && bracket_count == nesting { result.push(self.make_sub_span(span, Some(ts.sp)).unwrap()); } }