45 lines
1.0 KiB
C++
45 lines
1.0 KiB
C++
#include "types.h"
|
|
|
|
#include <sstream>
|
|
|
|
namespace types {
|
|
int operator_precedence(BinOp& op) {
|
|
switch (op) {
|
|
case BinOp::Assignment:
|
|
return 1000;
|
|
case BinOp::Add:
|
|
return 10;
|
|
default:
|
|
return 1000;
|
|
}
|
|
}
|
|
|
|
std::string format_operator(BinOp& op) {
|
|
switch (op) {
|
|
case BinOp::Assignment:
|
|
return "=";
|
|
case BinOp::Add:
|
|
return "+";
|
|
default:
|
|
return "??";
|
|
}
|
|
}
|
|
|
|
std::string FundamentalType::formatted() {
|
|
switch (this->m_ty) {
|
|
case FundamentalTypeKind::Int:
|
|
return "Int";
|
|
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");
|
|
}
|
|
}
|
|
} |