Add virtual add for Type
This commit is contained in:
parent
ea9bb1fcb9
commit
dcb6e60a3b
@ -53,7 +53,7 @@ namespace AST {
|
|||||||
return rhs;
|
return rhs;
|
||||||
case BinOp::Add:
|
case BinOp::Add:
|
||||||
return codegen::StackValue{
|
return codegen::StackValue{
|
||||||
builder.builder->CreateAdd(lhs.value, rhs.value, "add"),
|
lhs.ty->add(builder, lhs.value, rhs.value),
|
||||||
lhs.ty
|
lhs.ty
|
||||||
};
|
};
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -10,6 +10,14 @@ namespace types {
|
|||||||
default:
|
default:
|
||||||
return "Unknown";
|
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 ~Type() = default;
|
||||||
virtual std::string formatted() = 0;
|
virtual std::string formatted() = 0;
|
||||||
virtual llvm::Type* codegen(codegen::Builder& builder) = 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 {
|
class FundamentalType : public Type {
|
||||||
@ -26,6 +27,7 @@ namespace types {
|
|||||||
virtual ~FundamentalType() override = default;
|
virtual ~FundamentalType() override = default;
|
||||||
virtual std::string formatted() override;
|
virtual std::string formatted() override;
|
||||||
virtual llvm::Type* codegen(codegen::Builder& builder) 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