summaryrefslogtreecommitdiffstats
path: root/utils/TableGen/Record.cpp
diff options
context:
space:
mode:
authorDavid Greene <greened@obbligato.org>2009-05-14 21:22:49 +0000
committerDavid Greene <greened@obbligato.org>2009-05-14 21:22:49 +0000
commite6c27de069225e1122c78385ad22a2ff656db8e6 (patch)
treebf1ff9c77caee5b28119d5760b34a6fd530023ed /utils/TableGen/Record.cpp
parentd418c1b768b5ff26afe05a5ce84d920bbbc99583 (diff)
downloadexternal_llvm-e6c27de069225e1122c78385ad22a2ff656db8e6.zip
external_llvm-e6c27de069225e1122c78385ad22a2ff656db8e6.tar.gz
external_llvm-e6c27de069225e1122c78385ad22a2ff656db8e6.tar.bz2
Implement !cast.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71794 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/Record.cpp')
-rw-r--r--utils/TableGen/Record.cpp162
1 files changed, 81 insertions, 81 deletions
diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp
index 0f31861..2a8ddaa 100644
--- a/utils/TableGen/Record.cpp
+++ b/utils/TableGen/Record.cpp
@@ -132,17 +132,17 @@ Init *IntRecTy::convertValue(TypedInit *TI) {
return 0;
}
-// Init *StringRecTy::convertValue(UnOpInit *BO) {
-// if (BO->getOpcode() == UnOpInit::CAST) {
-// Init *L = BO->getOperand()->convertInitializerTo(this);
-// if (L == 0) return 0;
-// if (L != BO->getOperand())
-// return new UnOpInit(UnOpInit::CAST, L, new StringRecTy);
-// return BO;
-// }
+Init *StringRecTy::convertValue(UnOpInit *BO) {
+ if (BO->getOpcode() == UnOpInit::CAST) {
+ Init *L = BO->getOperand()->convertInitializerTo(this);
+ if (L == 0) return 0;
+ if (L != BO->getOperand())
+ return new UnOpInit(UnOpInit::CAST, L, new StringRecTy);
+ return BO;
+ }
-// return convertValue((TypedInit*)BO);
-// }
+ return convertValue((TypedInit*)BO);
+}
Init *StringRecTy::convertValue(BinOpInit *BO) {
if (BO->getOpcode() == BinOpInit::STRCONCAT) {
@@ -212,16 +212,16 @@ Init *DagRecTy::convertValue(TypedInit *TI) {
return 0;
}
-// Init *DagRecTy::convertValue(UnOpInit *BO) {
-// if (BO->getOpcode() == UnOpInit::CAST) {
-// Init *L = BO->getOperand()->convertInitializerTo(this);
-// if (L == 0) return 0;
-// if (L != BO->getOperand())
-// return new UnOpInit(UnOpInit::CAST, L, new DagRecTy);
-// return BO;
-// }
-// return 0;
-// }
+Init *DagRecTy::convertValue(UnOpInit *BO) {
+ if (BO->getOpcode() == UnOpInit::CAST) {
+ Init *L = BO->getOperand()->convertInitializerTo(this);
+ if (L == 0) return 0;
+ if (L != BO->getOperand())
+ return new UnOpInit(UnOpInit::CAST, L, new DagRecTy);
+ return BO;
+ }
+ return 0;
+}
Init *DagRecTy::convertValue(BinOpInit *BO) {
if (BO->getOpcode() == BinOpInit::CONCAT) {
@@ -467,78 +467,78 @@ Init *OpInit::resolveListElementReference(Record &R, const RecordVal *IRV,
return 0;
}
-// Init *UnOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) {
-// switch (getOpcode()) {
-// default: assert(0 && "Unknown unop");
-// case CAST: {
-// StringInit *LHSs = dynamic_cast<StringInit*>(LHS);
-// if (LHSs) {
-// std::string Name = LHSs->getValue();
-
-// // From TGParser::ParseIDValue
-// if (CurRec) {
-// if (const RecordVal *RV = CurRec->getValue(Name)) {
-// if (RV->getType() != getType()) {
-// throw "type mismatch in nameconcat";
-// }
-// return new VarInit(Name, RV->getType());
-// }
+Init *UnOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) {
+ switch (getOpcode()) {
+ default: assert(0 && "Unknown unop");
+ case CAST: {
+ StringInit *LHSs = dynamic_cast<StringInit*>(LHS);
+ if (LHSs) {
+ std::string Name = LHSs->getValue();
+
+ // From TGParser::ParseIDValue
+ if (CurRec) {
+ if (const RecordVal *RV = CurRec->getValue(Name)) {
+ if (RV->getType() != getType()) {
+ throw "type mismatch in nameconcat";
+ }
+ return new VarInit(Name, RV->getType());
+ }
-// std::string TemplateArgName = CurRec->getName()+":"+Name;
-// if (CurRec->isTemplateArg(TemplateArgName)) {
-// const RecordVal *RV = CurRec->getValue(TemplateArgName);
-// assert(RV && "Template arg doesn't exist??");
+ std::string TemplateArgName = CurRec->getName()+":"+Name;
+ if (CurRec->isTemplateArg(TemplateArgName)) {
+ const RecordVal *RV = CurRec->getValue(TemplateArgName);
+ assert(RV && "Template arg doesn't exist??");
-// if (RV->getType() != getType()) {
-// throw "type mismatch in nameconcat";
-// }
+ if (RV->getType() != getType()) {
+ throw "type mismatch in nameconcat";
+ }
-// return new VarInit(TemplateArgName, RV->getType());
-// }
-// }
+ return new VarInit(TemplateArgName, RV->getType());
+ }
+ }
-// if (CurMultiClass) {
-// std::string MCName = CurMultiClass->Rec.getName()+"::"+Name;
-// if (CurMultiClass->Rec.isTemplateArg(MCName)) {
-// const RecordVal *RV = CurMultiClass->Rec.getValue(MCName);
-// assert(RV && "Template arg doesn't exist??");
+ if (CurMultiClass) {
+ std::string MCName = CurMultiClass->Rec.getName()+"::"+Name;
+ if (CurMultiClass->Rec.isTemplateArg(MCName)) {
+ const RecordVal *RV = CurMultiClass->Rec.getValue(MCName);
+ assert(RV && "Template arg doesn't exist??");
-// if (RV->getType() != getType()) {
-// throw "type mismatch in nameconcat";
-// }
+ if (RV->getType() != getType()) {
+ throw "type mismatch in nameconcat";
+ }
-// return new VarInit(MCName, RV->getType());
-// }
-// }
+ return new VarInit(MCName, RV->getType());
+ }
+ }
-// if (Record *D = Records.getDef(Name))
-// return new DefInit(D);
+ if (Record *D = Records.getDef(Name))
+ return new DefInit(D);
-// cerr << "Variable not defined: '" + Name + "'\n";
-// assert(0 && "Variable not found");
-// return 0;
-// }
-// break;
-// }
-// }
-// return this;
-// }
+ cerr << "Variable not defined: '" + Name + "'\n";
+ assert(0 && "Variable not found");
+ return 0;
+ }
+ break;
+ }
+ }
+ return this;
+}
-// Init *UnOpInit::resolveReferences(Record &R, const RecordVal *RV) {
-// Init *lhs = LHS->resolveReferences(R, RV);
+Init *UnOpInit::resolveReferences(Record &R, const RecordVal *RV) {
+ Init *lhs = LHS->resolveReferences(R, RV);
-// if (LHS != lhs)
-// return (new UnOpInit(getOpcode(), lhs, getType()))->Fold(&R, 0);
-// return Fold(&R, 0);
-// }
+ if (LHS != lhs)
+ return (new UnOpInit(getOpcode(), lhs, getType()))->Fold(&R, 0);
+ return Fold(&R, 0);
+}
-// std::string UnOpInit::getAsString() const {
-// std::string Result;
-// switch (Opc) {
-// case CAST: Result = "!cast<" + getType()->getAsString() + ">"; break;
-// }
-// return Result + "(" + LHS->getAsString() + ")";
-// }
+std::string UnOpInit::getAsString() const {
+ std::string Result;
+ switch (Opc) {
+ case CAST: Result = "!cast<" + getType()->getAsString() + ">"; break;
+ }
+ return Result + "(" + LHS->getAsString() + ")";
+}
Init *BinOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) {
switch (getOpcode()) {