//===- Record.h - Classes to represent Table Records ------------*- C++ -*-===////// The LLVM Compiler Infrastructure//// This file is distributed under the University of Illinois Open Source// License. See LICENSE.TXT for details.////===----------------------------------------------------------------------===////// This file defines the main TableGen data structures, including the TableGen// types, values, and high-level data structures.////===----------------------------------------------------------------------===//#ifndef RECORD_H#define RECORD_H#include"llvm/Support/DataTypes.h"#include<string>#include<vector>#include<map>#include<ostream>#include<cassert>namespacellvm{// RecTy subclasses.classBitRecTy;classBitsRecTy;classIntRecTy;classStringRecTy;classListRecTy;classCodeRecTy;classDagRecTy;classRecordRecTy;// Init subclasses.structInit;classUnsetInit;classBitInit;classBitsInit;classIntInit;classStringInit;classCodeInit;classListInit;classBinOpInit;classDefInit;classDagInit;classTypedInit;classVarInit;classFieldInit;classVarBitInit;classVarListElementInit;// Other classes.classRecord;classRecordVal;//===----------------------------------------------------------------------===//// Type Classes//===----------------------------------------------------------------------===//structRecTy{virtual~RecTy(){}virtualstd::stringgetAsString()const=0;voidprint(std::ostream&OS)const{OS<<getAsString();}voiddump()const;/// typeIsConvertibleTo - Return true if all values of 'this' type can be/// converted to the specified type.virtualbooltypeIsConvertibleTo(constRecTy*RHS)const=0;public:// These methods should only be called from subclasses of InitvirtualInit*convertValue(UnsetInit*UI){return0;}virtualInit*convertValue(BitInit*BI){return0;}virtualInit*convertValue(BitsInit*BI){return0;}virtualInit*convertValue(IntInit*II){return0;}virtualInit*convertValue(StringInit*SI){return0;}virtualInit*convertValue(ListInit*LI){return0;}virtualInit*convertValue(BinOpInit*UI){return0;}virtualInit*convertValue(CodeInit*CI){return0;}virtualInit*convertValue(VarBitInit*VB){return0;}virtualInit*convertValue(DefInit*DI){return0;}virtualInit*convertValue(DagInit*DI){return0;}virtualInit*convertValue(TypedInit*TI){return