Skip to content

Commit 18da964

Browse files
committed
Store option strings directly, not in a boxed apply closure
1 parent fbcdd72 commit 18da964

File tree

1 file changed

+26
-23
lines changed

1 file changed

+26
-23
lines changed

compiler/rustc_session/src/config.rs

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1398,9 +1398,16 @@ pub enum OptionKind {
13981398
}
13991399

14001400
pub struct RustcOptGroup {
1401-
apply: Box<dyn Fn(&mut getopts::Options) -> &mut getopts::Options>,
1401+
/// Display name for this option. Normally equal to `long_name`, except for
1402+
/// options that don't have a long name.
14021403
pub name: &'static str,
14031404
stability: OptionStability,
1405+
kind: OptionKind,
1406+
1407+
short_name: &'static str,
1408+
long_name: &'static str,
1409+
desc: &'static str,
1410+
value_hint: &'static str,
14041411
}
14051412

14061413
impl RustcOptGroup {
@@ -1409,7 +1416,13 @@ impl RustcOptGroup {
14091416
}
14101417

14111418
pub fn apply(&self, options: &mut getopts::Options) {
1412-
(self.apply)(options);
1419+
let &Self { short_name, long_name, desc, value_hint, .. } = self;
1420+
match self.kind {
1421+
OptionKind::Opt => options.optopt(short_name, long_name, desc, value_hint),
1422+
OptionKind::Multi => options.optmulti(short_name, long_name, desc, value_hint),
1423+
OptionKind::Flag => options.optflag(short_name, long_name, desc),
1424+
OptionKind::FlagMulti => options.optflagmulti(short_name, long_name, desc),
1425+
};
14131426
}
14141427
}
14151428

@@ -1419,31 +1432,21 @@ pub fn make_opt(
14191432
short_name: &'static str,
14201433
long_name: &'static str,
14211434
desc: &'static str,
1422-
hint: &'static str,
1435+
value_hint: &'static str,
14231436
) -> RustcOptGroup {
1437+
// "Flag" options don't have a value, and therefore don't have a value hint.
1438+
match kind {
1439+
OptionKind::Opt | OptionKind::Multi => {}
1440+
OptionKind::Flag | OptionKind::FlagMulti => assert_eq!(value_hint, ""),
1441+
}
14241442
RustcOptGroup {
14251443
name: cmp::max_by_key(short_name, long_name, |s| s.len()),
14261444
stability,
1427-
apply: match kind {
1428-
OptionKind::Opt => Box::new(move |opts: &mut getopts::Options| {
1429-
opts.optopt(short_name, long_name, desc, hint)
1430-
}),
1431-
OptionKind::Multi => Box::new(move |opts: &mut getopts::Options| {
1432-
opts.optmulti(short_name, long_name, desc, hint)
1433-
}),
1434-
OptionKind::Flag => {
1435-
assert_eq!(hint, "");
1436-
Box::new(move |opts: &mut getopts::Options| {
1437-
opts.optflag(short_name, long_name, desc)
1438-
})
1439-
}
1440-
OptionKind::FlagMulti => {
1441-
assert_eq!(hint, "");
1442-
Box::new(move |opts: &mut getopts::Options| {
1443-
opts.optflagmulti(short_name, long_name, desc)
1444-
})
1445-
}
1446-
},
1445+
kind,
1446+
short_name,
1447+
long_name,
1448+
desc,
1449+
value_hint,
14471450
}
14481451
}
14491452

0 commit comments

Comments
 (0)