summaryrefslogtreecommitdiffstats
path: root/lib/TableGen/Record.cpp
diff options
context:
space:
mode:
authorDavid Greene <greened@obbligato.org>2011-10-19 13:02:42 +0000
committerDavid Greene <greened@obbligato.org>2011-10-19 13:02:42 +0000
commite22b321d2276b634519165b101b02d92c2fcf5c7 (patch)
treed54a935a96598142d0b8148c175dac984007970b /lib/TableGen/Record.cpp
parent917924d9912df76ba2e639c8c5b00cdcac91a16e (diff)
downloadexternal_llvm-e22b321d2276b634519165b101b02d92c2fcf5c7.zip
external_llvm-e22b321d2276b634519165b101b02d92c2fcf5c7.tar.gz
external_llvm-e22b321d2276b634519165b101b02d92c2fcf5c7.tar.bz2
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.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/TableGen/Record.cpp b/lib/TableGen/Record.cpp
index a6407ab..b12589b 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) {