#include "DSL/AST.h"
#include <llvm/IR/Constants.h>
#include <llvm/IR/LLVMContext.h>
llvm::Value* NumberExprAST::codegen(llvm::IRBuilder<>& builder) {
return llvm::ConstantFP::get(builder.getDoubleTy()->getContext(), llvm::APFloat(value));
}
llvm::Value* BinaryExprAST::codegen(llvm::IRBuilder<>& builder) {
llvm::Value* L = lhs->codegen(builder);
llvm::Value* R = rhs->codegen(builder);
if (!L || !R) return nullptr;
switch (op) {
case TokenType::Plus:
return builder.CreateFAdd(L, R, "addtmp");
case TokenType::Minus:
return builder.CreateFSub(L, R, "subtmp");
case TokenType::Asterisk:
return builder.CreateFMul(L, R, "multmp");
case TokenType::Slash:
return builder.CreateFDiv(L, R, "divtmp");
default:
return nullptr;
}
}
Note: We use LLVM’s IRBuilder
to simplify the creation of IR instructions. Adjust the code if your LLVM API has evolved by 2025.