1
Fork 0

compiler: compare and hash ExternAbi like its string

Directly map each ExternAbi variant to its string and back again.
This has a few advantages:
- By making the ABIs compare equal to their strings, we can easily
  lexicographically sort them and use that sorted slice at runtime.
- We no longer need a workaround to make sure the hashes remain stable,
  as they already naturally are (by being the hashes of unique strings).
- The compiler can carry around less &str wide pointers
This commit is contained in:
Jubilee Young 2025-02-10 03:57:32 -08:00
parent 038c183d5f
commit 8abff35b41
6 changed files with 144 additions and 25 deletions

View file

@ -54,17 +54,12 @@ enum GateReason {
impl fmt::Display for UnstableAbi {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let Self { abi, .. } = self;
let name = abi.to_string();
let name = name.trim_matches('"');
match self.explain {
GateReason::Experimental => {
write!(f, r#"the extern "{name}" ABI is experimental and subject to change"#)
write!(f, "the extern {abi} ABI is experimental and subject to change")
}
GateReason::ImplDetail => {
write!(
f,
r#"the extern "{name}" ABI is an implementation detail and perma-unstable"#
)
write!(f, "the extern {abi} ABI is an implementation detail and perma-unstable")
}
}
}