@@ -15,7 +15,7 @@ use crate::{universal_regions::DefiningTy, MirBorrowckCtxt};
15
15
16
16
/// A name for a particular region used in emitting diagnostics. This name could be a generated
17
17
/// name like `'1`, a name used by the user like `'a`, or a name like `'static`.
18
- #[ derive( Debug , Clone ) ]
18
+ #[ derive( Debug , Clone , Copy ) ]
19
19
pub ( crate ) struct RegionName {
20
20
/// The name of the region (interned).
21
21
pub ( crate ) name : Symbol ,
@@ -26,7 +26,7 @@ pub(crate) struct RegionName {
26
26
/// Denotes the source of a region that is named by a `RegionName`. For example, a free region that
27
27
/// was named by the user would get `NamedLateParamRegion` and `'static` lifetime would get `Static`.
28
28
/// This helps to print the right kinds of diagnostics.
29
- #[ derive( Debug , Clone ) ]
29
+ #[ derive( Debug , Clone , Copy ) ]
30
30
pub ( crate ) enum RegionNameSource {
31
31
/// A bound (not free) region that was instantiated at the def site (not an HRTB).
32
32
NamedEarlyParamRegion ( Span ) ,
@@ -43,7 +43,7 @@ pub(crate) enum RegionNameSource {
43
43
/// The region corresponding to the return type of a closure.
44
44
AnonRegionFromOutput ( RegionNameHighlight , & ' static str ) ,
45
45
/// The region from a type yielded by a coroutine.
46
- AnonRegionFromYieldTy ( Span , String ) ,
46
+ AnonRegionFromYieldTy ( Span , Symbol ) ,
47
47
/// An anonymous region from an async fn.
48
48
AnonRegionFromAsyncFn ( Span ) ,
49
49
/// An anonymous region from an impl self type or trait
@@ -52,19 +52,19 @@ pub(crate) enum RegionNameSource {
52
52
53
53
/// Describes what to highlight to explain to the user that we're giving an anonymous region a
54
54
/// synthesized name, and how to highlight it.
55
- #[ derive( Debug , Clone ) ]
55
+ #[ derive( Debug , Clone , Copy ) ]
56
56
pub ( crate ) enum RegionNameHighlight {
57
57
/// The anonymous region corresponds to a reference that was found by traversing the type in the HIR.
58
58
MatchedHirTy ( Span ) ,
59
59
/// The anonymous region corresponds to a `'_` in the generics list of a struct/enum/union.
60
60
MatchedAdtAndSegment ( Span ) ,
61
61
/// The anonymous region corresponds to a region where the type annotation is completely missing
62
62
/// from the code, e.g. in a closure arguments `|x| { ... }`, where `x` is a reference.
63
- CannotMatchHirTy ( Span , String ) ,
63
+ CannotMatchHirTy ( Span , Symbol ) ,
64
64
/// The anonymous region corresponds to a region where the type annotation is completely missing
65
65
/// from the code, and *even if* we print out the full name of the type, the region name won't
66
66
/// be included. This currently occurs for opaque types like `impl Future`.
67
- Occluded ( Span , String ) ,
67
+ Occluded ( Span , Symbol ) ,
68
68
}
69
69
70
70
impl RegionName {
@@ -249,7 +249,7 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
249
249
assert ! ( self . regioncx. universal_regions( ) . is_universal_region( fr) ) ;
250
250
251
251
match self . region_names . borrow_mut ( ) . entry ( fr) {
252
- IndexEntry :: Occupied ( precomputed_name) => Some ( precomputed_name. get ( ) . clone ( ) ) ,
252
+ IndexEntry :: Occupied ( precomputed_name) => Some ( * precomputed_name. get ( ) ) ,
253
253
IndexEntry :: Vacant ( slot) => {
254
254
let new_name = self
255
255
. give_name_from_error_region ( fr)
@@ -262,8 +262,8 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
262
262
self . give_name_if_anonymous_region_appears_in_arg_position_impl_trait ( fr)
263
263
} ) ;
264
264
265
- if let Some ( new_name) = & new_name {
266
- slot. insert ( new_name. clone ( ) ) ;
265
+ if let Some ( new_name) = new_name {
266
+ slot. insert ( new_name) ;
267
267
}
268
268
debug ! ( "give_region_a_name: gave name {:?}" , new_name) ;
269
269
@@ -460,9 +460,9 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
460
460
) ;
461
461
if type_name. contains ( & format ! ( "'{counter}" ) ) {
462
462
// Only add a label if we can confirm that a region was labelled.
463
- RegionNameHighlight :: CannotMatchHirTy ( span, type_name)
463
+ RegionNameHighlight :: CannotMatchHirTy ( span, Symbol :: intern ( & type_name) )
464
464
} else {
465
- RegionNameHighlight :: Occluded ( span, type_name)
465
+ RegionNameHighlight :: Occluded ( span, Symbol :: intern ( & type_name) )
466
466
}
467
467
}
468
468
@@ -882,7 +882,7 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
882
882
883
883
Some ( RegionName {
884
884
name : self . synthesize_region_name ( ) ,
885
- source : RegionNameSource :: AnonRegionFromYieldTy ( yield_span, type_name) ,
885
+ source : RegionNameSource :: AnonRegionFromYieldTy ( yield_span, Symbol :: intern ( & type_name) ) ,
886
886
} )
887
887
}
888
888
@@ -974,7 +974,7 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
974
974
Some ( RegionName {
975
975
name : region_name,
976
976
source : RegionNameSource :: AnonRegionFromArgument (
977
- RegionNameHighlight :: CannotMatchHirTy ( arg_span, arg_name?. to_string ( ) ) ,
977
+ RegionNameHighlight :: CannotMatchHirTy ( arg_span, arg_name?) ,
978
978
) ,
979
979
} )
980
980
} else {
0 commit comments