From cdff4cc9db9674078fb4c351a141035d5fb75df2 Mon Sep 17 00:00:00 2001 From: Sofia Date: Sun, 12 Apr 2026 00:47:38 +0300 Subject: [PATCH] Add binops for more fundamental type kinds --- src/types.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/types.cpp b/src/types.cpp index c1c1fda..c32c489 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -82,6 +82,8 @@ namespace types { llvm::Value* FundamentalType::add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) { switch (this->m_ty) { case FundamentalTypeKind::Int: + case FundamentalTypeKind::Bool: + case FundamentalTypeKind::Char: return builder.builder->CreateAdd(lhs, rhs, "add"); default: throw std::runtime_error("Invalid type for add"); @@ -91,6 +93,8 @@ namespace types { llvm::Value* FundamentalType::sub(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) { switch (this->m_ty) { case FundamentalTypeKind::Int: + case FundamentalTypeKind::Bool: + case FundamentalTypeKind::Char: return builder.builder->CreateSub(lhs, rhs, "sub"); default: throw std::runtime_error("Invalid type"); @@ -100,6 +104,8 @@ namespace types { llvm::Value* FundamentalType::lt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) { switch (this->m_ty) { case FundamentalTypeKind::Int: + case FundamentalTypeKind::Bool: + case FundamentalTypeKind::Char: return builder.builder->CreateCmp(llvm::CmpInst::Predicate::ICMP_SLT, lhs, rhs, "cmp"); default: throw std::runtime_error("Invalid type"); @@ -109,6 +115,8 @@ namespace types { llvm::Value* FundamentalType::gt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) { switch (this->m_ty) { case FundamentalTypeKind::Int: + case FundamentalTypeKind::Bool: + case FundamentalTypeKind::Char: return builder.builder->CreateCmp(llvm::CmpInst::Predicate::ICMP_SGT, lhs, rhs); default: throw std::runtime_error("Invalid type");