mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-21 22:34:05 +00:00
fix clippy::clone_on_ref_ptr for compiler
This commit is contained in:
parent
0bff99403c
commit
746b675c5a
@ -3301,6 +3301,7 @@ version = "0.0.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools",
|
"itertools",
|
||||||
"rustc_ast",
|
"rustc_ast",
|
||||||
|
"rustc_data_structures",
|
||||||
"rustc_lexer",
|
"rustc_lexer",
|
||||||
"rustc_span",
|
"rustc_span",
|
||||||
"thin-vec",
|
"thin-vec",
|
||||||
|
@ -368,7 +368,7 @@ impl Clone for TokenKind {
|
|||||||
// a copy. This is faster than the `derive(Clone)` version which has a
|
// a copy. This is faster than the `derive(Clone)` version which has a
|
||||||
// separate path for every variant.
|
// separate path for every variant.
|
||||||
match self {
|
match self {
|
||||||
Interpolated(nt) => Interpolated(nt.clone()),
|
Interpolated(nt) => Interpolated(Lrc::clone(nt)),
|
||||||
_ => unsafe { std::ptr::read(self) },
|
_ => unsafe { std::ptr::read(self) },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ use std::assert_matches::assert_matches;
|
|||||||
use rustc_ast::ptr::P as AstP;
|
use rustc_ast::ptr::P as AstP;
|
||||||
use rustc_ast::*;
|
use rustc_ast::*;
|
||||||
use rustc_data_structures::stack::ensure_sufficient_stack;
|
use rustc_data_structures::stack::ensure_sufficient_stack;
|
||||||
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::HirId;
|
use rustc_hir::HirId;
|
||||||
use rustc_hir::def::{DefKind, Res};
|
use rustc_hir::def::{DefKind, Res};
|
||||||
@ -143,7 +144,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||||||
ExprKind::IncludedBytes(bytes) => {
|
ExprKind::IncludedBytes(bytes) => {
|
||||||
let lit = self.arena.alloc(respan(
|
let lit = self.arena.alloc(respan(
|
||||||
self.lower_span(e.span),
|
self.lower_span(e.span),
|
||||||
LitKind::ByteStr(bytes.clone(), StrStyle::Cooked),
|
LitKind::ByteStr(Lrc::clone(bytes), StrStyle::Cooked),
|
||||||
));
|
));
|
||||||
hir::ExprKind::Lit(lit)
|
hir::ExprKind::Lit(lit)
|
||||||
}
|
}
|
||||||
@ -521,7 +522,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||||||
this.mark_span_with_reason(
|
this.mark_span_with_reason(
|
||||||
DesugaringKind::TryBlock,
|
DesugaringKind::TryBlock,
|
||||||
expr.span,
|
expr.span,
|
||||||
Some(this.allow_try_trait.clone()),
|
Some(Lrc::clone(&this.allow_try_trait)),
|
||||||
),
|
),
|
||||||
expr,
|
expr,
|
||||||
)
|
)
|
||||||
@ -529,7 +530,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||||||
let try_span = this.mark_span_with_reason(
|
let try_span = this.mark_span_with_reason(
|
||||||
DesugaringKind::TryBlock,
|
DesugaringKind::TryBlock,
|
||||||
this.tcx.sess.source_map().end_point(body.span),
|
this.tcx.sess.source_map().end_point(body.span),
|
||||||
Some(this.allow_try_trait.clone()),
|
Some(Lrc::clone(&this.allow_try_trait)),
|
||||||
);
|
);
|
||||||
|
|
||||||
(try_span, this.expr_unit(try_span))
|
(try_span, this.expr_unit(try_span))
|
||||||
@ -638,7 +639,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||||||
let unstable_span = self.mark_span_with_reason(
|
let unstable_span = self.mark_span_with_reason(
|
||||||
DesugaringKind::Async,
|
DesugaringKind::Async,
|
||||||
self.lower_span(span),
|
self.lower_span(span),
|
||||||
Some(self.allow_gen_future.clone()),
|
Some(Lrc::clone(&self.allow_gen_future)),
|
||||||
);
|
);
|
||||||
let resume_ty =
|
let resume_ty =
|
||||||
self.make_lang_item_qpath(hir::LangItem::ResumeTy, unstable_span, None);
|
self.make_lang_item_qpath(hir::LangItem::ResumeTy, unstable_span, None);
|
||||||
@ -724,7 +725,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||||||
let unstable_span = self.mark_span_with_reason(
|
let unstable_span = self.mark_span_with_reason(
|
||||||
DesugaringKind::Async,
|
DesugaringKind::Async,
|
||||||
span,
|
span,
|
||||||
Some(self.allow_gen_future.clone()),
|
Some(Lrc::clone(&self.allow_gen_future)),
|
||||||
);
|
);
|
||||||
self.lower_attrs(inner_hir_id, &[Attribute {
|
self.lower_attrs(inner_hir_id, &[Attribute {
|
||||||
kind: AttrKind::Normal(ptr::P(NormalAttr::from_ident(Ident::new(
|
kind: AttrKind::Normal(ptr::P(NormalAttr::from_ident(Ident::new(
|
||||||
@ -800,13 +801,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||||||
|
|
||||||
let features = match await_kind {
|
let features = match await_kind {
|
||||||
FutureKind::Future => None,
|
FutureKind::Future => None,
|
||||||
FutureKind::AsyncIterator => Some(self.allow_for_await.clone()),
|
FutureKind::AsyncIterator => Some(Lrc::clone(&self.allow_for_await)),
|
||||||
};
|
};
|
||||||
let span = self.mark_span_with_reason(DesugaringKind::Await, await_kw_span, features);
|
let span = self.mark_span_with_reason(DesugaringKind::Await, await_kw_span, features);
|
||||||
let gen_future_span = self.mark_span_with_reason(
|
let gen_future_span = self.mark_span_with_reason(
|
||||||
DesugaringKind::Await,
|
DesugaringKind::Await,
|
||||||
full_span,
|
full_span,
|
||||||
Some(self.allow_gen_future.clone()),
|
Some(Lrc::clone(&self.allow_gen_future)),
|
||||||
);
|
);
|
||||||
let expr_hir_id = expr.hir_id;
|
let expr_hir_id = expr.hir_id;
|
||||||
|
|
||||||
@ -1812,13 +1813,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||||||
let unstable_span = self.mark_span_with_reason(
|
let unstable_span = self.mark_span_with_reason(
|
||||||
DesugaringKind::QuestionMark,
|
DesugaringKind::QuestionMark,
|
||||||
span,
|
span,
|
||||||
Some(self.allow_try_trait.clone()),
|
Some(Lrc::clone(&self.allow_try_trait)),
|
||||||
);
|
);
|
||||||
let try_span = self.tcx.sess.source_map().end_point(span);
|
let try_span = self.tcx.sess.source_map().end_point(span);
|
||||||
let try_span = self.mark_span_with_reason(
|
let try_span = self.mark_span_with_reason(
|
||||||
DesugaringKind::QuestionMark,
|
DesugaringKind::QuestionMark,
|
||||||
try_span,
|
try_span,
|
||||||
Some(self.allow_try_trait.clone()),
|
Some(Lrc::clone(&self.allow_try_trait)),
|
||||||
);
|
);
|
||||||
|
|
||||||
// `Try::branch(<expr>)`
|
// `Try::branch(<expr>)`
|
||||||
@ -1912,7 +1913,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||||||
let unstable_span = self.mark_span_with_reason(
|
let unstable_span = self.mark_span_with_reason(
|
||||||
DesugaringKind::YeetExpr,
|
DesugaringKind::YeetExpr,
|
||||||
span,
|
span,
|
||||||
Some(self.allow_try_trait.clone()),
|
Some(Lrc::clone(&self.allow_try_trait)),
|
||||||
);
|
);
|
||||||
|
|
||||||
let from_yeet_expr = self.wrap_in_try_constructor(
|
let from_yeet_expr = self.wrap_in_try_constructor(
|
||||||
|
@ -1865,7 +1865,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
|||||||
CoroutineKind::Async { return_impl_trait_id, .. } => (return_impl_trait_id, None),
|
CoroutineKind::Async { return_impl_trait_id, .. } => (return_impl_trait_id, None),
|
||||||
CoroutineKind::Gen { return_impl_trait_id, .. } => (return_impl_trait_id, None),
|
CoroutineKind::Gen { return_impl_trait_id, .. } => (return_impl_trait_id, None),
|
||||||
CoroutineKind::AsyncGen { return_impl_trait_id, .. } => {
|
CoroutineKind::AsyncGen { return_impl_trait_id, .. } => {
|
||||||
(return_impl_trait_id, Some(self.allow_async_iterator.clone()))
|
(return_impl_trait_id, Some(Lrc::clone(&self.allow_async_iterator)))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
|||||||
let bound_modifier_allowed_features = if let Res::Def(DefKind::Trait, async_def_id) = res
|
let bound_modifier_allowed_features = if let Res::Def(DefKind::Trait, async_def_id) = res
|
||||||
&& self.tcx.async_fn_trait_kind_from_def_id(async_def_id).is_some()
|
&& self.tcx.async_fn_trait_kind_from_def_id(async_def_id).is_some()
|
||||||
{
|
{
|
||||||
Some(self.allow_async_fn_traits.clone())
|
Some(Lrc::clone(&self.allow_async_fn_traits))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
@ -7,6 +7,7 @@ edition = "2021"
|
|||||||
# tidy-alphabetical-start
|
# tidy-alphabetical-start
|
||||||
itertools = "0.12"
|
itertools = "0.12"
|
||||||
rustc_ast = { path = "../rustc_ast" }
|
rustc_ast = { path = "../rustc_ast" }
|
||||||
|
rustc_data_structures = { path = "../rustc_data_structures" }
|
||||||
rustc_lexer = { path = "../rustc_lexer" }
|
rustc_lexer = { path = "../rustc_lexer" }
|
||||||
rustc_span = { path = "../rustc_span" }
|
rustc_span = { path = "../rustc_span" }
|
||||||
thin-vec = "0.2.12"
|
thin-vec = "0.2.12"
|
||||||
|
@ -21,6 +21,7 @@ use rustc_ast::{
|
|||||||
GenericBound, InlineAsmOperand, InlineAsmOptions, InlineAsmRegOrRegClass,
|
GenericBound, InlineAsmOperand, InlineAsmOptions, InlineAsmRegOrRegClass,
|
||||||
InlineAsmTemplatePiece, PatKind, RangeEnd, RangeSyntax, Safety, SelfKind, Term, attr,
|
InlineAsmTemplatePiece, PatKind, RangeEnd, RangeSyntax, Safety, SelfKind, Term, attr,
|
||||||
};
|
};
|
||||||
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_span::edition::Edition;
|
use rustc_span::edition::Edition;
|
||||||
use rustc_span::source_map::{SourceMap, Spanned};
|
use rustc_span::source_map::{SourceMap, Spanned};
|
||||||
use rustc_span::symbol::{Ident, IdentPrinter, Symbol, kw, sym};
|
use rustc_span::symbol::{Ident, IdentPrinter, Symbol, kw, sym};
|
||||||
@ -105,7 +106,7 @@ fn split_block_comment_into_lines(text: &str, col: CharPos) -> Vec<String> {
|
|||||||
fn gather_comments(sm: &SourceMap, path: FileName, src: String) -> Vec<Comment> {
|
fn gather_comments(sm: &SourceMap, path: FileName, src: String) -> Vec<Comment> {
|
||||||
let sm = SourceMap::new(sm.path_mapping().clone());
|
let sm = SourceMap::new(sm.path_mapping().clone());
|
||||||
let source_file = sm.new_source_file(path, src);
|
let source_file = sm.new_source_file(path, src);
|
||||||
let text = (*source_file.src.as_ref().unwrap()).clone();
|
let text = Lrc::clone(&(*source_file.src.as_ref().unwrap()));
|
||||||
|
|
||||||
let text: &str = text.as_str();
|
let text: &str = text.as_str();
|
||||||
let start_bpos = source_file.start_pos;
|
let start_bpos = source_file.start_pos;
|
||||||
|
@ -107,13 +107,13 @@ pub(crate) fn compute_regions<'a, 'tcx>(
|
|||||||
param_env,
|
param_env,
|
||||||
body,
|
body,
|
||||||
promoted,
|
promoted,
|
||||||
universal_regions.clone(),
|
Rc::clone(&universal_regions),
|
||||||
location_table,
|
location_table,
|
||||||
borrow_set,
|
borrow_set,
|
||||||
&mut all_facts,
|
&mut all_facts,
|
||||||
flow_inits,
|
flow_inits,
|
||||||
move_data,
|
move_data,
|
||||||
elements.clone(),
|
Rc::clone(&elements),
|
||||||
upvars,
|
upvars,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -733,7 +733,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now take member constraints into account.
|
// Now take member constraints into account.
|
||||||
let member_constraints = self.member_constraints.clone();
|
let member_constraints = Rc::clone(&self.member_constraints);
|
||||||
for m_c_i in member_constraints.indices(scc_a) {
|
for m_c_i in member_constraints.indices(scc_a) {
|
||||||
self.apply_member_constraint(scc_a, m_c_i, member_constraints.choice_regions(m_c_i));
|
self.apply_member_constraint(scc_a, m_c_i, member_constraints.choice_regions(m_c_i));
|
||||||
}
|
}
|
||||||
@ -1679,7 +1679,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
|||||||
infcx: &InferCtxt<'tcx>,
|
infcx: &InferCtxt<'tcx>,
|
||||||
errors_buffer: &mut RegionErrors<'tcx>,
|
errors_buffer: &mut RegionErrors<'tcx>,
|
||||||
) {
|
) {
|
||||||
let member_constraints = self.member_constraints.clone();
|
let member_constraints = Rc::clone(&self.member_constraints);
|
||||||
for m_c_i in member_constraints.all_indices() {
|
for m_c_i in member_constraints.all_indices() {
|
||||||
debug!(?m_c_i);
|
debug!(?m_c_i);
|
||||||
let m_c = &member_constraints[m_c_i];
|
let m_c = &member_constraints[m_c_i];
|
||||||
|
@ -134,7 +134,7 @@ pub(crate) fn type_check<'a, 'tcx>(
|
|||||||
let mut constraints = MirTypeckRegionConstraints {
|
let mut constraints = MirTypeckRegionConstraints {
|
||||||
placeholder_indices: PlaceholderIndices::default(),
|
placeholder_indices: PlaceholderIndices::default(),
|
||||||
placeholder_index_to_region: IndexVec::default(),
|
placeholder_index_to_region: IndexVec::default(),
|
||||||
liveness_constraints: LivenessValues::with_specific_points(elements.clone()),
|
liveness_constraints: LivenessValues::with_specific_points(Rc::clone(&elements)),
|
||||||
outlives_constraints: OutlivesConstraintSet::default(),
|
outlives_constraints: OutlivesConstraintSet::default(),
|
||||||
member_constraints: MemberConstraintSet::default(),
|
member_constraints: MemberConstraintSet::default(),
|
||||||
type_tests: Vec::default(),
|
type_tests: Vec::default(),
|
||||||
@ -150,7 +150,7 @@ pub(crate) fn type_check<'a, 'tcx>(
|
|||||||
infcx,
|
infcx,
|
||||||
param_env,
|
param_env,
|
||||||
implicit_region_bound,
|
implicit_region_bound,
|
||||||
universal_regions.clone(),
|
Rc::clone(&universal_regions),
|
||||||
&mut constraints,
|
&mut constraints,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -569,7 +569,7 @@ fn thin_lto(
|
|||||||
|
|
||||||
info!(" - {}: re-compiled", module_name);
|
info!(" - {}: re-compiled", module_name);
|
||||||
opt_jobs.push(LtoModuleCodegen::Thin(ThinModule {
|
opt_jobs.push(LtoModuleCodegen::Thin(ThinModule {
|
||||||
shared: shared.clone(),
|
shared: Arc::clone(&shared),
|
||||||
idx: module_index,
|
idx: module_index,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -514,7 +514,7 @@ pub(crate) fn start_async_codegen<B: ExtraBackendMethods>(
|
|||||||
future: Some(coordinator_thread),
|
future: Some(coordinator_thread),
|
||||||
phantom: PhantomData,
|
phantom: PhantomData,
|
||||||
},
|
},
|
||||||
output_filenames: tcx.output_filenames(()).clone(),
|
output_filenames: Arc::clone(tcx.output_filenames(())),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1203,7 +1203,7 @@ fn start_executing_work<B: ExtraBackendMethods>(
|
|||||||
coordinator_send,
|
coordinator_send,
|
||||||
expanded_args: tcx.sess.expanded_args.clone(),
|
expanded_args: tcx.sess.expanded_args.clone(),
|
||||||
diag_emitter: shared_emitter.clone(),
|
diag_emitter: shared_emitter.clone(),
|
||||||
output_filenames: tcx.output_filenames(()).clone(),
|
output_filenames: Arc::clone(tcx.output_filenames(())),
|
||||||
regular_module_config: regular_config,
|
regular_module_config: regular_config,
|
||||||
metadata_module_config: metadata_config,
|
metadata_module_config: metadata_config,
|
||||||
allocator_module_config: allocator_config,
|
allocator_module_config: allocator_config,
|
||||||
|
@ -7,7 +7,7 @@ use rustc_ast::expand::allocator::{ALLOCATOR_METHODS, AllocatorKind, global_fn_n
|
|||||||
use rustc_attr as attr;
|
use rustc_attr as attr;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxIndexSet};
|
use rustc_data_structures::fx::{FxHashMap, FxIndexSet};
|
||||||
use rustc_data_structures::profiling::{get_resident_set_size, print_time_passes_entry};
|
use rustc_data_structures::profiling::{get_resident_set_size, print_time_passes_entry};
|
||||||
use rustc_data_structures::sync::par_map;
|
use rustc_data_structures::sync::{Lrc, par_map};
|
||||||
use rustc_data_structures::unord::UnordMap;
|
use rustc_data_structures::unord::UnordMap;
|
||||||
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
|
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
|
||||||
use rustc_hir::lang_items::LangItem;
|
use rustc_hir::lang_items::LangItem;
|
||||||
@ -923,7 +923,7 @@ impl CrateInfo {
|
|||||||
crate_name: UnordMap::with_capacity(n_crates),
|
crate_name: UnordMap::with_capacity(n_crates),
|
||||||
used_crates,
|
used_crates,
|
||||||
used_crate_source: UnordMap::with_capacity(n_crates),
|
used_crate_source: UnordMap::with_capacity(n_crates),
|
||||||
dependency_formats: tcx.dependency_formats(()).clone(),
|
dependency_formats: Lrc::clone(tcx.dependency_formats(())),
|
||||||
windows_subsystem,
|
windows_subsystem,
|
||||||
natvis_debugger_visualizers: Default::default(),
|
natvis_debugger_visualizers: Default::default(),
|
||||||
};
|
};
|
||||||
@ -936,7 +936,7 @@ impl CrateInfo {
|
|||||||
info.crate_name.insert(cnum, tcx.crate_name(cnum));
|
info.crate_name.insert(cnum, tcx.crate_name(cnum));
|
||||||
|
|
||||||
let used_crate_source = tcx.used_crate_source(cnum);
|
let used_crate_source = tcx.used_crate_source(cnum);
|
||||||
info.used_crate_source.insert(cnum, used_crate_source.clone());
|
info.used_crate_source.insert(cnum, Lrc::clone(used_crate_source));
|
||||||
if tcx.is_profiler_runtime(cnum) {
|
if tcx.is_profiler_runtime(cnum) {
|
||||||
info.profiler_runtime = Some(cnum);
|
info.profiler_runtime = Some(cnum);
|
||||||
}
|
}
|
||||||
|
@ -1395,7 +1395,7 @@ pub fn install_ice_hook(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let using_internal_features = Arc::new(std::sync::atomic::AtomicBool::default());
|
let using_internal_features = Arc::new(std::sync::atomic::AtomicBool::default());
|
||||||
let using_internal_features_hook = using_internal_features.clone();
|
let using_internal_features_hook = Arc::clone(&using_internal_features);
|
||||||
panic::update_hook(Box::new(
|
panic::update_hook(Box::new(
|
||||||
move |default_hook: &(dyn Fn(&PanicHookInfo<'_>) + Send + Sync + 'static),
|
move |default_hook: &(dyn Fn(&PanicHookInfo<'_>) + Send + Sync + 'static),
|
||||||
info: &PanicHookInfo<'_>| {
|
info: &PanicHookInfo<'_>| {
|
||||||
|
@ -173,7 +173,7 @@ impl AnnotateSnippetEmitter {
|
|||||||
source_map.ensure_source_file_source_present(&file);
|
source_map.ensure_source_file_source_present(&file);
|
||||||
(
|
(
|
||||||
format!("{}", source_map.filename_for_diagnostics(&file.name)),
|
format!("{}", source_map.filename_for_diagnostics(&file.name)),
|
||||||
source_string(file.clone(), &line),
|
source_string(Lrc::clone(&file), &line),
|
||||||
line.line_index,
|
line.line_index,
|
||||||
line.annotations,
|
line.annotations,
|
||||||
)
|
)
|
||||||
|
@ -1555,7 +1555,7 @@ impl HumanEmitter {
|
|||||||
// Get the left-side margin to remove it
|
// Get the left-side margin to remove it
|
||||||
let mut whitespace_margin = usize::MAX;
|
let mut whitespace_margin = usize::MAX;
|
||||||
for line_idx in 0..annotated_file.lines.len() {
|
for line_idx in 0..annotated_file.lines.len() {
|
||||||
let file = annotated_file.file.clone();
|
let file = Lrc::clone(&annotated_file.file);
|
||||||
let line = &annotated_file.lines[line_idx];
|
let line = &annotated_file.lines[line_idx];
|
||||||
if let Some(source_string) =
|
if let Some(source_string) =
|
||||||
line.line_index.checked_sub(1).and_then(|l| file.get_line(l))
|
line.line_index.checked_sub(1).and_then(|l| file.get_line(l))
|
||||||
@ -1646,7 +1646,7 @@ impl HumanEmitter {
|
|||||||
|
|
||||||
let depths = self.render_source_line(
|
let depths = self.render_source_line(
|
||||||
&mut buffer,
|
&mut buffer,
|
||||||
annotated_file.file.clone(),
|
Lrc::clone(&annotated_file.file),
|
||||||
&annotated_file.lines[line_idx],
|
&annotated_file.lines[line_idx],
|
||||||
width_offset,
|
width_offset,
|
||||||
code_offset,
|
code_offset,
|
||||||
@ -2529,7 +2529,12 @@ impl FileWithAnnotatedLines {
|
|||||||
// | | |
|
// | | |
|
||||||
// | |______foo
|
// | |______foo
|
||||||
// | baz
|
// | baz
|
||||||
add_annotation_to_file(&mut output, file.clone(), ann.line_start, ann.as_start());
|
add_annotation_to_file(
|
||||||
|
&mut output,
|
||||||
|
Lrc::clone(&file),
|
||||||
|
ann.line_start,
|
||||||
|
ann.as_start(),
|
||||||
|
);
|
||||||
// 4 is the minimum vertical length of a multiline span when presented: two lines
|
// 4 is the minimum vertical length of a multiline span when presented: two lines
|
||||||
// of code and two lines of underline. This is not true for the special case where
|
// of code and two lines of underline. This is not true for the special case where
|
||||||
// the beginning doesn't have an underline, but the current logic seems to be
|
// the beginning doesn't have an underline, but the current logic seems to be
|
||||||
@ -2545,11 +2550,11 @@ impl FileWithAnnotatedLines {
|
|||||||
.unwrap_or(ann.line_start);
|
.unwrap_or(ann.line_start);
|
||||||
for line in ann.line_start + 1..until {
|
for line in ann.line_start + 1..until {
|
||||||
// Every `|` that joins the beginning of the span (`___^`) to the end (`|__^`).
|
// Every `|` that joins the beginning of the span (`___^`) to the end (`|__^`).
|
||||||
add_annotation_to_file(&mut output, file.clone(), line, ann.as_line());
|
add_annotation_to_file(&mut output, Lrc::clone(&file), line, ann.as_line());
|
||||||
}
|
}
|
||||||
let line_end = ann.line_end - 1;
|
let line_end = ann.line_end - 1;
|
||||||
if middle < line_end {
|
if middle < line_end {
|
||||||
add_annotation_to_file(&mut output, file.clone(), line_end, ann.as_line());
|
add_annotation_to_file(&mut output, Lrc::clone(&file), line_end, ann.as_line());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
end_ann.annotation_type = AnnotationType::Singleline;
|
end_ann.annotation_type = AnnotationType::Singleline;
|
||||||
|
@ -367,9 +367,9 @@ impl Diagnostic {
|
|||||||
ColorConfig::Always | ColorConfig::Auto => dst = Box::new(termcolor::Ansi::new(dst)),
|
ColorConfig::Always | ColorConfig::Auto => dst = Box::new(termcolor::Ansi::new(dst)),
|
||||||
ColorConfig::Never => {}
|
ColorConfig::Never => {}
|
||||||
}
|
}
|
||||||
HumanEmitter::new(dst, je.fallback_bundle.clone())
|
HumanEmitter::new(dst, Lrc::clone(&je.fallback_bundle))
|
||||||
.short_message(short)
|
.short_message(short)
|
||||||
.sm(Some(je.sm.clone()))
|
.sm(Some(Lrc::clone(&je.sm)))
|
||||||
.fluent_bundle(je.fluent_bundle.clone())
|
.fluent_bundle(je.fluent_bundle.clone())
|
||||||
.diagnostic_width(je.diagnostic_width)
|
.diagnostic_width(je.diagnostic_width)
|
||||||
.macro_backtrace(je.macro_backtrace)
|
.macro_backtrace(je.macro_backtrace)
|
||||||
|
@ -622,7 +622,7 @@ impl TtParser {
|
|||||||
// possible next positions into `next_mps`. After some post-processing, the contents of
|
// possible next positions into `next_mps`. After some post-processing, the contents of
|
||||||
// `next_mps` replenish `cur_mps` and we start over again.
|
// `next_mps` replenish `cur_mps` and we start over again.
|
||||||
self.cur_mps.clear();
|
self.cur_mps.clear();
|
||||||
self.cur_mps.push(MatcherPos { idx: 0, matches: self.empty_matches.clone() });
|
self.cur_mps.push(MatcherPos { idx: 0, matches: Rc::clone(&self.empty_matches) });
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
self.next_mps.clear();
|
self.next_mps.clear();
|
||||||
|
@ -5,6 +5,7 @@ use rustc_ast::mut_visit::{self, MutVisitor};
|
|||||||
use rustc_ast::token::{self, Delimiter, IdentIsRaw, Lit, LitKind, Nonterminal, Token, TokenKind};
|
use rustc_ast::token::{self, Delimiter, IdentIsRaw, Lit, LitKind, Nonterminal, Token, TokenKind};
|
||||||
use rustc_ast::tokenstream::{DelimSpacing, DelimSpan, Spacing, TokenStream, TokenTree};
|
use rustc_ast::tokenstream::{DelimSpacing, DelimSpan, Spacing, TokenStream, TokenTree};
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_errors::{Diag, DiagCtxtHandle, PResult, pluralize};
|
use rustc_errors::{Diag, DiagCtxtHandle, PResult, pluralize};
|
||||||
use rustc_parse::lexer::nfc_normalize;
|
use rustc_parse::lexer::nfc_normalize;
|
||||||
use rustc_parse::parser::ParseNtResult;
|
use rustc_parse::parser::ParseNtResult;
|
||||||
@ -293,7 +294,7 @@ pub(super) fn transcribe<'a>(
|
|||||||
// `Delimiter::Invisible` to maintain parsing priorities.
|
// `Delimiter::Invisible` to maintain parsing priorities.
|
||||||
// `Interpolated` is currently used for such groups in rustc parser.
|
// `Interpolated` is currently used for such groups in rustc parser.
|
||||||
marker.visit_span(&mut sp);
|
marker.visit_span(&mut sp);
|
||||||
TokenTree::token_alone(token::Interpolated(nt.clone()), sp)
|
TokenTree::token_alone(token::Interpolated(Lrc::clone(nt)), sp)
|
||||||
}
|
}
|
||||||
MatchedSeq(..) => {
|
MatchedSeq(..) => {
|
||||||
// We were unable to descend far enough. This is an error.
|
// We were unable to descend far enough. This is an error.
|
||||||
|
@ -364,7 +364,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||||||
span,
|
span,
|
||||||
concrete_ty,
|
concrete_ty,
|
||||||
r,
|
r,
|
||||||
choice_regions.clone(),
|
Lrc::clone(&choice_regions),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -142,7 +142,7 @@ impl Linker {
|
|||||||
|
|
||||||
Ok(Linker {
|
Ok(Linker {
|
||||||
dep_graph: tcx.dep_graph.clone(),
|
dep_graph: tcx.dep_graph.clone(),
|
||||||
output_filenames: tcx.output_filenames(()).clone(),
|
output_filenames: Arc::clone(tcx.output_filenames(())),
|
||||||
crate_hash: if tcx.needs_crate_hash() {
|
crate_hash: if tcx.needs_crate_hash() {
|
||||||
Some(tcx.crate_hash(LOCAL_CRATE))
|
Some(tcx.crate_hash(LOCAL_CRATE))
|
||||||
} else {
|
} else {
|
||||||
|
@ -278,7 +278,7 @@ impl<'a, 'tcx> Encodable<EncodeContext<'a, 'tcx>> for SpanData {
|
|||||||
let source_map = s.tcx.sess.source_map();
|
let source_map = s.tcx.sess.source_map();
|
||||||
let source_file_index = source_map.lookup_source_file_idx(self.lo);
|
let source_file_index = source_map.lookup_source_file_idx(self.lo);
|
||||||
s.source_file_cache =
|
s.source_file_cache =
|
||||||
(source_map.files()[source_file_index].clone(), source_file_index);
|
(Lrc::clone(&source_map.files()[source_file_index]), source_file_index);
|
||||||
}
|
}
|
||||||
let (ref source_file, source_file_index) = s.source_file_cache;
|
let (ref source_file, source_file_index) = s.source_file_cache;
|
||||||
debug_assert!(source_file.contains(self.lo));
|
debug_assert!(source_file.contains(self.lo));
|
||||||
@ -2275,7 +2275,7 @@ pub fn encode_metadata(tcx: TyCtxt<'_>, path: &Path) {
|
|||||||
encoder.emit_raw_bytes(&0u64.to_le_bytes());
|
encoder.emit_raw_bytes(&0u64.to_le_bytes());
|
||||||
|
|
||||||
let source_map_files = tcx.sess.source_map().files();
|
let source_map_files = tcx.sess.source_map().files();
|
||||||
let source_file_cache = (source_map_files[0].clone(), 0);
|
let source_file_cache = (Lrc::clone(&source_map_files[0]), 0);
|
||||||
let required_source_files = Some(FxIndexSet::default());
|
let required_source_files = Some(FxIndexSet::default());
|
||||||
drop(source_map_files);
|
drop(source_map_files);
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ impl DebuggerVisualizerFile {
|
|||||||
|
|
||||||
pub fn path_erased(&self) -> Self {
|
pub fn path_erased(&self) -> Self {
|
||||||
DebuggerVisualizerFile {
|
DebuggerVisualizerFile {
|
||||||
src: self.src.clone(),
|
src: Lrc::clone(&self.src),
|
||||||
visualizer_type: self.visualizer_type,
|
visualizer_type: self.visualizer_type,
|
||||||
path: None,
|
path: None,
|
||||||
}
|
}
|
||||||
|
@ -472,32 +472,27 @@ impl<'a, 'tcx> CacheDecoder<'a, 'tcx> {
|
|||||||
let CacheDecoder { tcx, file_index_to_file, file_index_to_stable_id, source_map, .. } =
|
let CacheDecoder { tcx, file_index_to_file, file_index_to_stable_id, source_map, .. } =
|
||||||
*self;
|
*self;
|
||||||
|
|
||||||
file_index_to_file
|
Lrc::clone(file_index_to_file.borrow_mut().entry(index).or_insert_with(|| {
|
||||||
.borrow_mut()
|
let source_file_id = &file_index_to_stable_id[&index];
|
||||||
.entry(index)
|
let source_file_cnum = tcx.stable_crate_id_to_crate_num(source_file_id.stable_crate_id);
|
||||||
.or_insert_with(|| {
|
|
||||||
let source_file_id = &file_index_to_stable_id[&index];
|
|
||||||
let source_file_cnum =
|
|
||||||
tcx.stable_crate_id_to_crate_num(source_file_id.stable_crate_id);
|
|
||||||
|
|
||||||
// If this `SourceFile` is from a foreign crate, then make sure
|
// If this `SourceFile` is from a foreign crate, then make sure
|
||||||
// that we've imported all of the source files from that crate.
|
// that we've imported all of the source files from that crate.
|
||||||
// This has usually already been done during macro invocation.
|
// This has usually already been done during macro invocation.
|
||||||
// However, when encoding query results like `TypeckResults`,
|
// However, when encoding query results like `TypeckResults`,
|
||||||
// we might encode an `AdtDef` for a foreign type (because it
|
// we might encode an `AdtDef` for a foreign type (because it
|
||||||
// was referenced in the body of the function). There is no guarantee
|
// was referenced in the body of the function). There is no guarantee
|
||||||
// that we will load the source files from that crate during macro
|
// that we will load the source files from that crate during macro
|
||||||
// expansion, so we use `import_source_files` to ensure that the foreign
|
// expansion, so we use `import_source_files` to ensure that the foreign
|
||||||
// source files are actually imported before we call `source_file_by_stable_id`.
|
// source files are actually imported before we call `source_file_by_stable_id`.
|
||||||
if source_file_cnum != LOCAL_CRATE {
|
if source_file_cnum != LOCAL_CRATE {
|
||||||
self.tcx.import_source_files(source_file_cnum);
|
self.tcx.import_source_files(source_file_cnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
source_map
|
source_map
|
||||||
.source_file_by_stable_id(source_file_id.stable_source_file_id)
|
.source_file_by_stable_id(source_file_id.stable_source_file_id)
|
||||||
.expect("failed to lookup `SourceFile` in new context")
|
.expect("failed to lookup `SourceFile` in new context")
|
||||||
})
|
}))
|
||||||
.clone()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ use rustc_ast::{
|
|||||||
};
|
};
|
||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_errors::{
|
use rustc_errors::{
|
||||||
Applicability, Diag, DiagCtxtHandle, ErrorGuaranteed, FatalError, PErr, PResult, Subdiagnostic,
|
Applicability, Diag, DiagCtxtHandle, ErrorGuaranteed, FatalError, PErr, PResult, Subdiagnostic,
|
||||||
Suggestions, pluralize,
|
Suggestions, pluralize,
|
||||||
@ -2437,7 +2438,7 @@ impl<'a> Parser<'a> {
|
|||||||
let mut labels = vec![];
|
let mut labels = vec![];
|
||||||
while let TokenKind::Interpolated(nt) = &tok.kind {
|
while let TokenKind::Interpolated(nt) = &tok.kind {
|
||||||
let tokens = nt.tokens();
|
let tokens = nt.tokens();
|
||||||
labels.push(nt.clone());
|
labels.push(Lrc::clone(nt));
|
||||||
if let Some(tokens) = tokens
|
if let Some(tokens) = tokens
|
||||||
&& let tokens = tokens.to_attr_token_stream()
|
&& let tokens = tokens.to_attr_token_stream()
|
||||||
&& let tokens = tokens.0.deref()
|
&& let tokens = tokens.0.deref()
|
||||||
|
@ -134,7 +134,7 @@ impl<D: Deps> DepGraph<D> {
|
|||||||
encoder,
|
encoder,
|
||||||
record_graph,
|
record_graph,
|
||||||
record_stats,
|
record_stats,
|
||||||
prev_graph.clone(),
|
Arc::clone(&prev_graph),
|
||||||
);
|
);
|
||||||
|
|
||||||
let colors = DepNodeColorMap::new(prev_graph_node_count);
|
let colors = DepNodeColorMap::new(prev_graph_node_count);
|
||||||
|
@ -237,7 +237,7 @@ impl QueryLatch {
|
|||||||
// the `wait` call below, by 1) the `set` method or 2) by deadlock detection.
|
// the `wait` call below, by 1) the `set` method or 2) by deadlock detection.
|
||||||
// Both of these will remove it from the `waiters` list before resuming
|
// Both of these will remove it from the `waiters` list before resuming
|
||||||
// this thread.
|
// this thread.
|
||||||
info.waiters.push(waiter.clone());
|
info.waiters.push(Arc::clone(waiter));
|
||||||
|
|
||||||
// If this detects a deadlock and the deadlock handler wants to resume this thread
|
// If this detects a deadlock and the deadlock handler wants to resume this thread
|
||||||
// we have to be in the `wait` call. This is ensured by the deadlock handler
|
// we have to be in the `wait` call. This is ensured by the deadlock handler
|
||||||
|
@ -1694,9 +1694,9 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
|
|||||||
|
|
||||||
fn dummy_ext(&self, macro_kind: MacroKind) -> Lrc<SyntaxExtension> {
|
fn dummy_ext(&self, macro_kind: MacroKind) -> Lrc<SyntaxExtension> {
|
||||||
match macro_kind {
|
match macro_kind {
|
||||||
MacroKind::Bang => self.dummy_ext_bang.clone(),
|
MacroKind::Bang => Lrc::clone(&self.dummy_ext_bang),
|
||||||
MacroKind::Derive => self.dummy_ext_derive.clone(),
|
MacroKind::Derive => Lrc::clone(&self.dummy_ext_derive),
|
||||||
MacroKind::Attr => self.non_macro_attr.ext.clone(),
|
MacroKind::Attr => Lrc::clone(&self.non_macro_attr.ext),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -826,7 +826,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
|
|||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
},
|
},
|
||||||
None => self.get_macro(res).map(|macro_data| macro_data.ext.clone()),
|
None => self.get_macro(res).map(|macro_data| Lrc::clone(¯o_data.ext)),
|
||||||
};
|
};
|
||||||
Ok((ext, res))
|
Ok((ext, res))
|
||||||
}
|
}
|
||||||
|
@ -241,7 +241,7 @@ impl ParseSess {
|
|||||||
let sm = Lrc::new(SourceMap::new(FilePathMapping::empty()));
|
let sm = Lrc::new(SourceMap::new(FilePathMapping::empty()));
|
||||||
let emitter = Box::new(
|
let emitter = Box::new(
|
||||||
HumanEmitter::new(stderr_destination(ColorConfig::Auto), fallback_bundle)
|
HumanEmitter::new(stderr_destination(ColorConfig::Auto), fallback_bundle)
|
||||||
.sm(Some(sm.clone())),
|
.sm(Some(Lrc::clone(&sm))),
|
||||||
);
|
);
|
||||||
let dcx = DiagCtxt::new(emitter);
|
let dcx = DiagCtxt::new(emitter);
|
||||||
ParseSess::with_dcx(dcx, sm)
|
ParseSess::with_dcx(dcx, sm)
|
||||||
@ -278,7 +278,7 @@ impl ParseSess {
|
|||||||
let sm = Lrc::new(SourceMap::new(FilePathMapping::empty()));
|
let sm = Lrc::new(SourceMap::new(FilePathMapping::empty()));
|
||||||
let emitter = Box::new(HumanEmitter::new(
|
let emitter = Box::new(HumanEmitter::new(
|
||||||
stderr_destination(ColorConfig::Auto),
|
stderr_destination(ColorConfig::Auto),
|
||||||
fallback_bundle.clone(),
|
Lrc::clone(&fallback_bundle),
|
||||||
));
|
));
|
||||||
let fatal_dcx = DiagCtxt::new(emitter);
|
let fatal_dcx = DiagCtxt::new(emitter);
|
||||||
let dcx = DiagCtxt::new(Box::new(SilentEmitter {
|
let dcx = DiagCtxt::new(Box::new(SilentEmitter {
|
||||||
@ -297,7 +297,7 @@ impl ParseSess {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn clone_source_map(&self) -> Lrc<SourceMap> {
|
pub fn clone_source_map(&self) -> Lrc<SourceMap> {
|
||||||
self.source_map.clone()
|
Lrc::clone(&self.source_map)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn buffer_lint(
|
pub fn buffer_lint(
|
||||||
|
@ -1036,7 +1036,8 @@ pub fn build_session(
|
|||||||
sopts.unstable_opts.translate_directionality_markers,
|
sopts.unstable_opts.translate_directionality_markers,
|
||||||
);
|
);
|
||||||
let source_map = rustc_span::source_map::get_source_map().unwrap();
|
let source_map = rustc_span::source_map::get_source_map().unwrap();
|
||||||
let emitter = default_emitter(&sopts, registry, source_map.clone(), bundle, fallback_bundle);
|
let emitter =
|
||||||
|
default_emitter(&sopts, registry, Lrc::clone(&source_map), bundle, fallback_bundle);
|
||||||
|
|
||||||
let mut dcx =
|
let mut dcx =
|
||||||
DiagCtxt::new(emitter).with_flags(sopts.unstable_opts.dcx_flags(can_emit_warnings));
|
DiagCtxt::new(emitter).with_flags(sopts.unstable_opts.dcx_flags(can_emit_warnings));
|
||||||
@ -1079,7 +1080,7 @@ pub fn build_session(
|
|||||||
let target_tlib_path = if host_triple == target_triple {
|
let target_tlib_path = if host_triple == target_triple {
|
||||||
// Use the same `SearchPath` if host and target triple are identical to avoid unnecessary
|
// Use the same `SearchPath` if host and target triple are identical to avoid unnecessary
|
||||||
// rescanning of the target lib path and an unnecessary allocation.
|
// rescanning of the target lib path and an unnecessary allocation.
|
||||||
host_tlib_path.clone()
|
Lrc::clone(&host_tlib_path)
|
||||||
} else {
|
} else {
|
||||||
Lrc::new(SearchPath::from_sysroot_and_triple(&sysroot, target_triple))
|
Lrc::new(SearchPath::from_sysroot_and_triple(&sysroot, target_triple))
|
||||||
};
|
};
|
||||||
|
@ -63,7 +63,7 @@ pub struct CachingSourceMapView<'sm> {
|
|||||||
impl<'sm> CachingSourceMapView<'sm> {
|
impl<'sm> CachingSourceMapView<'sm> {
|
||||||
pub fn new(source_map: &'sm SourceMap) -> CachingSourceMapView<'sm> {
|
pub fn new(source_map: &'sm SourceMap) -> CachingSourceMapView<'sm> {
|
||||||
let files = source_map.files();
|
let files = source_map.files();
|
||||||
let first_file = files[0].clone();
|
let first_file = Lrc::clone(&files[0]);
|
||||||
let entry = CacheEntry {
|
let entry = CacheEntry {
|
||||||
time_stamp: 0,
|
time_stamp: 0,
|
||||||
line_number: 0,
|
line_number: 0,
|
||||||
@ -92,7 +92,7 @@ impl<'sm> CachingSourceMapView<'sm> {
|
|||||||
cache_entry.touch(self.time_stamp);
|
cache_entry.touch(self.time_stamp);
|
||||||
|
|
||||||
let col = RelativeBytePos(pos.to_u32() - cache_entry.line.start.to_u32());
|
let col = RelativeBytePos(pos.to_u32() - cache_entry.line.start.to_u32());
|
||||||
return Some((cache_entry.file.clone(), cache_entry.line_number, col));
|
return Some((Lrc::clone(&cache_entry.file), cache_entry.line_number, col));
|
||||||
}
|
}
|
||||||
|
|
||||||
// No cache hit ...
|
// No cache hit ...
|
||||||
@ -109,7 +109,7 @@ impl<'sm> CachingSourceMapView<'sm> {
|
|||||||
cache_entry.update(new_file_and_idx, pos, self.time_stamp);
|
cache_entry.update(new_file_and_idx, pos, self.time_stamp);
|
||||||
|
|
||||||
let col = RelativeBytePos(pos.to_u32() - cache_entry.line.start.to_u32());
|
let col = RelativeBytePos(pos.to_u32() - cache_entry.line.start.to_u32());
|
||||||
Some((cache_entry.file.clone(), cache_entry.line_number, col))
|
Some((Lrc::clone(&cache_entry.file), cache_entry.line_number, col))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn span_data_to_lines_and_cols(
|
pub fn span_data_to_lines_and_cols(
|
||||||
@ -133,7 +133,7 @@ impl<'sm> CachingSourceMapView<'sm> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
(
|
(
|
||||||
lo.file.clone(),
|
Lrc::clone(&lo.file),
|
||||||
lo.line_number,
|
lo.line_number,
|
||||||
span_data.lo - lo.line.start,
|
span_data.lo - lo.line.start,
|
||||||
hi.line_number,
|
hi.line_number,
|
||||||
@ -181,7 +181,7 @@ impl<'sm> CachingSourceMapView<'sm> {
|
|||||||
lo.update(new_file_and_idx, span_data.lo, self.time_stamp);
|
lo.update(new_file_and_idx, span_data.lo, self.time_stamp);
|
||||||
|
|
||||||
if !lo.line.contains(&span_data.hi) {
|
if !lo.line.contains(&span_data.hi) {
|
||||||
let new_file_and_idx = Some((lo.file.clone(), lo.file_index));
|
let new_file_and_idx = Some((Lrc::clone(&lo.file), lo.file_index));
|
||||||
let next_oldest = self.oldest_cache_entry_index_avoid(oldest);
|
let next_oldest = self.oldest_cache_entry_index_avoid(oldest);
|
||||||
let hi = &mut self.line_cache[next_oldest];
|
let hi = &mut self.line_cache[next_oldest];
|
||||||
hi.update(new_file_and_idx, span_data.hi, self.time_stamp);
|
hi.update(new_file_and_idx, span_data.hi, self.time_stamp);
|
||||||
@ -227,7 +227,7 @@ impl<'sm> CachingSourceMapView<'sm> {
|
|||||||
assert_eq!(lo.file_index, hi.file_index);
|
assert_eq!(lo.file_index, hi.file_index);
|
||||||
|
|
||||||
Some((
|
Some((
|
||||||
lo.file.clone(),
|
Lrc::clone(&lo.file),
|
||||||
lo.line_number,
|
lo.line_number,
|
||||||
span_data.lo - lo.line.start,
|
span_data.lo - lo.line.start,
|
||||||
hi.line_number,
|
hi.line_number,
|
||||||
@ -277,7 +277,7 @@ impl<'sm> CachingSourceMapView<'sm> {
|
|||||||
let file = &self.source_map.files()[file_idx];
|
let file = &self.source_map.files()[file_idx];
|
||||||
|
|
||||||
if file_contains(file, pos) {
|
if file_contains(file, pos) {
|
||||||
return Some((file.clone(), file_idx));
|
return Some((Lrc::clone(file), file_idx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,8 +286,8 @@ impl SourceMap {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let file = Lrc::new(file);
|
let file = Lrc::new(file);
|
||||||
files.source_files.push(file.clone());
|
files.source_files.push(Lrc::clone(&file));
|
||||||
files.stable_id_to_source_file.insert(file_id, file.clone());
|
files.stable_id_to_source_file.insert(file_id, Lrc::clone(&file));
|
||||||
|
|
||||||
Ok(file)
|
Ok(file)
|
||||||
}
|
}
|
||||||
@ -386,7 +386,7 @@ impl SourceMap {
|
|||||||
/// Return the SourceFile that contains the given `BytePos`
|
/// Return the SourceFile that contains the given `BytePos`
|
||||||
pub fn lookup_source_file(&self, pos: BytePos) -> Lrc<SourceFile> {
|
pub fn lookup_source_file(&self, pos: BytePos) -> Lrc<SourceFile> {
|
||||||
let idx = self.lookup_source_file_idx(pos);
|
let idx = self.lookup_source_file_idx(pos);
|
||||||
(*self.files.borrow().source_files)[idx].clone()
|
Lrc::clone(&(*self.files.borrow().source_files)[idx])
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Looks up source information about a `BytePos`.
|
/// Looks up source information about a `BytePos`.
|
||||||
@ -468,7 +468,7 @@ impl SourceMap {
|
|||||||
if lo != hi {
|
if lo != hi {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
let f = (*self.files.borrow().source_files)[lo].clone();
|
let f = Lrc::clone(&(*self.files.borrow().source_files)[lo]);
|
||||||
let lo = f.relative_position(sp.lo());
|
let lo = f.relative_position(sp.lo());
|
||||||
let hi = f.relative_position(sp.hi());
|
let hi = f.relative_position(sp.hi());
|
||||||
f.lookup_line(lo) != f.lookup_line(hi)
|
f.lookup_line(lo) != f.lookup_line(hi)
|
||||||
@ -994,7 +994,7 @@ impl SourceMap {
|
|||||||
let filename = self.path_mapping().map_filename_prefix(filename).0;
|
let filename = self.path_mapping().map_filename_prefix(filename).0;
|
||||||
for sf in self.files.borrow().source_files.iter() {
|
for sf in self.files.borrow().source_files.iter() {
|
||||||
if filename == sf.name {
|
if filename == sf.name {
|
||||||
return Some(sf.clone());
|
return Some(Lrc::clone(&sf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
@ -1003,7 +1003,7 @@ impl SourceMap {
|
|||||||
/// For a global `BytePos`, computes the local offset within the containing `SourceFile`.
|
/// For a global `BytePos`, computes the local offset within the containing `SourceFile`.
|
||||||
pub fn lookup_byte_offset(&self, bpos: BytePos) -> SourceFileAndBytePos {
|
pub fn lookup_byte_offset(&self, bpos: BytePos) -> SourceFileAndBytePos {
|
||||||
let idx = self.lookup_source_file_idx(bpos);
|
let idx = self.lookup_source_file_idx(bpos);
|
||||||
let sf = (*self.files.borrow().source_files)[idx].clone();
|
let sf = Lrc::clone(&(*self.files.borrow().source_files)[idx]);
|
||||||
let offset = bpos - sf.start_pos;
|
let offset = bpos - sf.start_pos;
|
||||||
SourceFileAndBytePos { sf, pos: offset }
|
SourceFileAndBytePos { sf, pos: offset }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user