Start implementing intrinsics

This commit is contained in:
Sofia 2025-07-24 01:39:49 +03:00
parent 7027ee3645
commit 4bef1c2379
3 changed files with 11 additions and 3 deletions

View File

@ -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, "<Imported Extern>"),
Self::Extern(false) => write!(f, "<Linked Extern>"),
FunctionDefinitionKind::Extern(true) => write!(f, "<Imported Extern>"),
FunctionDefinitionKind::Extern(false) => write!(f, "<Linked Extern>"),
FunctionDefinitionKind::Intrinsic(_) => write!(f, "<Intrinsic>"),
}
}
}

View File

@ -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),
}
}
}

View File

@ -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(),
}
}
}