Eliminate repetition
This commit is contained in:
parent
e015ada6e4
commit
01434b8097
@ -53,7 +53,24 @@ namespace types {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::shared_ptr<Type>> FundamentalType::return_type() {
|
|
||||||
|
llvm::Value* Type::add(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
||||||
|
throw std::runtime_error("Invalid operation for this type");
|
||||||
|
}
|
||||||
|
|
||||||
|
llvm::Value* Type::sub(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
||||||
|
throw std::runtime_error("Invalid operation for this type");
|
||||||
|
}
|
||||||
|
|
||||||
|
llvm::Value* Type::lt(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
||||||
|
throw std::runtime_error("Invalid operation for this type");
|
||||||
|
}
|
||||||
|
|
||||||
|
llvm::Value* Type::gt(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
||||||
|
throw std::runtime_error("Invalid operation for this type");
|
||||||
|
}
|
||||||
|
|
||||||
|
std::optional<std::shared_ptr<Type>> Type::return_type() {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,52 +145,16 @@ namespace types {
|
|||||||
return std::pair(ptr, self);
|
return std::pair(ptr, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
llvm::Value* FunctionType::add(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
|
||||||
throw std::runtime_error("Invalid operation for functions");
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::Value* FunctionType::sub(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
|
||||||
throw std::runtime_error("Invalid operation for functions");
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::Value* FunctionType::lt(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
|
||||||
throw std::runtime_error("Invalid operation for functions");
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::Value* FunctionType::gt(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
|
||||||
throw std::runtime_error("Invalid operation for functions");
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string PointerType::formatted() {
|
std::string PointerType::formatted() {
|
||||||
std::stringstream out{ "" };
|
std::stringstream out{ "" };
|
||||||
out << this->m_inner->formatted() << "*";
|
out << this->m_inner->formatted() << "*";
|
||||||
return out.str();
|
return out.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::shared_ptr<Type>> PointerType::return_type() {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
std::pair<llvm::Value*, std::shared_ptr<Type>> PointerType::load(codegen::Builder& builder, llvm::Value* ptr) {
|
std::pair<llvm::Value*, std::shared_ptr<Type>> PointerType::load(codegen::Builder& builder, llvm::Value* ptr) {
|
||||||
return std::pair(
|
return std::pair(
|
||||||
builder.builder->CreateLoad(this->m_inner->codegen(builder), ptr),
|
builder.builder->CreateLoad(this->m_inner->codegen(builder), ptr),
|
||||||
this->m_inner
|
this->m_inner
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
llvm::Value* PointerType::add(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
|
||||||
throw std::runtime_error("Invalid operation for pointers");
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::Value* PointerType::sub(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
|
||||||
throw std::runtime_error("Invalid operation for pointers");
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::Value* PointerType::lt(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
|
||||||
throw std::runtime_error("Invalid operation for pointers");
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::Value* PointerType::gt(codegen::Builder&, llvm::Value*, llvm::Value*) {
|
|
||||||
throw std::runtime_error("Invalid operation for pointers");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
20
src/types.h
20
src/types.h
@ -31,11 +31,11 @@ namespace types {
|
|||||||
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 std::pair<llvm::Value*, std::shared_ptr<Type>> load(codegen::Builder& builder, llvm::Value* ptr) = 0;
|
virtual std::pair<llvm::Value*, std::shared_ptr<Type>> load(codegen::Builder& builder, llvm::Value* ptr) = 0;
|
||||||
virtual std::optional<std::shared_ptr<Type>> return_type() = 0;
|
virtual std::optional<std::shared_ptr<Type>> return_type();
|
||||||
virtual llvm::Value* add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) = 0;
|
virtual llvm::Value* add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs);
|
||||||
virtual llvm::Value* sub(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) = 0;
|
virtual llvm::Value* sub(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs);
|
||||||
virtual llvm::Value* lt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) = 0;
|
virtual llvm::Value* lt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs);
|
||||||
virtual llvm::Value* gt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) = 0;
|
virtual llvm::Value* gt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs);
|
||||||
};
|
};
|
||||||
|
|
||||||
class FundamentalType : public Type {
|
class FundamentalType : public Type {
|
||||||
@ -47,7 +47,6 @@ namespace types {
|
|||||||
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 std::pair<llvm::Value*, std::shared_ptr<Type>> load(codegen::Builder& builder, llvm::Value* ptr) override;
|
virtual std::pair<llvm::Value*, std::shared_ptr<Type>> load(codegen::Builder& builder, llvm::Value* ptr) override;
|
||||||
virtual std::optional<std::shared_ptr<Type>> return_type() override;
|
|
||||||
virtual llvm::Value* add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
virtual llvm::Value* add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
||||||
virtual llvm::Value* sub(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
virtual llvm::Value* sub(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
||||||
virtual llvm::Value* lt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
virtual llvm::Value* lt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
||||||
@ -69,10 +68,6 @@ namespace types {
|
|||||||
virtual llvm::Type* codegen(codegen::Builder& builder) override;
|
virtual llvm::Type* codegen(codegen::Builder& builder) override;
|
||||||
virtual std::pair<llvm::Value*, std::shared_ptr<Type>> load(codegen::Builder& builder, llvm::Value* ptr) override;
|
virtual std::pair<llvm::Value*, std::shared_ptr<Type>> load(codegen::Builder& builder, llvm::Value* ptr) override;
|
||||||
virtual std::optional<std::shared_ptr<Type>> return_type() override;
|
virtual std::optional<std::shared_ptr<Type>> return_type() override;
|
||||||
virtual llvm::Value* add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
|
||||||
virtual llvm::Value* sub(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
|
||||||
virtual llvm::Value* lt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
|
||||||
virtual llvm::Value* gt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -88,11 +83,6 @@ namespace types {
|
|||||||
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 std::pair<llvm::Value*, std::shared_ptr<Type>> load(codegen::Builder& builder, llvm::Value* ptr) override;
|
virtual std::pair<llvm::Value*, std::shared_ptr<Type>> load(codegen::Builder& builder, llvm::Value* ptr) override;
|
||||||
virtual std::optional<std::shared_ptr<Type>> return_type() override;
|
|
||||||
virtual llvm::Value* add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
|
||||||
virtual llvm::Value* sub(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
|
||||||
virtual llvm::Value* lt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
|
||||||
virtual llvm::Value* gt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) override;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user