1
1
use arrayvec:: ArrayVec ;
2
+ use core:: fmt;
2
3
use std:: {
3
4
borrow:: { BorrowMut , Cow } ,
4
5
cell:: RefCell ,
@@ -13,7 +14,7 @@ use crate::{
13
14
source:: { Mapping , OriginalLocation } ,
14
15
vlq:: decode,
15
16
with_indices:: WithIndices ,
16
- MapOptions , SourceMap ,
17
+ Error , MapOptions , SourceMap ,
17
18
} ;
18
19
19
20
// Adding this type because sourceContentLine not happy
@@ -210,29 +211,41 @@ impl<'a> Iterator for SegmentIter<'a> {
210
211
match self . next_segment ( ) {
211
212
Some ( segment) => {
212
213
self . nums . clear ( ) ;
213
- decode ( segment, & mut self . nums ) . unwrap ( ) ;
214
- self . generated_column =
215
- ( i64:: from ( self . generated_column ) + self . nums [ 0 ] ) as u32 ;
214
+ let mut vlq = decode ( segment) ;
215
+ self . generated_column = ( i64:: from ( self . generated_column )
216
+ + vlq
217
+ . next ( )
218
+ . unwrap_or_else ( || Err ( Error :: VlqNoValues ) )
219
+ . unwrap ( ) ) as u32 ;
216
220
217
221
let mut src = None ;
218
222
let mut name = None ;
219
223
220
- if self . nums . len ( ) > 1 {
221
- if self . nums . len ( ) != 4 && self . nums . len ( ) != 5 {
222
- panic ! ( "got {} segments, expected 4 or 5" , self . nums. len( ) ) ;
223
- }
224
+ if let Some ( source_index ) = vlq . next ( ) {
225
+ // if self.nums.len() != 4 && self.nums.len() != 5 {
226
+ // panic!("got {} segments, expected 4 or 5", self.nums.len());
227
+ // }
224
228
self . source_index =
225
- ( i64:: from ( self . source_index ) + self . nums [ 1 ] ) as u32 ;
229
+ ( i64:: from ( self . source_index ) + source_index . unwrap ( ) ) as u32 ;
226
230
src = Some ( self . source_index ) ;
227
- self . original_line =
228
- ( i64:: from ( self . original_line ) + self . nums [ 2 ] ) as u32 ;
229
- self . original_column =
230
- ( i64:: from ( self . original_column ) + self . nums [ 3 ] ) as u32 ;
231
-
232
- if self . nums . len ( ) > 4 {
233
- self . name_index =
234
- ( i64:: from ( self . name_index ) + self . nums [ 4 ] ) as u32 ;
235
- name = Some ( self . name_index ) ;
231
+ self . original_line = ( i64:: from ( self . original_line )
232
+ + vlq
233
+ . next ( )
234
+ . unwrap_or_else ( || Err ( Error :: VlqNoValues ) )
235
+ . unwrap ( ) ) as u32 ;
236
+ self . original_column = ( i64:: from ( self . original_column )
237
+ + vlq
238
+ . next ( )
239
+ . unwrap_or_else ( || Err ( Error :: VlqNoValues ) )
240
+ . unwrap ( ) ) as u32 ;
241
+
242
+ match vlq. next ( ) {
243
+ Some ( name_index) => {
244
+ self . name_index =
245
+ ( i64:: from ( self . name_index ) + name_index. unwrap ( ) ) as u32 ;
246
+ name = Some ( self . name_index )
247
+ }
248
+ None => ( ) ,
236
249
}
237
250
}
238
251
0 commit comments