* Move BitsInit::resolveReferences up with the rest of BitsInit code
authorChris Lattner <sabre@nondot.org>
Mon, 2 Dec 2002 16:43:30 +0000 (16:43 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 2 Dec 2002 16:43:30 +0000 (16:43 +0000)
* Initial support for field expressions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4849 91177308-0d34-0410-b5e6-96231b3b80d8

support/tools/TableGen/Record.cpp
utils/TableGen/Record.cpp

index 8324bad5c162e42a44427d838cf56986395550fd..d9cddf8fce2b0577c70edd54590fdb37cc4ab045 100644 (file)
@@ -206,6 +206,26 @@ bool BitsInit::printAsUnset(std::ostream &OS) const {
   return false;
 }
 
+Init *BitsInit::resolveReferences(Record &R) {
+  bool Changed = false;
+  BitsInit *New = new BitsInit(getNumBits());
+
+  for (unsigned i = 0, e = Bits.size(); i != e; ++i) {
+    Init *B;
+    New->setBit(i, getBit(i));
+    do {
+      B = New->getBit(i);
+      New->setBit(i, B->resolveReferences(R));
+      Changed |= B != New->getBit(i);
+    } while (B != New->getBit(i));
+  }
+
+  if (Changed)
+    return New;
+  delete New;
+  return this;
+}
+
 Init *IntInit::convertInitializerBitRange(const std::vector<unsigned> &Bits) {
   BitsInit *BI = new BitsInit(Bits.size());
 
@@ -244,28 +264,14 @@ Init *VarInit::convertInitializerBitRange(const std::vector<unsigned> &Bits) {
   return BI;
 }
 
-Init *BitsInit::resolveReferences(Record &R) {
-  bool Changed = false;
-  BitsInit *New = new BitsInit(getNumBits());
-
-  for (unsigned i = 0, e = Bits.size(); i != e; ++i) {
-    Init *B;
-    New->setBit(i, getBit(i));
-    do {
-      B = New->getBit(i);
-      New->setBit(i, B->resolveReferences(R));
-      Changed |= B != New->getBit(i);
-    } while (B != New->getBit(i));
-  }
-
-  if (Changed)
-    return New;
-  delete New;
-  return this;
+RecTy *VarInit::getFieldType(const std::string &FieldName) const {
+  if (RecordRecTy *RTy = dynamic_cast<RecordRecTy*>(Ty))
+    if (const RecordVal *RV = RTy->getRecord()->getValue(FieldName))
+      return RV->getType();
+  return 0;
 }
 
 
-
 Init *VarBitInit::resolveReferences(Record &R) {
   if (R.isTemplateArg(getVariable()->getName()))
     return this;
index 8324bad5c162e42a44427d838cf56986395550fd..d9cddf8fce2b0577c70edd54590fdb37cc4ab045 100644 (file)
@@ -206,6 +206,26 @@ bool BitsInit::printAsUnset(std::ostream &OS) const {
   return false;
 }
 
+Init *BitsInit::resolveReferences(Record &R) {
+  bool Changed = false;
+  BitsInit *New = new BitsInit(getNumBits());
+
+  for (unsigned i = 0, e = Bits.size(); i != e; ++i) {
+    Init *B;
+    New->setBit(i, getBit(i));
+    do {
+      B = New->getBit(i);
+      New->setBit(i, B->resolveReferences(R));
+      Changed |= B != New->getBit(i);
+    } while (B != New->getBit(i));
+  }
+
+  if (Changed)
+    return New;
+  delete New;
+  return this;
+}
+
 Init *IntInit::convertInitializerBitRange(const std::vector<unsigned> &Bits) {
   BitsInit *BI = new BitsInit(Bits.size());
 
@@ -244,28 +264,14 @@ Init *VarInit::convertInitializerBitRange(const std::vector<unsigned> &Bits) {
   return BI;
 }
 
-Init *BitsInit::resolveReferences(Record &R) {
-  bool Changed = false;
-  BitsInit *New = new BitsInit(getNumBits());
-
-  for (unsigned i = 0, e = Bits.size(); i != e; ++i) {
-    Init *B;
-    New->setBit(i, getBit(i));
-    do {
-      B = New->getBit(i);
-      New->setBit(i, B->resolveReferences(R));
-      Changed |= B != New->getBit(i);
-    } while (B != New->getBit(i));
-  }
-
-  if (Changed)
-    return New;
-  delete New;
-  return this;
+RecTy *VarInit::getFieldType(const std::string &FieldName) const {
+  if (RecordRecTy *RTy = dynamic_cast<RecordRecTy*>(Ty))
+    if (const RecordVal *RV = RTy->getRecord()->getValue(FieldName))
+      return RV->getType();
+  return 0;
 }
 
 
-
 Init *VarBitInit::resolveReferences(Record &R) {
   if (R.isTemplateArg(getVariable()->getName()))
     return this;