forked from OSchip/llvm-project
Add Utility to Scope Names
Add a couple of utility functions to take a variable name and qualify it with the namespace of the enclosing class and/or multiclass. This is inpreparation for making template arg names first-class Inits. llvm-svn: 142498
This commit is contained in:
parent
914adf0ecb
commit
e714512cb6
|
@ -1674,6 +1674,16 @@ struct LessRecordFieldName {
|
||||||
|
|
||||||
raw_ostream &operator<<(raw_ostream &OS, const RecordKeeper &RK);
|
raw_ostream &operator<<(raw_ostream &OS, const RecordKeeper &RK);
|
||||||
|
|
||||||
|
/// QualifyName - Return an Init with a qualifier prefix referring
|
||||||
|
/// to CurRec's name.
|
||||||
|
Init *QualifyName(Record &CurRec, MultiClass *CurMultiClass,
|
||||||
|
Init *Name, const std::string &Scoper);
|
||||||
|
|
||||||
|
/// QualifyName - Return an Init with a qualifier prefix referring
|
||||||
|
/// to CurRec's name.
|
||||||
|
Init *QualifyName(Record &CurRec, MultiClass *CurMultiClass,
|
||||||
|
const std::string &Name, const std::string &Scoper);
|
||||||
|
|
||||||
} // End llvm namespace
|
} // End llvm namespace
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2041,3 +2041,39 @@ RecordKeeper::getAllDerivedDefinitions(const std::string &ClassName) const {
|
||||||
return Defs;
|
return Defs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// QualifyName - Return an Init with a qualifier prefix referring
|
||||||
|
/// to CurRec's name.
|
||||||
|
Init *llvm::QualifyName(Record &CurRec, MultiClass *CurMultiClass,
|
||||||
|
Init *Name, const std::string &Scoper) {
|
||||||
|
RecTy *Type = dynamic_cast<TypedInit *>(Name)->getType();
|
||||||
|
|
||||||
|
BinOpInit *NewName =
|
||||||
|
BinOpInit::get(BinOpInit::STRCONCAT,
|
||||||
|
BinOpInit::get(BinOpInit::STRCONCAT,
|
||||||
|
CurRec.getNameInit(),
|
||||||
|
StringInit::get(Scoper),
|
||||||
|
Type)->Fold(&CurRec, CurMultiClass),
|
||||||
|
Name,
|
||||||
|
Type);
|
||||||
|
|
||||||
|
if (CurMultiClass && Scoper != "::") {
|
||||||
|
NewName =
|
||||||
|
BinOpInit::get(BinOpInit::STRCONCAT,
|
||||||
|
BinOpInit::get(BinOpInit::STRCONCAT,
|
||||||
|
CurMultiClass->Rec.getNameInit(),
|
||||||
|
StringInit::get("::"),
|
||||||
|
Type)->Fold(&CurRec, CurMultiClass),
|
||||||
|
NewName->Fold(&CurRec, CurMultiClass),
|
||||||
|
Type);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NewName->Fold(&CurRec, CurMultiClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// QualifyName - Return an Init with a qualifier prefix referring
|
||||||
|
/// to CurRec's name.
|
||||||
|
Init *llvm::QualifyName(Record &CurRec, MultiClass *CurMultiClass,
|
||||||
|
const std::string &Name,
|
||||||
|
const std::string &Scoper) {
|
||||||
|
return QualifyName(CurRec, CurMultiClass, StringInit::get(Name), Scoper);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue