1
1
//! part of the vcd parser that handles parsing the signal tree and
2
2
//! building the resulting signal tree
3
- use function_name:: named;
4
-
5
3
use super :: * ;
6
4
7
5
#[ derive( Debug ) ]
8
- pub ( super ) enum BinaryParserErrTypes { x_value , z_value , u_value , other_value ( char ) , too_long }
6
+ pub ( super ) enum BinaryParserErrTypes { XValue , ZValue , UValue , OtherValue ( char ) , TooLong }
9
7
10
8
// We build a quick and not so dirty bit string parser.
11
9
fn base2_str_to_byte ( word : & [ u8 ] ) -> Result < u8 , BinaryParserErrTypes > {
@@ -14,10 +12,7 @@ fn base2_str_to_byte(word : &[u8]) -> Result<u8, BinaryParserErrTypes> {
14
12
// shouldn't have more than 8 chars in str
15
13
let len = word. len ( ) ;
16
14
if len > 8 {
17
- let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
18
- let err = format ! (
19
- "Error near {f}:{l}. Base2 string has length {len} > 8." ) ;
20
- return Err ( BinaryParserErrTypes :: too_long)
15
+ return Err ( BinaryParserErrTypes :: TooLong )
21
16
}
22
17
23
18
let bit_lut = [
@@ -35,10 +30,10 @@ fn base2_str_to_byte(word : &[u8]) -> Result<u8, BinaryParserErrTypes> {
35
30
match chr {
36
31
b'1' => { val = bit_lut[ idx] | val}
37
32
b'0' => { }
38
- b'x' | b'X' => { return Err ( BinaryParserErrTypes :: x_value ) }
39
- b'z' | b'Z' => { return Err ( BinaryParserErrTypes :: z_value ) }
40
- b'u' | b'U' => { return Err ( BinaryParserErrTypes :: u_value ) }
41
- _ => { return Err ( BinaryParserErrTypes :: other_value ( * chr as char ) ) }
33
+ b'x' | b'X' => { return Err ( BinaryParserErrTypes :: XValue ) }
34
+ b'z' | b'Z' => { return Err ( BinaryParserErrTypes :: ZValue ) }
35
+ b'u' | b'U' => { return Err ( BinaryParserErrTypes :: UValue ) }
36
+ _ => { return Err ( BinaryParserErrTypes :: OtherValue ( * chr as char ) ) }
42
37
}
43
38
44
39
}
@@ -48,7 +43,7 @@ fn base2_str_to_byte(word : &[u8]) -> Result<u8, BinaryParserErrTypes> {
48
43
49
44
fn binary_str_to_vec_u8 ( binary_str : & str ) -> Result < Vec < u8 > , BinaryParserErrTypes > {
50
45
let mut vec_u8 : Vec < u8 > = Vec :: new ( ) ;
51
- let mut binary_str_as_bytes = binary_str. as_bytes ( ) ;
46
+ let binary_str_as_bytes = binary_str. as_bytes ( ) ;
52
47
53
48
let mut tail_idx = binary_str_as_bytes. len ( ) ;
54
49
// clamp head if provided binary str is less than 8 long
@@ -57,7 +52,7 @@ fn binary_str_to_vec_u8(binary_str : &str) -> Result<Vec<u8>, BinaryParserErrTyp
57
52
{ binary_str_as_bytes. len ( ) - 8 }
58
53
else
59
54
{ 0 } ;
60
- while { tail_idx > 0 } {
55
+ while tail_idx > 0 {
61
56
let curr_b_val = & binary_str_as_bytes[ head_idx..tail_idx] ;
62
57
let val_u8 = base2_str_to_byte ( curr_b_val) ?;
63
58
vec_u8. push ( val_u8) ;
@@ -81,11 +76,10 @@ fn binary_str_to_vec_u8(binary_str : &str) -> Result<Vec<u8>, BinaryParserErrTyp
81
76
Ok ( vec_u8)
82
77
}
83
78
84
- #[ named]
85
79
pub ( super ) fn parse_events < ' a > (
86
80
word_reader : & mut WordReader ,
87
81
vcd : & ' a mut VCD ,
88
- signal_map : & mut HashMap < String , Signal_Idx >
82
+ signal_map : & mut HashMap < String , SignalIdx >
89
83
) -> Result < ( ) , String > {
90
84
91
85
loop {
@@ -110,7 +104,7 @@ pub(super) fn parse_events<'a>(
110
104
// configurable.
111
105
let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
112
106
let start_idx = u32:: try_from ( vcd. timeline . len ( ) ) . map_err (
113
- |e | format ! ( "Error near {f}:{l}. Failed to convert from usize to u32." ) ) ?;
107
+ |_ | format ! ( "Error near {f}:{l}. Failed to convert from usize to u32." ) ) ?;
114
108
vcd. timeline_markers . push ( StartIdx ( start_idx) ) ;
115
109
vcd. timeline . append ( & mut value) ;
116
110
}
@@ -119,7 +113,6 @@ pub(super) fn parse_events<'a>(
119
113
"b" => {
120
114
let binary_value = & word[ 1 ..] ;
121
115
let observed_num_bits = binary_value. len ( ) ;
122
- let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
123
116
124
117
let mut value_u8 : Vec < u8 > = Vec :: new ( ) ;
125
118
let mut value_string = String :: new ( ) ;
@@ -131,9 +124,9 @@ pub(super) fn parse_events<'a>(
131
124
// Or else, we we propagate up other errors.
132
125
match binary_str_to_vec_u8 ( binary_value) {
133
126
Ok ( result) => { value_u8 = result; }
134
- Err ( BinaryParserErrTypes :: x_value |
135
- BinaryParserErrTypes :: z_value |
136
- BinaryParserErrTypes :: u_value
127
+ Err ( BinaryParserErrTypes :: XValue |
128
+ BinaryParserErrTypes :: ZValue |
129
+ BinaryParserErrTypes :: UValue
137
130
) =>
138
131
{
139
132
store_as_string = true ;
@@ -151,7 +144,7 @@ pub(super) fn parse_events<'a>(
151
144
152
145
// lookup signal idx
153
146
let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
154
- let Signal_Idx ( ref signal_idx) = signal_map. get ( word) . ok_or (
147
+ let SignalIdx ( ref signal_idx) = signal_map. get ( word) . ok_or (
155
148
format ! ( "Error near {f}:{l}. Failed to lookup signal {word} at {cursor:?}" ) ) ?;
156
149
157
150
// account for fact that signal idx could be an alias, so there
@@ -161,8 +154,8 @@ pub(super) fn parse_events<'a>(
161
154
let signal = vcd. all_signals . get ( * signal_idx) . unwrap ( ) ;
162
155
match signal {
163
156
Signal :: Data { ..} => { * signal_idx}
164
- Signal :: Alias { name , signal_alias } => {
165
- let Signal_Idx ( ref signal_idx) = signal_alias;
157
+ Signal :: Alias { signal_alias , .. } => {
158
+ let SignalIdx ( ref signal_idx) = signal_alias;
166
159
signal_idx. clone ( )
167
160
168
161
}
@@ -174,7 +167,7 @@ pub(super) fn parse_events<'a>(
174
167
let signal = vcd. all_signals . get_mut ( signal_idx) . unwrap ( ) ;
175
168
match signal {
176
169
Signal :: Data { name, sig_type, ref mut signal_error, num_bits,
177
- self_idx , u8_timeline, u8_timeline_markers, string_timeline,
170
+ u8_timeline, u8_timeline_markers, string_timeline,
178
171
string_timeline_markers, ..} => {
179
172
180
173
if signal_error. is_some ( ) { continue ; }
@@ -210,7 +203,7 @@ pub(super) fn parse_events<'a>(
210
203
211
204
let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
212
205
let timeline_idx = u32:: try_from ( vcd. timeline . len ( ) ) . map_err (
213
- |e | format ! ( "Error near {f}:{l}. Failed to convert from usize to u32." ) ) ?;
206
+ |_ | format ! ( "Error near {f}:{l}. Failed to convert from usize to u32." ) ) ?;
214
207
let timeline_idx = TimelineIdx ( timeline_idx) ;
215
208
216
209
if store_as_string {
@@ -264,7 +257,7 @@ pub(super) fn parse_events<'a>(
264
257
// lookup signal idx
265
258
let hash = & word[ 1 ..] ;
266
259
let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
267
- let Signal_Idx ( ref signal_idx) = signal_map. get ( hash) . ok_or (
260
+ let SignalIdx ( ref signal_idx) = signal_map. get ( hash) . ok_or (
268
261
format ! ( "Error near {f}:{l}. Failed to lookup signal {hash} at {cursor:?}" ) ) ?;
269
262
270
263
// account for fact that signal idx could be an alias, so there
@@ -274,8 +267,8 @@ pub(super) fn parse_events<'a>(
274
267
let signal = vcd. all_signals . get ( * signal_idx) . unwrap ( ) ;
275
268
match signal {
276
269
Signal :: Data { ..} => { * signal_idx}
277
- Signal :: Alias { name , signal_alias } => {
278
- let Signal_Idx ( ref signal_idx) = signal_alias;
270
+ Signal :: Alias { signal_alias , .. } => {
271
+ let SignalIdx ( ref signal_idx) = signal_alias;
279
272
signal_idx. clone ( )
280
273
281
274
}
@@ -287,7 +280,7 @@ pub(super) fn parse_events<'a>(
287
280
let signal = vcd. all_signals . get_mut ( signal_idx) . unwrap ( ) ;
288
281
match signal {
289
282
Signal :: Data { name, sig_type, ref mut signal_error, num_bits,
290
- self_idx , u8_timeline, u8_timeline_markers, ..} => {
283
+ u8_timeline, u8_timeline_markers, ..} => {
291
284
292
285
// if this is a bad signal, go ahead and skip it
293
286
if signal_error. is_some ( ) { continue ; }
@@ -321,7 +314,7 @@ pub(super) fn parse_events<'a>(
321
314
322
315
let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
323
316
let timeline_idx = u32:: try_from ( vcd. timeline . len ( ) ) . map_err (
324
- |e | format ! ( "Error near {f}:{l}. Failed to convert from usize to u32." ) ) ?;
317
+ |_ | format ! ( "Error near {f}:{l}. Failed to convert from usize to u32." ) ) ?;
325
318
let timeline_idx = TimelineIdx ( timeline_idx) ;
326
319
327
320
u8_timeline_markers. push ( timeline_idx) ;
@@ -342,7 +335,7 @@ pub(super) fn parse_events<'a>(
342
335
// lokup signal idx
343
336
let hash = & word[ 1 ..] ;
344
337
let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
345
- let Signal_Idx ( ref signal_idx) = signal_map. get ( hash) . ok_or (
338
+ let SignalIdx ( ref signal_idx) = signal_map. get ( hash) . ok_or (
346
339
format ! ( "Error near {f}:{l}. Failed to lookup signal {hash} at {cursor:?}" ) ) ?;
347
340
348
341
// account for fact that signal idx could be an alias, so there
@@ -352,8 +345,8 @@ pub(super) fn parse_events<'a>(
352
345
let signal = vcd. all_signals . get ( * signal_idx) . unwrap ( ) ;
353
346
match signal {
354
347
Signal :: Data { ..} => { * signal_idx}
355
- Signal :: Alias { name , signal_alias } => {
356
- let Signal_Idx ( ref signal_idx) = signal_alias;
348
+ Signal :: Alias { signal_alias , .. } => {
349
+ let SignalIdx ( ref signal_idx) = signal_alias;
357
350
signal_idx. clone ( )
358
351
359
352
}
@@ -365,7 +358,7 @@ pub(super) fn parse_events<'a>(
365
358
let signal = vcd. all_signals . get_mut ( signal_idx) . unwrap ( ) ;
366
359
match signal {
367
360
Signal :: Data { name, sig_type, ref mut signal_error, num_bits,
368
- self_idx , u8_timeline, u8_timeline_markers, scope_parent , ..} => {
361
+ u8_timeline, u8_timeline_markers, ..} => {
369
362
370
363
// if this is a bad signal, go ahead and skip it
371
364
if signal_error. is_some ( ) { continue ; }
@@ -399,7 +392,7 @@ pub(super) fn parse_events<'a>(
399
392
400
393
let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
401
394
let timeline_idx = u32:: try_from ( vcd. timeline . len ( ) ) . map_err (
402
- |e | format ! ( "Error near {f}:{l}. Failed to convert from usize to u32." ) ) ?;
395
+ |_ | format ! ( "Error near {f}:{l}. Failed to convert from usize to u32." ) ) ?;
403
396
let timeline_idx = TimelineIdx ( timeline_idx) ;
404
397
405
398
u8_timeline_markers. push ( timeline_idx) ;
@@ -421,7 +414,7 @@ pub(super) fn parse_events<'a>(
421
414
// lokup signal idx
422
415
let hash = & word[ 1 ..] ;
423
416
let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
424
- let Signal_Idx ( ref signal_idx) = signal_map. get ( hash) . ok_or (
417
+ let SignalIdx ( ref signal_idx) = signal_map. get ( hash) . ok_or (
425
418
format ! ( "Error near {f}:{l}. Failed to lookup signal {hash} at {cursor:?}" ) ) ?;
426
419
427
420
// account for fact that signal idx could be an alias, so there
@@ -431,8 +424,8 @@ pub(super) fn parse_events<'a>(
431
424
let signal = vcd. all_signals . get ( * signal_idx) . unwrap ( ) ;
432
425
match signal {
433
426
Signal :: Data { ..} => { * signal_idx}
434
- Signal :: Alias { name , signal_alias } => {
435
- let Signal_Idx ( ref signal_idx) = signal_alias;
427
+ Signal :: Alias { signal_alias , .. } => {
428
+ let SignalIdx ( ref signal_idx) = signal_alias;
436
429
signal_idx. clone ( )
437
430
438
431
}
@@ -444,8 +437,7 @@ pub(super) fn parse_events<'a>(
444
437
let signal = vcd. all_signals . get_mut ( signal_idx) . unwrap ( ) ;
445
438
match signal {
446
439
Signal :: Data { name, sig_type, ref mut signal_error, num_bits,
447
- self_idx, u8_timeline, u8_timeline_markers, string_timeline,
448
- string_timeline_markers, ..} => {
440
+ string_timeline, string_timeline_markers, ..} => {
449
441
450
442
// if this is a bad signal, go ahead and skip it
451
443
if signal_error. is_some ( ) { continue ; }
@@ -479,7 +471,7 @@ pub(super) fn parse_events<'a>(
479
471
480
472
let ( f, l ) = ( file ! ( ) , line ! ( ) ) ;
481
473
let timeline_idx = u32:: try_from ( vcd. timeline . len ( ) ) . map_err (
482
- |e | format ! ( "Error near {f}:{l}. Failed to convert from usize to u32." ) ) ?;
474
+ |_ | format ! ( "Error near {f}:{l}. Failed to convert from usize to u32." ) ) ?;
483
475
let timeline_idx = TimelineIdx ( timeline_idx) ;
484
476
485
477
string_timeline_markers. push ( timeline_idx) ;
0 commit comments