Add support to tablegen for naming the nodes themselves, not just the operands,
[oota-llvm.git] / utils / TableGen / Record.h
index 5eb07eb1e996c6dbfbea2737caea4a2ff5895fe1..32172ef12ae6cf5b8afb76a8bb49489cfa901493 100644 (file)
@@ -857,11 +857,13 @@ public:
 ///
 class DagInit : public Init {
   Init *Val;
+  std::string ValName;
   std::vector<Init*> Args;
   std::vector<std::string> ArgNames;
 public:
-  DagInit(Init *V, const std::vector<std::pair<Init*, std::string> > &args)
-    : Val(V) {
+  DagInit(Init *V, std::string VN, 
+          const std::vector<std::pair<Init*, std::string> > &args)
+    : Val(V), ValName(VN) {
     Args.reserve(args.size());
     ArgNames.reserve(args.size());
     for (unsigned i = 0, e = args.size(); i != e; ++i) {
@@ -869,9 +871,9 @@ public:
       ArgNames.push_back(args[i].second);
     }
   }
-  DagInit(Init *V, const std::vector<Init*> &args, 
+  DagInit(Init *V, std::string VN, const std::vector<Init*> &args, 
           const std::vector<std::string> &argNames)
-  : Val(V), Args(args), ArgNames(argNames) {
+  : Val(V), ValName(VN), Args(args), ArgNames(argNames) {
   }
   
   virtual Init *convertInitializerTo(RecTy *Ty) {
@@ -880,6 +882,8 @@ public:
 
   Init *getOperator() const { return Val; }
 
+  const std::string &getName() const { return ValName; }
+
   unsigned getNumArgs() const { return Args.size(); }
   Init *getArg(unsigned Num) const {
     assert(Num < Args.size() && "Arg number out of range!");
@@ -1017,7 +1021,7 @@ public:
     assert(0 && "Name does not exist in record!");
   }
 
-  bool isSubClassOf(Record *R) const {
+  bool isSubClassOf(const Record *R) const {
     for (unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
       if (SuperClasses[i] == R)
         return true;
@@ -1195,6 +1199,17 @@ struct LessRecordFieldName {
   }
 };
 
+
+class TGError {
+  TGLoc Loc;
+  std::string Message;
+public:
+  TGError(TGLoc loc, const std::string &message) : Loc(loc), Message(message) {}
+  
+  TGLoc getLoc() const { return Loc; }
+  const std::string &getMessage() const { return Message; }
+};
+  
   
 std::ostream &operator<<(std::ostream &OS, const RecordKeeper &RK);