Skip to content

Commit ebaaca2

Browse files
committed
Replace rustc --print=cfg parsing with handrolled loop
1 parent 05baf43 commit ebaaca2

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

src/cargo/core/compiler/build_context/target_info.rs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -261,16 +261,21 @@ impl TargetInfo {
261261
res
262262
};
263263

264-
let cfg = lines
265-
.map(|line| Ok(Cfg::from_str(line)?))
266-
.filter(TargetInfo::not_user_specific_cfg)
267-
.collect::<CargoResult<Vec<_>>>()
268-
.with_context(|| {
269-
format!(
270-
"failed to parse the cfg from `rustc --print=cfg`, got:\n{}",
271-
output
272-
)
273-
})?;
264+
let cfg = {
265+
let mut res = Vec::new();
266+
for line in &mut lines {
267+
let cfg = Cfg::from_str(line).with_context(|| {
268+
format!(
269+
"failed to parse the cfg from `rustc --print=cfg`, got:\n{}",
270+
output
271+
)
272+
})?;
273+
if TargetInfo::not_user_specific_cfg(&cfg) {
274+
res.push(cfg);
275+
}
276+
}
277+
res
278+
};
274279

275280
// recalculate `rustflags` from above now that we have `cfg`
276281
// information
@@ -362,8 +367,8 @@ impl TargetInfo {
362367
}
363368
}
364369

365-
fn not_user_specific_cfg(cfg: &CargoResult<Cfg>) -> bool {
366-
if let Ok(Cfg::Name(cfg_name)) = cfg {
370+
fn not_user_specific_cfg(cfg: &Cfg) -> bool {
371+
if let Cfg::Name(cfg_name) = cfg {
367372
// This should also include "debug_assertions", but it causes
368373
// regressions. Maybe some day in the distant future it can be
369374
// added (and possibly change the warning to an error).

0 commit comments

Comments
 (0)