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:
parent
038c183d5f
commit
8abff35b41
6 changed files with 144 additions and 25 deletions
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue