diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2024-01-02 23:32:40 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2024-01-06 01:25:20 +0300 |
| commit | 90d11d64486bc758ee15a1dd5dba351447648097 (patch) | |
| tree | 5a1e15c159733163020096bdc77055b072ca2ed9 /compiler/rustc_span/src/source_map.rs | |
| parent | b8c207435c85955d0c0806240d5491f5ccd1def5 (diff) | |
| download | rust-90d11d64486bc758ee15a1dd5dba351447648097.tar.gz rust-90d11d64486bc758ee15a1dd5dba351447648097.zip | |
rustc_span: Optimize syntax context comparisons
Including comparisons with root context
Diffstat (limited to 'compiler/rustc_span/src/source_map.rs')
| -rw-r--r-- | compiler/rustc_span/src/source_map.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/compiler/rustc_span/src/source_map.rs b/compiler/rustc_span/src/source_map.rs index c61dbcaae95..8253ffefcaa 100644 --- a/compiler/rustc_span/src/source_map.rs +++ b/compiler/rustc_span/src/source_map.rs @@ -23,9 +23,15 @@ mod tests; /// otherwise return the call site span up to the `enclosing_sp` by /// following the `expn_data` chain. pub fn original_sp(sp: Span, enclosing_sp: Span) -> Span { - let expn_data1 = sp.ctxt().outer_expn_data(); - let expn_data2 = enclosing_sp.ctxt().outer_expn_data(); - if expn_data1.is_root() || !expn_data2.is_root() && expn_data1.call_site == expn_data2.call_site + let ctxt = sp.ctxt(); + if ctxt.is_root() { + return sp; + } + + let enclosing_ctxt = enclosing_sp.ctxt(); + let expn_data1 = ctxt.outer_expn_data(); + if !enclosing_ctxt.is_root() + && expn_data1.call_site == enclosing_ctxt.outer_expn_data().call_site { sp } else { |
