1 Star 0 Fork 0

sen/TinyCompiler

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
TypeSystem.h 2.55 KB
一键复制 编辑 原始数据 按行查看 历史
//
// Created by cs on 2017/5/31.
//
#ifndef TINYCOMPILER_TYPESYSTEM_H
#define TINYCOMPILER_TYPESYSTEM_H
#include <llvm/IR/Type.h>
#include <llvm/IR/Value.h>
#include <llvm/IR/LLVMContext.h>
#include <llvm/IR/IRBuilder.h>
#include <llvm/IR/Module.h>
#include <string>
#include <map>
#include <vector>
#include "ASTNodes.h"
using std::string;
using namespace llvm;
//
//struct VarType {
// string name;
//
// VarType(string name): name(name){}
//
// virtual Value* getDefaultValue(LLVMContext & context) const;
//
// virtual bool isArray() const{
// return false;
// }
//
// virtual bool isStruct() const{
// return false;
// }
//
//};
//
//struct VarArrayType: VarType{
//
// NExpression & size;
//
// VarArrayType(string name, NExpression& size)
// :VarType(name), size(size){
//
// }
//
// Value *getDefaultValue(LLVMContext &context) const override;
//
//
// bool isArray() const override{
// return true;
// }
//
//};
//
//struct VarStructType: VarType{
// VarStructType(string name): VarType(name){}
//
// Value *getDefaultValue(LLVMContext &context) const override ;
//
// bool isStruct() const override{
// return true;
// }
//};
using TypeNamePair = std::pair<std::string, std::string>;
class TypeSystem{
private:
LLVMContext& llvmContext;
std::map<string, std::vector<TypeNamePair>> _structMembers;
std::map<string, llvm::StructType*> _structTypes;
std::map<Type*, std::map<Type*, CastInst::CastOps>> _castTable;
void addCast(Type* from, Type* to, CastInst::CastOps op);
public:
Type* floatTy = Type::getFloatTy(llvmContext);
Type* intTy = Type::getInt32Ty(llvmContext);
Type* charTy = Type::getInt8Ty(llvmContext);
Type* doubleTy = Type::getDoubleTy(llvmContext);
Type* stringTy = Type::getInt8PtrTy(llvmContext);
Type* voidTy = Type::getVoidTy(llvmContext);
Type* boolTy = Type::getInt1Ty(llvmContext);
TypeSystem(LLVMContext& context);
void addStructType(string structName, llvm::StructType*);
void addStructMember(string structName, string memType, string memName);
long getStructMemberIndex(string structName, string memberName);
Type* getVarType(const NIdentifier& type) ;
Type* getVarType(string typeStr) ;
Value* getDefaultValue(string typeStr, LLVMContext &context) ;
Value* cast(Value* value, Type* type, BasicBlock* block) ;
bool isStruct(string typeStr) const;
static string llvmTypeToStr(Value* value) ;
static string llvmTypeToStr(Type* type) ;
};
#endif //TINYCOMPILER_TYPESYSTEM_H
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/thzsen/TinyCompiler.git
git@gitee.com:thzsen/TinyCompiler.git
thzsen
TinyCompiler
TinyCompiler
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385