代码拉取完成,页面将自动刷新
//
// 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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。