diff options
| author | csmoe <csmoe@msn.com> | 2020-05-16 18:29:46 +0800 |
|---|---|---|
| committer | csmoe <csmoe@msn.com> | 2020-05-16 18:29:46 +0800 |
| commit | 2e1c2a6d0a0d3785802c73d13039a0f0eea36b7c (patch) | |
| tree | 712d90e1a4a17b254de7b1fb4e88e23bc568ff12 | |
| parent | 84539360498cab3c70a7c9114c0b8106c8e1b06b (diff) | |
| download | rust-2e1c2a6d0a0d3785802c73d13039a0f0eea36b7c.tar.gz rust-2e1c2a6d0a0d3785802c73d13039a0f0eea36b7c.zip | |
break out earlier on empty snippet
| -rw-r--r-- | src/librustc_span/source_map.rs | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/librustc_span/source_map.rs b/src/librustc_span/source_map.rs index d27aae0d6ed..51f55417663 100644 --- a/src/librustc_span/source_map.rs +++ b/src/librustc_span/source_map.rs @@ -910,14 +910,23 @@ impl SourceMap { pub fn generate_fn_name_span(&self, span: Span) -> Option<Span> { let prev_span = self.span_extend_to_prev_str(span, "fn", true); - self.span_to_snippet(prev_span) - .map(|snippet| { - let len = snippet - .find(|c: char| !c.is_alphanumeric() && c != '_') - .expect("no label after fn"); - prev_span.with_hi(BytePos(prev_span.lo().0 + len as u32)) - }) - .ok() + if let Ok(snippet) = self.span_to_snippet(prev_span) { + debug!( + "generate_fn_name_span: span={:?}, prev_span={:?}, snippet={:?}", + span, prev_span, snippet + ); + + if snippet.is_empty() { + return None; + }; + + let len = snippet + .find(|c: char| !c.is_alphanumeric() && c != '_') + .expect("no label after fn"); + Some(prev_span.with_hi(BytePos(prev_span.lo().0 + len as u32))) + } else { + None + } } /// Takes the span of a type parameter in a function signature and try to generate a span for |
