@@ -63,34 +63,30 @@ impl Parse for BitRange {
63
63
SVDError :: InvalidBitRange ( tree. clone ( ) , InvalidBitRange :: Syntax )
64
64
} ) ?
65
65
. parse :: < u32 > ( )
66
- . context ( SVDError :: InvalidBitRange (
67
- tree. clone ( ) ,
68
- InvalidBitRange :: ParseError ,
69
- ) ) ?,
66
+ . with_context ( || {
67
+ SVDError :: InvalidBitRange ( tree. clone ( ) , InvalidBitRange :: ParseError )
68
+ } ) ?,
70
69
parts
71
70
. next ( )
72
71
. ok_or_else ( || {
73
72
SVDError :: InvalidBitRange ( tree. clone ( ) , InvalidBitRange :: Syntax )
74
73
} ) ?
75
74
. parse :: < u32 > ( )
76
- . context ( SVDError :: InvalidBitRange (
77
- tree. clone ( ) ,
78
- InvalidBitRange :: ParseError ,
79
- ) ) ?,
75
+ . with_context ( || {
76
+ SVDError :: InvalidBitRange ( tree. clone ( ) , InvalidBitRange :: ParseError )
77
+ } ) ?,
80
78
BitRangeType :: BitRange ,
81
79
)
82
80
// TODO: Consider matching instead so we can say which of these tags are missing
83
81
} else if let ( Some ( lsb) , Some ( msb) ) = ( tree. get_child ( "lsb" ) , tree. get_child ( "msb" ) ) {
84
82
(
85
83
// TODO: `u32::parse` should not hide it's errors
86
- u32:: parse ( msb) . context ( SVDError :: InvalidBitRange (
87
- tree. clone ( ) ,
88
- InvalidBitRange :: MsbLsb ,
89
- ) ) ?,
90
- u32:: parse ( lsb) . context ( SVDError :: InvalidBitRange (
91
- tree. clone ( ) ,
92
- InvalidBitRange :: MsbLsb ,
93
- ) ) ?,
84
+ u32:: parse ( msb) . with_context ( || {
85
+ SVDError :: InvalidBitRange ( tree. clone ( ) , InvalidBitRange :: MsbLsb )
86
+ } ) ?,
87
+ u32:: parse ( lsb) . with_context ( || {
88
+ SVDError :: InvalidBitRange ( tree. clone ( ) , InvalidBitRange :: MsbLsb )
89
+ } ) ?,
94
90
BitRangeType :: MsbLsb ,
95
91
)
96
92
} else if let ( Some ( offset) , Some ( width) ) =
@@ -102,14 +98,12 @@ impl Parse for BitRange {
102
98
return Ok ( BitRange {
103
99
// TODO: capture that error comes from offset/width tag
104
100
// TODO: `u32::parse` should not hide it's errors
105
- offset : u32:: parse ( offset) . context ( SVDError :: InvalidBitRange (
106
- tree. clone ( ) ,
107
- InvalidBitRange :: ParseError ,
108
- ) ) ?,
109
- width : u32:: parse ( width) . context ( SVDError :: InvalidBitRange (
110
- tree. clone ( ) ,
111
- InvalidBitRange :: ParseError ,
112
- ) ) ?,
101
+ offset : u32:: parse ( offset) . with_context ( || {
102
+ SVDError :: InvalidBitRange ( tree. clone ( ) , InvalidBitRange :: ParseError )
103
+ } ) ?,
104
+ width : u32:: parse ( width) . with_context ( || {
105
+ SVDError :: InvalidBitRange ( tree. clone ( ) , InvalidBitRange :: ParseError )
106
+ } ) ?,
113
107
range_type : BitRangeType :: OffsetWidth ,
114
108
} )
115
109
)
0 commit comments