Add intrinsic binops
This commit is contained in:
parent
d448c8b9f1
commit
436ab319b8
@ -5,5 +5,5 @@ fn main() -> u32 {
|
||||
let value = 6;
|
||||
let other = 15;
|
||||
|
||||
return value * other + 7 * -value;
|
||||
return value + other;
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ use reid_lib::Instr;
|
||||
|
||||
use crate::{
|
||||
codegen::{ErrorKind, Scope},
|
||||
mir::{FunctionDefinition, FunctionDefinitionKind, TypeKind},
|
||||
mir::{BinaryOperator, BinopDefinition, FunctionDefinition, FunctionDefinitionKind, TypeKind},
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
@ -26,13 +26,37 @@ fn intrinsic(
|
||||
}
|
||||
}
|
||||
|
||||
fn intrinsic_binop(
|
||||
op: BinaryOperator,
|
||||
lhs: TypeKind,
|
||||
rhs: TypeKind,
|
||||
ret_ty: TypeKind,
|
||||
kind: InstrinsicKind,
|
||||
) -> BinopDefinition {
|
||||
BinopDefinition {
|
||||
lhs: ("lhs".to_string(), lhs),
|
||||
op,
|
||||
rhs: ("rhs".to_owned(), rhs),
|
||||
return_type: ret_ty,
|
||||
fn_kind: FunctionDefinitionKind::Intrinsic(kind),
|
||||
meta: Default::default(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn form_intrinsics() -> Vec<FunctionDefinition> {
|
||||
let mut intrinsics = Vec::new();
|
||||
|
||||
intrinsics.push(intrinsic(
|
||||
"addition",
|
||||
TypeKind::U8,
|
||||
vec![("lhs".into(), TypeKind::U8), ("rhs".into(), TypeKind::U8)],
|
||||
intrinsics
|
||||
}
|
||||
|
||||
pub fn form_intrinsic_binops() -> Vec<BinopDefinition> {
|
||||
let mut intrinsics = Vec::new();
|
||||
|
||||
intrinsics.push(intrinsic_binop(
|
||||
BinaryOperator::Add,
|
||||
TypeKind::U32,
|
||||
TypeKind::U32,
|
||||
TypeKind::U32,
|
||||
InstrinsicKind::IAdd,
|
||||
));
|
||||
|
||||
|
@ -44,7 +44,7 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use error_raporting::{ErrorKind as ErrorRapKind, ErrorModules, ReidError};
|
||||
use intrinsics::form_intrinsics;
|
||||
use intrinsics::{form_intrinsic_binops, form_intrinsics};
|
||||
use lexer::FullToken;
|
||||
use mir::{
|
||||
linker::LinkerPass, typecheck::TypeCheck, typeinference::TypeInference, typerefs::TypeRefs,
|
||||
@ -128,6 +128,12 @@ pub fn perform_all_passes<'map>(
|
||||
#[cfg(debug_assertions)]
|
||||
dbg!(&context);
|
||||
|
||||
for module in &mut context.modules {
|
||||
for intrinsic in form_intrinsic_binops() {
|
||||
module.1.binop_defs.insert(0, intrinsic);
|
||||
}
|
||||
}
|
||||
|
||||
for module in &mut context.modules {
|
||||
for intrinsic in form_intrinsics() {
|
||||
module.1.functions.insert(0, intrinsic);
|
||||
|
Loading…
Reference in New Issue
Block a user