mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-08 21:10:32 +00:00
Compile derived structural equality
This commit is contained in:
parent
54e977be2d
commit
3674f6861e
7 changed files with 41 additions and 1 deletions
|
@ -184,6 +184,7 @@ macro_rules! map_symbol_to_lowlevel {
|
|||
// Below, we explicitly handle some exceptions to the pattern where a lowlevel maps
|
||||
// directly to a symbol. If you are unsure if your lowlevel is an exception, assume
|
||||
// that it isn't and just see if that works.
|
||||
#[allow(unreachable_patterns)] // TODO: remove after we replace `BOOL_EQ` with `EQ_EQ` wholly
|
||||
match lowlevel {
|
||||
$(
|
||||
LowLevel::$lowlevel => Symbol::$symbol,
|
||||
|
@ -310,6 +311,7 @@ map_symbol_to_lowlevel! {
|
|||
NumShiftRightZfBy <= NUM_SHIFT_RIGHT_ZERO_FILL,
|
||||
NumToStr <= NUM_TO_STR,
|
||||
Eq <= BOOL_EQ,
|
||||
Eq <= EQ_STRUCTURAL_EQ,
|
||||
NotEq <= BOOL_NEQ,
|
||||
And <= BOOL_AND,
|
||||
Or <= BOOL_OR,
|
||||
|
|
|
@ -99,6 +99,17 @@ impl Symbol {
|
|||
DERIVABLE_ABILITIES.iter().find(|(name, _)| *name == self)
|
||||
}
|
||||
|
||||
/// A symbol that should never be exposed to userspace, but needs to be exposed
|
||||
/// to compiled modules for deriving abilities for structural types.
|
||||
pub fn is_exposed_for_builtin_derivers(&self) -> bool {
|
||||
matches!(
|
||||
self,
|
||||
// The `structuralEq` call used deriving structural equality, which will wrap the `Eq`
|
||||
// low-level implementation.
|
||||
&Self::EQ_STRUCTURAL_EQ
|
||||
) && false
|
||||
}
|
||||
|
||||
pub fn module_string<'a>(&self, interns: &'a Interns) -> &'a ModuleName {
|
||||
interns
|
||||
.module_ids
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue