Add virtual add for Type

This commit is contained in:
Sofia 2026-04-10 16:53:10 +03:00
parent ea9bb1fcb9
commit dcb6e60a3b
3 changed files with 11 additions and 1 deletions

View File

@ -53,7 +53,7 @@ namespace AST {
return rhs;
case BinOp::Add:
return codegen::StackValue{
builder.builder->CreateAdd(lhs.value, rhs.value, "add"),
lhs.ty->add(builder, lhs.value, rhs.value),
lhs.ty
};
default:

View File

@ -10,6 +10,14 @@ namespace types {
default:
return "Unknown";
}
}
llvm::Value* FundamentalType::add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) {
switch (this->m_ty) {
case FundamentalTypeKind::Int:
return builder.builder->CreateAdd(lhs, rhs);
default:
throw std::runtime_error("Invalid type for add");
}
}
}

View File

@ -16,6 +16,7 @@ namespace types {
virtual ~Type() = default;
virtual std::string formatted() = 0;
virtual llvm::Type* codegen(codegen::Builder& builder) = 0;
virtual llvm::Value* add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) = 0;
};
class FundamentalType : public Type {
@ -26,6 +27,7 @@ namespace types {
virtual ~FundamentalType() override = default;
virtual std::string formatted() override;
virtual llvm::Type* codegen(codegen::Builder& builder) override;
virtual llvm::Value* add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
};
}