diff options
author | David Greene <greened@obbligato.org> | 2011-10-19 13:02:42 +0000 |
---|---|---|
committer | David Greene <greened@obbligato.org> | 2011-10-19 13:02:42 +0000 |
commit | e22b321d2276b634519165b101b02d92c2fcf5c7 (patch) | |
tree | d54a935a96598142d0b8148c175dac984007970b /lib/TableGen/Record.cpp | |
parent | 917924d9912df76ba2e639c8c5b00cdcac91a16e (diff) | |
download | llvm-e22b321d2276b634519165b101b02d92c2fcf5c7.tar.gz llvm-e22b321d2276b634519165b101b02d92c2fcf5c7.tar.bz2 llvm-e22b321d2276b634519165b101b02d92c2fcf5c7.tar.xz |
Make Template Arg Names Inits
Allow template arg names to be Inits. This is further work to
implement paste as it allows template names to participate in paste
operations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142500 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/TableGen/Record.cpp')
-rw-r--r-- | lib/TableGen/Record.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/TableGen/Record.cpp b/lib/TableGen/Record.cpp index a6407ab607..b12589b7e8 100644 --- a/lib/TableGen/Record.cpp +++ b/lib/TableGen/Record.cpp @@ -760,7 +760,9 @@ Init *UnOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) const { return VarInit::get(Name, RV->getType()); } - std::string TemplateArgName = CurRec->getName()+":"+Name; + Init *TemplateArgName = QualifyName(*CurRec, CurMultiClass, Name, + ":"); + if (CurRec->isTemplateArg(TemplateArgName)) { const RecordVal *RV = CurRec->getValue(TemplateArgName); assert(RV && "Template arg doesn't exist??"); @@ -773,7 +775,8 @@ Init *UnOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) const { } if (CurMultiClass) { - std::string MCName = CurMultiClass->Rec.getName()+"::"+Name; + Init *MCName = QualifyName(CurMultiClass->Rec, CurMultiClass, Name, "::"); + if (CurMultiClass->Rec.isTemplateArg(MCName)) { const RecordVal *RV = CurMultiClass->Rec.getValue(MCName); assert(RV && "Template arg doesn't exist??"); @@ -1765,7 +1768,7 @@ void Record::dump() const { errs() << *this; } raw_ostream &llvm::operator<<(raw_ostream &OS, const Record &R) { OS << R.getName(); - const std::vector<std::string> &TArgs = R.getTemplateArgs(); + const std::vector<Init *> &TArgs = R.getTemplateArgs(); if (!TArgs.empty()) { OS << "<"; for (unsigned i = 0, e = TArgs.size(); i != e; ++i) { |