@@ -4,12 +4,11 @@ use std::{
4
4
hash:: { Hash , Hasher } ,
5
5
sync:: {
6
6
atomic:: { AtomicBool , Ordering } ,
7
- Arc ,
7
+ Arc , Mutex , MutexGuard ,
8
8
} ,
9
9
} ;
10
10
11
11
use once_cell:: sync:: OnceCell ;
12
- use parking_lot:: Mutex ;
13
12
use rustc_hash:: FxHashMap as HashMap ;
14
13
15
14
use crate :: {
@@ -103,13 +102,16 @@ impl<T> ReplaceSource<T> {
103
102
& self . inner
104
103
}
105
104
105
+ fn replacements ( & self ) -> MutexGuard < Vec < Replacement > > {
106
+ self . replacements . lock ( ) . unwrap ( )
107
+ }
108
+
106
109
fn sort_replacement ( & self ) {
107
110
if self . is_sorted . load ( Ordering :: SeqCst ) {
108
111
return ;
109
112
}
110
113
self
111
- . replacements
112
- . lock ( )
114
+ . replacements ( )
113
115
. sort_by ( |a, b| ( a. start , a. end ) . cmp ( & ( b. start , b. end ) ) ) ;
114
116
self . is_sorted . store ( true , Ordering :: SeqCst )
115
117
}
@@ -135,7 +137,7 @@ impl<T: Source> ReplaceSource<T> {
135
137
content : & str ,
136
138
name : Option < & str > ,
137
139
) {
138
- self . replacements . lock ( ) . push ( Replacement :: new (
140
+ self . replacements ( ) . push ( Replacement :: new (
139
141
start,
140
142
end,
141
143
content. into ( ) ,
@@ -155,7 +157,7 @@ impl<T: Source + Hash + PartialEq + Eq + 'static> Source for ReplaceSource<T> {
155
157
// concatenate strings benchmark, see https://github.com/hoodie/concatenation_benchmarks-rs
156
158
let mut source_code = String :: new ( ) ;
157
159
let mut inner_pos = 0 ;
158
- for replacement in self . replacements . lock ( ) . iter ( ) {
160
+ for replacement in self . replacements . lock ( ) . unwrap ( ) . iter ( ) {
159
161
if inner_pos < replacement. start {
160
162
let end_pos = ( replacement. start as usize ) . min ( inner_source_code. len ( ) ) ;
161
163
source_code. push_str ( & inner_source_code[ inner_pos as usize ..end_pos] ) ;
@@ -185,7 +187,7 @@ impl<T: Source + Hash + PartialEq + Eq + 'static> Source for ReplaceSource<T> {
185
187
}
186
188
187
189
fn map ( & self , options : & crate :: MapOptions ) -> Option < SourceMap > {
188
- let replacements = self . replacements . lock ( ) ;
190
+ let replacements = self . replacements . lock ( ) . unwrap ( ) ;
189
191
if replacements. is_empty ( ) {
190
192
return self . inner . map ( options) ;
191
193
}
@@ -223,7 +225,7 @@ impl<T: std::fmt::Debug> std::fmt::Debug for ReplaceSource<T> {
223
225
224
226
impl < T : Source > StreamChunks for ReplaceSource < T > {
225
227
fn mappings_size_hint ( & self ) -> usize {
226
- self . replacements . lock ( ) . len ( ) * 2
228
+ self . replacements . lock ( ) . unwrap ( ) . len ( ) * 2
227
229
}
228
230
229
231
fn stream_chunks (
@@ -235,7 +237,7 @@ impl<T: Source> StreamChunks for ReplaceSource<T> {
235
237
) -> crate :: helpers:: GeneratedInfo {
236
238
self . sort_replacement ( ) ;
237
239
let on_name = RefCell :: new ( on_name) ;
238
- let repls = self . replacements . lock ( ) ;
240
+ let repls = self . replacements ( ) ;
239
241
let mut pos: u32 = 0 ;
240
242
let mut i: usize = 0 ;
241
243
let mut replacement_end: Option < u32 > = None ;
@@ -646,7 +648,7 @@ impl<T: Source> Clone for ReplaceSource<T> {
646
648
Self {
647
649
inner : self . inner . clone ( ) ,
648
650
inner_source_code : self . inner_source_code . clone ( ) ,
649
- replacements : Mutex :: new ( self . replacements . lock ( ) . clone ( ) ) ,
651
+ replacements : Mutex :: new ( self . replacements ( ) . clone ( ) ) ,
650
652
is_sorted : AtomicBool :: new ( true ) ,
651
653
}
652
654
}
@@ -656,7 +658,7 @@ impl<T: Hash> Hash for ReplaceSource<T> {
656
658
fn hash < H : Hasher > ( & self , state : & mut H ) {
657
659
self . sort_replacement ( ) ;
658
660
"ReplaceSource" . hash ( state) ;
659
- for repl in self . replacements . lock ( ) . iter ( ) {
661
+ for repl in self . replacements ( ) . iter ( ) {
660
662
repl. hash ( state) ;
661
663
}
662
664
self . inner . hash ( state) ;
@@ -665,8 +667,7 @@ impl<T: Hash> Hash for ReplaceSource<T> {
665
667
666
668
impl < T : PartialEq > PartialEq for ReplaceSource < T > {
667
669
fn eq ( & self , other : & Self ) -> bool {
668
- self . inner == other. inner
669
- && * self . replacements . lock ( ) == * other. replacements . lock ( )
670
+ self . inner == other. inner && * self . replacements ( ) == * other. replacements ( )
670
671
}
671
672
}
672
673
0 commit comments