Skip to content

Commit 2ce46f8

Browse files
committed
move single component parsing to dedicated function
this will prevent parsing when expecting more than a single component to be parsed, and prepare for the symetric variant-to-name function to be added
1 parent acc3b61 commit 2ce46f8

File tree

3 files changed

+12
-13
lines changed

3 files changed

+12
-13
lines changed

compiler/rustc_session/src/config.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -240,21 +240,21 @@ pub struct LinkSelfContained {
240240
impl LinkSelfContained {
241241
/// Incorporates an enabled or disabled component as specified on the CLI, if possible.
242242
/// For example: `+linker`, and `-crto`.
243-
pub(crate) fn handle_cli_component(&mut self, component: &str) -> Result<(), ()> {
243+
pub(crate) fn handle_cli_component(&mut self, component: &str) -> Option<()> {
244244
// Note that for example `-Cself-contained=y -Cself-contained=-linker` is not an explicit
245245
// set of all values like `y` or `n` used to be. Therefore, if this flag had previously been
246246
// set in bulk with its historical values, then manually setting a component clears that
247247
// `explicitly_set` state.
248248
if let Some(component_to_enable) = component.strip_prefix('+') {
249249
self.explicitly_set = None;
250-
self.components.insert(component_to_enable.parse()?);
251-
Ok(())
250+
self.components.insert(LinkSelfContainedComponents::from_str(component_to_enable)?);
251+
Some(())
252252
} else if let Some(component_to_disable) = component.strip_prefix('-') {
253253
self.explicitly_set = None;
254-
self.components.remove(component_to_disable.parse()?);
255-
Ok(())
254+
self.components.remove(LinkSelfContainedComponents::from_str(component_to_disable)?);
255+
Some(())
256256
} else {
257-
Err(())
257+
None
258258
}
259259
}
260260

compiler/rustc_session/src/options.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1165,7 +1165,7 @@ mod parse {
11651165

11661166
// 2. Parse a list of enabled and disabled components.
11671167
for comp in s.split(',') {
1168-
if slot.handle_cli_component(comp).is_err() {
1168+
if slot.handle_cli_component(comp).is_none() {
11691169
return false;
11701170
}
11711171
}

compiler/rustc_target/src/spec/mod.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -539,18 +539,17 @@ bitflags::bitflags! {
539539
}
540540
}
541541

542-
impl FromStr for LinkSelfContainedComponents {
543-
type Err = ();
544-
545-
fn from_str(s: &str) -> Result<Self, Self::Err> {
546-
Ok(match s {
542+
impl LinkSelfContainedComponents {
543+
/// Parses a single `-Clink-self-contained` well-known component, not a set of flags.
544+
pub fn from_str(s: &str) -> Option<LinkSelfContainedComponents> {
545+
Some(match s {
547546
"crto" => LinkSelfContainedComponents::CRT_OBJECTS,
548547
"libc" => LinkSelfContainedComponents::LIBC,
549548
"unwind" => LinkSelfContainedComponents::UNWIND,
550549
"linker" => LinkSelfContainedComponents::LINKER,
551550
"sanitizers" => LinkSelfContainedComponents::SANITIZERS,
552551
"mingw" => LinkSelfContainedComponents::MINGW,
553-
_ => return Err(()),
552+
_ => return None,
554553
})
555554
}
556555
}

0 commit comments

Comments
 (0)