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 { impl Display for FunctionDefinitionKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
Self::Local(block, _) => { FunctionDefinitionKind::Local(block, _) => {
write!(f, "{}", block)?; write!(f, "{}", block)?;
Ok(()) Ok(())
} }
Self::Extern(true) => write!(f, "<Imported Extern>"), FunctionDefinitionKind::Extern(true) => write!(f, "<Imported Extern>"),
Self::Extern(false) => write!(f, "<Linked 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), AlreadyExtern(String, Metadata),
#[error("Function {0} is already imported from another module")] #[error("Function {0} is already imported from another module")]
ConflictWithImport(String), ConflictWithImport(String),
#[error("Function is defined as an intrinsic")]
ExistsAsIntrinsic,
} }
impl FunctionDefinition { 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), Local(Block, Metadata),
/// True = imported from other module, False = Is user defined extern /// True = imported from other module, False = Is user defined extern
Extern(bool), Extern(bool),
/// Intrinsic definition, defined within the compiler
Intrinsic(Block),
} }
impl FunctionDefinition { impl FunctionDefinition {
@ -309,6 +311,7 @@ impl FunctionDefinition {
match &self.kind { match &self.kind {
FunctionDefinitionKind::Local(block, _) => block.meta.clone(), FunctionDefinitionKind::Local(block, _) => block.meta.clone(),
FunctionDefinitionKind::Extern(_) => Metadata::default(), FunctionDefinitionKind::Extern(_) => Metadata::default(),
FunctionDefinitionKind::Intrinsic(_) => Metadata::default(),
} }
} }
@ -316,6 +319,7 @@ impl FunctionDefinition {
match &self.kind { match &self.kind {
FunctionDefinitionKind::Local(_, metadata) => metadata.clone(), FunctionDefinitionKind::Local(_, metadata) => metadata.clone(),
FunctionDefinitionKind::Extern(_) => Metadata::default(), FunctionDefinitionKind::Extern(_) => Metadata::default(),
FunctionDefinitionKind::Intrinsic(_) => Metadata::default(),
} }
} }
} }