39 lines
886 B
C++
39 lines
886 B
C++
|
|
#ifndef BINOP_H
|
|
#define BINOP_H
|
|
|
|
#include <memory>
|
|
|
|
#include "types.h"
|
|
|
|
namespace types {
|
|
enum class BinOp {
|
|
Assignment,
|
|
Add,
|
|
Sub,
|
|
LessThan,
|
|
GreaterThan,
|
|
};
|
|
|
|
int operator_precedence(BinOp& op);
|
|
std::string format_operator(BinOp& op);
|
|
|
|
struct BinopDefinition {
|
|
std::shared_ptr<Type> lhs;
|
|
BinOp op;
|
|
std::shared_ptr<Type> rhs;
|
|
llvm::Value* (*codegen)(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs);
|
|
std::shared_ptr<Type>(*result)(BinopDefinition& def, std::shared_ptr<Type> lhs, std::shared_ptr<Type> rhs);
|
|
};
|
|
|
|
std::vector<BinopDefinition> create_binops();
|
|
|
|
std::optional<BinopDefinition> find_binop(
|
|
std::vector<BinopDefinition>& binops,
|
|
std::shared_ptr<types::Type> lhs,
|
|
BinOp op,
|
|
std::shared_ptr<types::Type> rhs);
|
|
|
|
}
|
|
|
|
#endif |