diff --git a/reid/src/mir/fmt.rs b/reid/src/mir/fmt.rs index 1d1037e..68c0899 100644 --- a/reid/src/mir/fmt.rs +++ b/reid/src/mir/fmt.rs @@ -108,12 +108,13 @@ impl Display for FunctionDefinition { impl Display for FunctionDefinitionKind { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - Self::Local(block, _) => { + FunctionDefinitionKind::Local(block, _) => { write!(f, "{}", block)?; Ok(()) } - Self::Extern(true) => write!(f, ""), - Self::Extern(false) => write!(f, ""), + FunctionDefinitionKind::Extern(true) => write!(f, ""), + FunctionDefinitionKind::Extern(false) => write!(f, ""), + FunctionDefinitionKind::Intrinsic(_) => write!(f, ""), } } } diff --git a/reid/src/mir/implement.rs b/reid/src/mir/implement.rs index 55f36d0..ccffdfc 100644 --- a/reid/src/mir/implement.rs +++ b/reid/src/mir/implement.rs @@ -675,6 +675,8 @@ pub enum EqualsIssue { AlreadyExtern(String, Metadata), #[error("Function {0} is already imported from another module")] ConflictWithImport(String), + #[error("Function is defined as an intrinsic")] + ExistsAsIntrinsic, } impl FunctionDefinition { @@ -701,6 +703,7 @@ impl FunctionDefinition { } } } + FunctionDefinitionKind::Intrinsic(_) => Err(EqualsIssue::ExistsAsIntrinsic), } } } diff --git a/reid/src/mir/mod.rs b/reid/src/mir/mod.rs index d432090..6e32bdd 100644 --- a/reid/src/mir/mod.rs +++ b/reid/src/mir/mod.rs @@ -302,6 +302,8 @@ pub enum FunctionDefinitionKind { Local(Block, Metadata), /// True = imported from other module, False = Is user defined extern Extern(bool), + /// Intrinsic definition, defined within the compiler + Intrinsic(Block), } impl FunctionDefinition { @@ -309,6 +311,7 @@ impl FunctionDefinition { match &self.kind { FunctionDefinitionKind::Local(block, _) => block.meta.clone(), FunctionDefinitionKind::Extern(_) => Metadata::default(), + FunctionDefinitionKind::Intrinsic(_) => Metadata::default(), } } @@ -316,6 +319,7 @@ impl FunctionDefinition { match &self.kind { FunctionDefinitionKind::Local(_, metadata) => metadata.clone(), FunctionDefinitionKind::Extern(_) => Metadata::default(), + FunctionDefinitionKind::Intrinsic(_) => Metadata::default(), } } }