@@ -133,7 +133,10 @@ impl EarlyProps {
133
133
fn ignore_gdb ( config : & Config , line : & str ) -> bool {
134
134
if let Some ( actual_version) = config. gdb_version {
135
135
if let Some ( rest) = line. strip_prefix ( "min-gdb-version:" ) . map ( str:: trim) {
136
- let ( start_ver, end_ver) = extract_version_range ( rest, extract_gdb_version) ;
136
+ let ( start_ver, end_ver) = extract_version_range ( rest, extract_gdb_version)
137
+ . unwrap_or_else ( || {
138
+ panic ! ( "couldn't parse version range: {:?}" , rest) ;
139
+ } ) ;
137
140
138
141
if start_ver != end_ver {
139
142
panic ! ( "Expected single GDB version" )
@@ -143,7 +146,9 @@ impl EarlyProps {
143
146
return actual_version < start_ver;
144
147
} else if let Some ( rest) = line. strip_prefix ( "ignore-gdb-version:" ) . map ( str:: trim) {
145
148
let ( min_version, max_version) =
146
- extract_version_range ( rest, extract_gdb_version) ;
149
+ extract_version_range ( rest, extract_gdb_version) . unwrap_or_else ( || {
150
+ panic ! ( "couldn't parse version range: {:?}" , rest) ;
151
+ } ) ;
147
152
148
153
if max_version < min_version {
149
154
panic ! ( "Malformed GDB version range: max < min" )
@@ -197,7 +202,10 @@ impl EarlyProps {
197
202
} else if let Some ( rest) = line. strip_prefix ( "ignore-llvm-version:" ) . map ( str:: trim)
198
203
{
199
204
// Syntax is: "ignore-llvm-version: <version1> [- <version2>]"
200
- let ( v_min, v_max) = extract_version_range ( rest, extract_llvm_version) ;
205
+ let ( v_min, v_max) = extract_version_range ( rest, extract_llvm_version)
206
+ . unwrap_or_else ( || {
207
+ panic ! ( "couldn't parse version range: {:?}" , rest) ;
208
+ } ) ;
201
209
if v_max < v_min {
202
210
panic ! ( "Malformed LLVM version range: max < min" )
203
211
}
@@ -940,28 +948,28 @@ pub fn extract_llvm_version(version: &str) -> Option<u32> {
940
948
// tuple: (<version1> as u32, <version2> as u32)
941
949
// If the <version2> part is omitted, the second component of the tuple
942
950
// is the same as <version1>.
943
- fn extract_version_range < F > ( line : & str , parse : F ) -> ( u32 , u32 )
951
+ fn extract_version_range < F > ( line : & str , parse : F ) -> Option < ( u32 , u32 ) >
944
952
where
945
953
F : Fn ( & str ) -> Option < u32 > ,
946
954
{
947
- let range_components = line
948
- . split ( & [ ' ' , '-' ] [ ..] )
949
- . filter ( |word| !word. is_empty ( ) )
950
- . map ( parse)
951
- . skip_while ( Option :: is_none)
952
- . take ( 3 ) // 3 or more = invalid, so take at most 3.
953
- . collect :: < Vec < Option < u32 > > > ( ) ;
954
-
955
- match * range_components {
956
- [ v] => {
957
- let v = v. unwrap ( ) ;
958
- ( v, v)
959
- }
960
- [ min, max] => {
961
- let v_min = min. unwrap ( ) ;
962
- let v_max = max. expect ( "Malformed version directive" ) ;
963
- ( v_min, v_max)
964
- }
965
- _ => panic ! ( "Malformed version directive" ) ,
955
+ let mut splits = line. splitn ( 2 , "- " ) . map ( str:: trim) ;
956
+ let min = splits. next ( ) . unwrap ( ) ;
957
+ if min. ends_with ( '-' ) {
958
+ return None ;
959
+ }
960
+
961
+ let max = splits. next ( ) ;
962
+
963
+ if min. is_empty ( ) {
964
+ return None ;
966
965
}
966
+
967
+ let min = parse ( min) ?;
968
+ let max = match max {
969
+ Some ( max) if max. is_empty ( ) => return None ,
970
+ Some ( max) => parse ( max) ?,
971
+ _ => min,
972
+ } ;
973
+
974
+ Some ( ( min, max) )
967
975
}
0 commit comments