Make RecordVal Name an Init

Store a RecordVal's name as an Init to allow class-qualified Record
members to reference Records that have Init names.  We'll use this to
provide more programmability in how we name defs and their associated
members.

llvm-svn: 139031
This commit is contained in:
David Greene 2011-09-02 20:12:07 +00:00
parent 90a1526592
commit 9cb3b3dd2e
2 changed files with 16 additions and 3 deletions
utils/TableGen

View File

@ -1619,12 +1619,24 @@ std::string DagInit::getAsString() const {
// Other implementations
//===----------------------------------------------------------------------===//
RecordVal::RecordVal(const std::string &N, RecTy *T, unsigned P)
RecordVal::RecordVal(Init *N, RecTy *T, unsigned P)
: Name(N), Ty(T), Prefix(P) {
Value = Ty->convertValue(UnsetInit::get());
assert(Value && "Cannot create unset value for current type!");
}
RecordVal::RecordVal(const std::string &N, RecTy *T, unsigned P)
: Name(StringInit::get(N)), Ty(T), Prefix(P) {
Value = Ty->convertValue(UnsetInit::get());
assert(Value && "Cannot create unset value for current type!");
}
const std::string &RecordVal::getName() const {
StringInit *NameString = dynamic_cast<StringInit *>(Name);
assert(NameString && "RecordVal name is not a string!");
return NameString->getValue();
}
void RecordVal::dump() const { errs() << *this; }
void RecordVal::print(raw_ostream &OS, bool PrintSem) const {

View File

@ -1337,14 +1337,15 @@ public:
//===----------------------------------------------------------------------===//
class RecordVal {
std::string Name;
Init *Name;
RecTy *Ty;
unsigned Prefix;
Init *Value;
public:
RecordVal(Init *N, RecTy *T, unsigned P);
RecordVal(const std::string &N, RecTy *T, unsigned P);
const std::string &getName() const { return Name; }
const std::string &getName() const;
unsigned getPrefix() const { return Prefix; }
RecTy *getType() const { return Ty; }