Add virtual add for Type
This commit is contained in:
parent
ea9bb1fcb9
commit
dcb6e60a3b
@ -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:
|
||||
|
||||
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user